[hackers] [farbfeld] Makefile improvements || Hiltjo Posthuma

2016-05-18 Thread git
commit c494437937ee01c6d3eb5b630a15e207aae76c25
Author: Hiltjo Posthuma 
AuthorDate: Tue May 17 23:02:25 2016 +0200
Commit: FRIGN 
CommitDate: Wed May 18 10:34:05 2016 +0200

Makefile improvements

- fix: rebuild on source change.
- allow to override dependency flag per tool (the ones that have deps).
- rebuild on config.mk or headers change.

diff --git a/Makefile b/Makefile
index 21b82d9..2177d25 100644
--- a/Makefile
+++ b/Makefile
@@ -11,17 +11,20 @@ MAN5 = farbfeld.5
 
 all: ${BIN}
 
-png2ff ff2png:
-   ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} -L${PNGLIB} -lpng -I${PNGINC} 
${LDFLAGS} $@.c
+${BIN}: ${@:=.o}
 
-jpg2ff ff2jpg:
-   ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} -L${JPGLIB} -ljpeg -I${JPGINC} 
${LDFLAGS} $@.c
+OBJ = ${SRC:.c=.o}
 
-.c:
-   ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} $<
+${OBJ}: config.mk ${HDR}
+
+.o:
+   ${CC} ${CFLAGS} ${$*-LDFLAGS} -o $@ $<
+
+.c.o:
+   ${CC} ${CFLAGS} ${$*-CFLAGS} ${CPPFLAGS} -c $<
 
 clean:
-   rm -f ${BIN}
+   rm -f ${BIN} ${OBJ}
 
 dist:
rm -rf "farbfeld-${VERSION}"
diff --git a/config.mk b/config.mk
index 4ecba54..5fde97e 100644
--- a/config.mk
+++ b/config.mk
@@ -23,3 +23,17 @@ LDFLAGS  = -s ${LIBS}
 
 # compiler and linker
 CC = cc
+
+# flags per tool.
+
+png2ff-CFLAGS := -I${PNGINC}
+png2ff-LDFLAGS := -L${PNGLIB} -lpng
+
+ff2png-CFLAGS := -I${PNGINC}
+ff2png-LDFLAGS := -L${PNGLIB} -lpng
+
+jpg2ff-CFLAGS := -I${JPGINC}
+jpg2ff-LDFLAGS := -L${JPGLIB} -ljpeg
+
+ff2jpg-CFLAGS := -I${JPGINC}
+ff2jpg-LDFLAGS := -L${JPGLIB} -ljpeg



[hackers] [farbfeld] Makefile improvements || Hiltjo Posthuma

2016-04-03 Thread git
commit 47a5f38ce9d44b5c3c0dad9e7824c8e2156a203d
Author: Hiltjo Posthuma 
AuthorDate: Sun Apr 3 21:44:20 2016 +0200
Commit: FRIGN 
CommitDate: Sun Apr 3 22:07:12 2016 +0200

Makefile improvements

- be verbose by default: don't hide the executed commands.
- no need to make clean on make dist, but make sure to have a clean 
directory.
- define 2ff in ${SCRIPTS}.
- make dist: gzip directly, don't store intermediate step (faster for make 
dist
  on floppies).
- don't cd into directories, just loop each file.

diff --git a/Makefile b/Makefile
index 865e87b..c108e25 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@
 include config.mk
 
 BIN = png2ff ff2png jpg2ff ff2jpg ff2ppm
+SCRIPTS = 2ff
 SRC = ${BIN:=.c}
 HDR = arg.h
 MAN1 = 2ff.1 ${BIN:=.1}
@@ -11,49 +12,42 @@ MAN5 = farbfeld.5
 all: ${BIN}
 
 png2ff ff2png:
-   @echo CC $@
-   @${CC} -o $@ ${CFLAGS} ${CPPFLAGS} -L${PNGLIB} -lpng -I${PNGINC} \
+   ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} -L${PNGLIB} -lpng -I${PNGINC} \
${LDFLAGS} $@.c
 
 jpg2ff ff2jpg:
