aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile297
1 files changed, 63 insertions, 234 deletions
diff --git a/Makefile b/Makefile
index c92f925..8d611c5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,112 +1,9 @@
+.POSIX:
+
CONFIGFILE = config.mk
+include files.mk
include $(CONFIGFILE)
-
-BIN =\
- blind-affine-colour\
- blind-apply-kernel\
- blind-apply-palette\
- blind-arithm\
- blind-cat-cols\
- blind-cat-rows\
- blind-chroma-key\
- blind-colour-ciexyz\
- blind-colour-matrix\
- blind-colour-srgb\
- blind-compress\
- blind-concat\
- blind-cone-gradient\
- blind-convert\
- blind-coordinate-field\
- blind-crop\
- blind-cross-product\
- blind-cut\
- blind-decompress\
- blind-disperse\
- blind-dissolve\
- blind-dot-product\
- blind-double-sine-wave\
- blind-dual-key\
- blind-extend\
- blind-extract-alpha\
- blind-find-rectangle\
- blind-flip\
- blind-flop\
- blind-from-image\
- blind-from-named\
- blind-from-portable\
- blind-from-text\
- blind-from-video\
- blind-gauss-blur\
- blind-get-colours\
- blind-hexagon-tessellation\
- blind-interleave\
- blind-invert-luma\
- blind-invert-matrix\
- blind-kernel\
- blind-linear-gradient\
- blind-make-kernel\
- blind-matrix-orthoproject\
- blind-matrix-reflect\
- blind-matrix-rotate\
- blind-matrix-scale\
- blind-matrix-shear\
- blind-matrix-translate\
- blind-matrix-transpose\
- blind-mean\
- blind-mosaic\
- blind-mosaic-corners\
- blind-mosaic-edges\
- blind-multiply-matrices\
- blind-next-frame\
- blind-norm\
- blind-peek-head\
- blind-premultiply\
- blind-quaternion-product\
- blind-radial-gradient\
- blind-read-head\
- blind-rectangle-tessellation\
- blind-repeat\
- blind-repeat-tessellation\
- blind-reverse\
- blind-rewrite-head\
- blind-round-wave\
- blind-sawtooth-wave\
- blind-set-alpha\
- blind-set-luma\
- blind-set-saturation\
- blind-single-colour\
- blind-sinc-wave\
- blind-sine-wave\
- blind-skip-pattern\
- blind-spatial-arithm\
- blind-spatial-mean\
- blind-spectrum\
- blind-spiral-gradient\
- blind-split\
- blind-split-chans\
- blind-split-cols\
- blind-split-rows\
- blind-square-gradient\
- blind-stack\
- blind-tee\
- blind-temporal-arithm\
- blind-temporal-mean\
- blind-time-blur\
- blind-to-image\
- blind-to-named\
- blind-to-portable\
- blind-to-text\
- blind-to-video\
- blind-transition\
- blind-translate\
- blind-transpose\
- blind-triangle-tessellation\
- blind-triangular-wave\
- blind-unpremultiply\
- blind-vector-projection\
- blind-write-head
-
SH_SCRIPTS =\
blind-rotate-90\
blind-rotate-180\
@@ -120,150 +17,82 @@ COMMON_OBJ =\
stream.o
HDR =\
- src/arg.h\
- src/common.h\
- src/define-functions.h\
- src/stream.h\
- src/util.h\
- src/util/to.h\
- src/util/jobs.h\
- src/util/emalloc.h\
- src/util/eopen.h\
- src/util/endian.h\
- src/util/colour.h\
- src/util/io.h\
- src/util/efflush.h\
- src/util/efunc.h\
- src/util/eprintf.h\
- src/util/fshut.h\
- src/video-math.h
+ arg.h\
+ common.h\
+ define-functions.h\
+ stream.h\
+ util.h\
+ util/to.h\
+ util/jobs.h\
+ util/emalloc.h\
+ util/eopen.h\
+ util/endian.h\
+ util/colour.h\
+ util/io.h\
+ util/efflush.h\
+ util/efunc.h\
+ util/eprintf.h\
+ util/fshut.h\
+ video-math.h
MISCFILES =\
Makefile\
config.mk\
+ blind.mk\
+ rules.mk\
LICENSE\
README\
- TODO
-
-EXAMPLEDIRS =\
- inplace-flop\
- reverse\
- split
+ TODO\
+ src/generate-macros.c
EXAMPLEFILES =\
inplace-flop/Makefile\
reverse/Makefile\
split/Makefile
-COMMON_SRC = $(COMMON_OBJ:.o=.c)
-SRC = $(BIN:=.c) $(COMMON_SRC)
-SCRIPTS = $(SH_SCRIPTS) $(KSH_SCRIPTS)
-MAN1 = $(BIN:=.1) $(SCRIPTS:=.1)
-MAN7 = blind.7
-
-
-all: $(BIN)
-mcb: blind-mcb
-
-%: %.o $(COMMON_OBJ)
- $(CC) -o $@ $^ $(LDFLAGS)
-
-%.o: src/%.c $(HDR) platform.h
- $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
-
-%.bo: src/%.c $(HDR) platform.h
- $(CC) $(CFLAGS) $(CPPFLAGS) -Dmain="$$(printf 'main_%s\n' $* | tr -- - _)" -c -o $@ $<
-
-blind-mcb.c: Makefile
- printf '#include <%s.h>\n' stdio string > blind-mcb.c
- printf 'int main_%s(int argc, char *argv[]);\n' $(BIN) | tr -- - _ >> blind-mcb.c
- printf 'int main(int argc, char *argv[]) {\n' >> blind-mcb.c
- printf 'char *cmd = strrchr(*argv, '"'/'"');\n' >> blind-mcb.c
- printf 'cmd = cmd ? cmd + 1 : *argv;\n' >> blind-mcb.c
- for c in $(BIN); do \
- printf 'if (!strcmp(cmd, "%s"))\n\treturn main_%s(argc, argv);\n' "$$c" "$$c" | \
- sed '/^\t/s/-/_/g'; \
- done >> blind-mcb.c
- printf 'fprintf(stderr, "Invalid command: %%s\\n", cmd);\n' >> blind-mcb.c
- printf 'return 1;\n' >> blind-mcb.c
- printf '}\n' >> blind-mcb.c
-
-blind-mcb: blind-mcb.o $(BIN:=.bo) $(COMMON_OBJ)
- $(CC) -o $@ $^ $(LDFLAGS)
-
-generate-macros: src/generate-macros.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
-
-platform.h: generate-macros
- ./generate-macros > platform.h
-
-install: all
- mkdir -p -- "$(DESTDIR)$(PREFIX)/bin"
- cp -f -- $(BIN) $(SCRIPTS) "$(DESTDIR)$(PREFIX)/bin"
- cd "$(DESTDIR)$(PREFIX)/bin" && sed -i '1s:bash$$:$(KORN_SHELL):' $(KSH_SCRIPTS)
- cd -- "$(DESTDIR)$(PREFIX)/bin" && chmod 755 $(BIN) $(SCRIPTS)
- mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man1"
- set -e && for m in $(MAN1); do \
- sed '1s/ blind$$/ " blind $(VERSION)"/g' \
- < "man/$$m" > "$(DESTDIR)$(MANPREFIX)/man1/$$m"; \
- done
- cd -- "$(DESTDIR)$(MANPREFIX)/man1" && chmod 644 $(MAN1)
- mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man7"
- set -e && for m in $(MAN7); do \
- sed '1s/ blind$$/ " blind $(VERSION)"/g' \
- < "man/$$m" > "$(DESTDIR)$(MANPREFIX)/man7/$$m"; \
- done
- cd -- "$(DESTDIR)$(MANPREFIX)/man7" && chmod 644 $(MAN7)
+MAN7 =\
+ blind
-install-mcb: mcb
- mkdir -p -- "$(DESTDIR)$(PREFIX)/bin"
- for c in $(BIN); do \
- $(LN) -f -- blind-single-colour "$(DESTDIR)$(PREFIX)/bin/$$c"; done
- rm -f -- "$(DESTDIR)$(PREFIX)/bin/blind-single-colour"
- cp -f -- blind-mcb "$(DESTDIR)$(PREFIX)/bin/blind-single-colour"
- cp -f -- $(SCRIPTS) "$(DESTDIR)$(PREFIX)/bin"
- cd "$(DESTDIR)$(PREFIX)/bin" && sed -i '1s:bash$$:$(KORN_SHELL):' $(KSH_SCRIPTS)
- cd -- "$(DESTDIR)$(PREFIX)/bin" && chmod 755 -- blind-single-colour $(SCRIPTS)
- mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man1"
- set -e && for m in $(MAN1); do \
- sed '1s/ blind$$/ " blind $(VERSION)"/g' \
- < "man/$$m" > "$(DESTDIR)$(MANPREFIX)/man1/$$m"; \
- done
- cd -- "$(DESTDIR)$(MANPREFIX)/man1" && chmod 644 $(MAN1)
- mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man7"
- set -e && for m in $(MAN7); do \
- sed '1s/ blind$$/ " blind $(VERSION)"/g' \
- < "man/$$m" > "$(DESTDIR)$(MANPREFIX)/man7/$$m"; \
- done
- cd -- "$(DESTDIR)$(MANPREFIX)/man7" && chmod 644 $(MAN7)
+all: build/files.mk build/common-files.mk
+ @make -f blind.mk $@
-uninstall:
- cd -- "$(DESTDIR)$(PREFIX)/bin" && rm -f $(BIN) $(SCRIPTS)
- cd -- "$(DESTDIR)$(MANPREFIX)/man1" && rm -f $(MAN1)
- cd -- "$(DESTDIR)$(MANPREFIX)/man7" && rm -f $(MAN7)
+build/files.mk: files.mk
+ mkdir -p -- $(@D)
+ ( printf 'BIN =' && \
+ printf '\\\n\t%s' $(BIN) && \
+ printf '\n\nSRC =' && \
+ printf '\\\n\tsrc/%s' $(BIN:=.c) $(COMMON_OBJ:.o=.c) && \
+ printf '\n\nEXAMPLEDIRS =' && \
+ printf '\\\n\texamples/%s' $(EXAMPLEFILES) | sed 's|/[^/\\]*\(\\*\)$$|\1|' | uniq && \
+ printf '\n\nEXAMPLEFILES =' && \
+ printf '\\\n\texamples/%s' $(EXAMPLEFILES) && \
+ printf '\n\nMISCFILES =' && \
+ printf '\\\n\t%s' $(MISCFILES) && \
+ printf '\n\nSH_SCRIPTS =' && \
+ printf '\\\n\t%s' $(SH_SCRIPTS) && \
+ printf '\n\nKSH_SCRIPTS =' && \
+ printf '\\\n\t%s' $(KSH_SCRIPTS) && \
+ printf '\n\nMAN =' && \
+ printf '\\\n\tman1/%s.1' $(BIN) $(SH_SCRIPTS) $(KSH_SCRIPTS) && \
+ printf '\\\n\tman7/%s.7' $(MAN7) && \
+ printf '\n' \
+ ) > $@.$$$$ && mv $@.$$$$ $@
-dist:
- -rm -rf "blind-$(VERSION)"
- mkdir -p "blind-$(VERSION)/src/util" "blind-$(VERSION)/man"
- cp $(MISCFILES) $(SCRIPTS) "blind-$(VERSION)"
- cd man && cp $(MAN1) $(MAN7) "../blind-$(VERSION)/man"
- set -e && cd src && for s in $(SRC); do \
- cp "$$s" "../blind-$(VERSION)/src/$$s"; done
- set -e && for s in $(HDR); do \
- cp "$$s" "../blind-$(VERSION)/$$s"; done
- set -e && for e in $(EXAMPLEDIRS); do \
- mkdir -p "blind-$(VERSION)/examples/$$e"; done
- set -e && cd examples && for e in $(EXAMPLEFILES); \
- do cp "$$e" "../blind-$(VERSION)/examples/$$e"; done
- tar -cf "blind-$(VERSION).tar" "blind-$(VERSION)"
- gzip -9 "blind-$(VERSION).tar"
- rm -rf "blind-$(VERSION)"
+build/common-files.mk: Makefile
+ mkdir -p -- $(@D)
+ ( printf 'HDR =' && \
+ printf '\\\n\tsrc/%s' $(HDR) && \
+ printf '\n\nCOMMON_OBJ =' && \
+ printf '\\\n\t%s' $(COMMON_OBJ) && \
+ printf '\n' \
+ ) > $@.$$$$ && mv $@.$$$$ $@
clean:
- -rm -f -- $(BIN) *.o blind-$(VERSION).tar.gz platform.h generate-macros
- -rm -f -- blind-mcb.c blind-mcb *.bo
- -rm -rf -- "blind-$(VERSION)"
+ -rm -rf -- $(BIN) build *.o *.a *.bo blind-mcb
+ -rm -rf -- blind-$(VERSION).tar.gz "blind-$(VERSION)"
+.DEFAULT:
+ @make build/files.mk build/common-files.mk
+ @make -f blind.mk $@
-.PHONY: all mcb install install-mcb uninstall dist clean
-.PRECIOUS: $(COMMON_OBJ) platform.h
+.PHONY: all clean