Make Makefile strictly POSIX compliant - farbfeld - suckless image format with … | |
git clone git://git.suckless.org/farbfeld | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit bbe28227eb80da62fec59aa79ba7a97f5c3937b4 | |
parent 65829635d9f5f9f4a23c2f890c60c315bcbafee2 | |
Author: Laslo Hunhold <[email protected]> | |
Date: Thu, 30 Mar 2017 08:41:17 +0200 | |
Make Makefile strictly POSIX compliant | |
Thanks Hiltjo for the feedback! GNUisms need to be avoided like a | |
plague, even if it means having to be a little more creative. | |
Strict POSIX compliance means that I just worked within the bounds of | |
the POSIX specification, hopefully without using any GNU or BSD | |
extensions. If I did, please let me know. | |
Tip to all Linux users: Test your Makefiles with pmake(1) instead of | |
make(1) (= GNU make) and refer to the newest POSIX 2016 make | |
specification[0]. | |
[0]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html | |
Diffstat: | |
M Makefile | 27 +++++++++++++-------------- | |
M config.mk | 6 ++++-- | |
2 files changed, 17 insertions(+), 16 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
@@ -1,31 +1,32 @@ | |
-# farbfeld - suckless image format with conversion tools | |
# See LICENSE file for copyright and license details | |
+# farbfeld - suckless image format with conversion tools | |
+.POSIX: | |
+ | |
include config.mk | |
-REQ = | |
HDR = arg.h | |
BIN = png2ff ff2png jpg2ff ff2jpg ff2pam ff2ppm | |
-SCRIPTS = 2ff | |
+SCR = 2ff | |
MAN1 = 2ff.1 $(BIN:=.1) | |
MAN5 = farbfeld.5 | |
all: $(BIN) | |
-$(BIN): % : %.o $(REQ:=.o) | |
- $(CC) $^ $(LDFLAGS) -o $@ | |
+.o: $(REQ:=.o) | |
+ $(CC) $(CFLAGS) $($*-LDFLAGS) -o $@ $< $(REQ:=.o) | |
-$(BIN:=.o): $(HDR) $(REQ:=.h) | |
- | |
-%.o: %.c config.mk | |
+.c.o: | |
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< | |
+$(BIN:=.o): config.mk $(HDR) $(REQ:=.h) | |
+ | |
clean: | |
rm -f $(BIN) $(BIN:=.o) $(REQ:=.o) | |
dist: | |
rm -rf "farbfeld-$(VERSION)" | |
mkdir -p "farbfeld-$(VERSION)" | |
- cp -R FORMAT LICENSE Makefile README TODO config.mk $(SCRIPTS) \ | |
+ cp -R FORMAT LICENSE Makefile README TODO config.mk $(SCR) \ | |
$(HDR) $(BIN:=.c) $(REQ:=.c) $(REQ:=.h) \ | |
$(MAN1) $(MAN5) "farbfeld-$(VERSION)" | |
tar -cf - "farbfeld-$(VERSION)" | gzip -c > "farbfeld-$(VERSION).tar.g… | |
@@ -33,8 +34,8 @@ dist: | |
install: all | |
mkdir -p "$(DESTDIR)$(PREFIX)/bin" | |
- cp -f $(SCRIPTS) $(BIN) "$(DESTDIR)$(PREFIX)/bin" | |
- for f in $(BIN) $(SCRIPTS); do chmod 755 "$(DESTDIR)$(PREFIX)/bin/$$f"… | |
+ cp -f $(SCR) $(BIN) "$(DESTDIR)$(PREFIX)/bin" | |
+ for f in $(BIN) $(SCR); do chmod 755 "$(DESTDIR)$(PREFIX)/bin/$$f"; do… | |
mkdir -p "$(DESTDIR)$(MANPREFIX)/man1" | |
cp -f $(MAN1) "$(DESTDIR)$(MANPREFIX)/man1" | |
for m in $(MAN1); do chmod 644 "$(DESTDIR)$(MANPREFIX)/man1/$$m"; done | |
@@ -43,8 +44,6 @@ install: all | |
for m in $(MAN5); do chmod 644 "$(DESTDIR)$(MANPREFIX)/man5/$$m"; done | |
uninstall: | |
- for f in $(BIN) $(SCRIPTS); do rm -f "$(DESTDIR)$(PREFIX)/bin/$$f"; do… | |
+ for f in $(BIN) $(SCR); do rm -f "$(DESTDIR)$(PREFIX)/bin/$$f"; done | |
for m in $(MAN1); do rm -f "$(DESTDIR)$(MANPREFIX)/man1/$$m"; done | |
for m in $(MAN5); do rm -f "$(DESTDIR)$(MANPREFIX)/man5/$$m"; done | |
- | |
-.PHONY: all clean dist install uninstall | |
diff --git a/config.mk b/config.mk | |
@@ -12,8 +12,10 @@ CPPFLAGS = -D_DEFAULT_SOURCE | |
CFLAGS = -std=c89 -pedantic -Wall -Os | |
LDFLAGS = -s | |
-png2ff ff2png: LDFLAGS += -lpng | |
-jpg2ff ff2jpg: LDFLAGS += -ljpeg | |
+png2ff-LDFLAGS = -lpng | |
+ff2png-LDFLAGS = -lpng | |
+jpg2ff-LDFLAGS = -ljpeg | |
+ff2jpg-LDFLAGS = -ljpeg | |
# compiler and linker | |
CC = cc |