-   @echo CC $@
-   @${CC} -o $@ ${CFLAGS} ${CPPFLAGS} -L${JPGLIB} -ljpeg -I${JPGINC} \
+   ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} -L${JPGLIB} -ljpeg -I${JPGINC} \
${LDFLAGS} $@.c
 
 .c:
-   @echo CC $@
-   @${CC} -o $@ ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} $<
+   ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} $<
 
 clean:
-   @echo cleaning
-   @rm -f ${BIN}
-
-dist: clean
-   @echo creating dist tarball
-   @mkdir -p farbfeld-${VERSION}
-   @cp -R FORMAT LICENSE Makefile README TODO config.mk \
-   2ff ${HDR} ${SRC} ${MAN1} ${MAN5} farbfeld-${VERSION}
-   @tar -cf farbfeld-${VERSION}.tar farbfeld-${VERSION}
-   @gzip farbfeld-${VERSION}.tar
-   @rm -rf farbfeld-${VERSION}
+   rm -f ${BIN}
+
+dist:
+   rm -rf "farbfeld-${VERSION}"
+   mkdir -p "farbfeld-${VERSION}"
+   cp -R FORMAT LICENSE Makefile README TODO config.mk \
+   ${SCRIPTS} ${HDR} ${SRC} ${MAN1} ${MAN5} "farbfeld-${VERSION}"
+   tar -cf - "farbfeld-${VERSION}" | \
+   gzip -c > "farbfeld-${VERSION}.tar.gz"
+   rm -rf "farbfeld-${VERSION}"
 
 install: all
-   @echo installing into ${DESTDIR}${PREFIX}/bin
-   @mkdir -p "${DESTDIR}${PREFIX}/bin"
-   @cp -f 2ff ${BIN} "${DESTDIR}${PREFIX}/bin"
-   @echo installing manpages into ${DESTDIR}${MANPREFIX}
-   @mkdir -p "${DESTDIR}${MANPREFIX}/man1"
-   @cp -f ${MAN1} "${DESTDIR}${MANPREFIX}/man1"
-   @cd "${DESTDIR}${MANPREFIX}/man1" && chmod 644 ${MAN1}
-   @mkdir -p "${DESTDIR}${MANPREFIX}/man5"
-   @cp -f ${MAN5} "${DESTDIR}${MANPREFIX}/man5"
-   @cd "${DESTDIR}${MANPREFIX}/man5" && chmod 644 ${MAN5}
+   mkdir -p "${DESTDIR}${PREFIX}/bin"
+   cp -f ${SCRIPTS} ${BIN} "${DESTDIR}${PREFIX}/bin"
+   for f in $(BIN) $(SCRIPTS); do chmod 755 "${DESTDIR}${PREFIX}/bin/$$f"; 
done
+   mkdir -p "${DESTDIR}${MANPREFIX}/man1"
+   cp -f ${MAN1} "${DESTDIR}${MANPREFIX}/man1"
+   for m in $(MAN1); do chmod 644 "${DESTDIR}${MANPREFIX}/man1/$$m"; done
+   mkdir -p "${DESTDIR}${MANPREFIX}/man5"
+   cp -f ${MAN5} "${DESTDIR}${MANPREFIX}/man5"
+   for m in $(MAN5); do chmod 644 "${DESTDIR}${MANPREFIX}/man5/$$m"; done
 
 uninstall:
-   @echo removing from ${DESTDIR}${PREFIX}/bin
-   @cd "${DESTDIR}${PREFIX}/bin" && rm -f 2ff ${BIN}
-   @echo removing manpages from ${DESTDIR}${MANPREFIX}
-   @cd "${DESTDIR}${MANPREFIX}/man1" && rm -f ${MAN1}
-   @cd "${DESTDIR}${MANPREFIX}/man5" && rm -f ${MAN5}
+   for f in $(BIN) $(SCRIPTS); 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