blind.mk - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
blind.mk (3551B)
---
1 .POSIX:
2
3 CONFIGFILE = config.mk
4
5 SCRIPTS = $(SH_SCRIPTS) $(KSH_SCRIPTS)
6 MAN1 = $(BIN:=.1) $(SCRIPTS:=.1)
7 MAN7 = blind.7
8 BOBJ = $(BIN:=.bo)
9 OBJ = $(BIN:=.o) $(COMMON_OBJ)
10
11 DIST_MAN = $(MAN1) $(MAN7)
12 DIST_MISC = $(HDR) $(SRC) $(SCRIPTS) $(MISCFILES) $(EXAMPLEFILES)
13
14 DEPS = build/common-files.mk blind.mk $(CONFIGFILE)
15 MCB_DEPS = build/files.mk $(DEPS)
16
17 include $(CONFIGFILE)
18 include build/files.mk
19 include build/common-files.mk
20
21 all: $(BIN)
22 mcb: blind-mcb
23
24 $(BIN): $(@:=.o) $(COMMON_OBJ) $(DEPS)
25 .o:
26 $(CC) -o $@ $< $(COMMON_OBJ) $(LDFLAGS)
27
28 $(OBJ): src/$(@:.o=:c) $(HDR) build/platform.h $(DEPS)
29 $(OBJ):
30 $(CC) $(CFLAGS) -c -o $$$$.$@ src/$*.c && mv $$$$.$@ $@
31
32 build/blind-mcb.o: $(MCB_DEPS)
33 .c.o:
34 $(CC) $(CFLAGS) -c -o $@ $<
35
36 $(BOBJ): src/$(@:.bo=:c) $(HDR) build/platform.h $(DEPS)
37 $(BOBJ):
38 $(CC) $(CFLAGS) -Dmain="$$(printf 'main_%s\n' $* | tr -- - _)" -c -o $@ src/$*.c
39
40 build/blind-mcb.c: $(MCB_DEPS)
41 mkdir -p $(@D)
42 printf '#include <%s.h>\n' stdio string > $@
43 printf 'int main_%s(int argc, char *argv[]);\n' $(BIN) | tr -- - _ >> $@
44 printf 'int main(int argc, char *argv[]) {\n' >> $@
45 printf 'char *cmd = strrchr(*argv, '"'/'"');\n' >> $@
46 printf 'cmd = cmd ? &cmd[1] : *argv;\n' >> $@
47 set -e && for c in $(BIN); do \
48 printf 'if (!strcmp(cmd, "%s"))\n\treturn main_%s(argc, argv);\n' "$$c" "$$c" | \
49 sed '/^\t/s/-/_/g'; \
50 done >> $@
51 printf 'fprintf(stderr, "Invalid command: %%s\\n", cmd);\n' >> $@
52 printf 'return 1;\n' >> $@
53 printf '}\n' >> $@
54
55 blind-mcb: build/blind-mcb.o $(BOBJ) $(COMMON_OBJ) $(MCB_DEPS)
56 $(CC) -o $@ build/blind-mcb.o $(BOBJ) $(COMMON_OBJ) $(LDFLAGS)
57
58 build/generate-macros: src/generate-macros.c $(DEPS)
59 @mkdir -p -- $(@D)
60 $(CC) $(CFLAGS) -o $@.$$$$ src/generate-macros.c $(LDFLAGS) && mv $@.$$$$ $@
61
62 src/../build/platform.h: build/platform.h
63 build/platform.h: build/generate-macros $(DEPS)
64 @mkdir -p -- $(@D)
65 build/generate-macros > $@.$$$$ && mv $@.$$$$ $@
66
67 install: all install-common
68 cp -f -- $(BIN) "$(DESTDIR)$(PREFIX)/bin"
69 cd -- "$(DESTDIR)$(PREFIX)/bin" && chmod 755 $(BIN)
70
71 install-mcb: mcb install-common
72 for c in $(BIN); do \
73 $(LN) -f -- blind-single-colour "$(DESTDIR)$(PREFIX)/bin/$$c"; done
74 rm -f -- "$(DESTDIR)$(PREFIX)/bin/blind-single-colour"
75 cp -f -- blind-mcb "$(DESTDIR)$(PREFIX)/bin/blind-single-colour"
76 cd -- "$(DESTDIR)$(PREFIX)/bin" && chmod 755 -- blind-single-colour
77
78 install-common:
79 mkdir -p -- "$(DESTDIR)$(PREFIX)/bin"
80 mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man1"
81 mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man7"
82 cp -f -- $(SCRIPTS) "$(DESTDIR)$(PREFIX)/bin"
83 cd -- "$(DESTDIR)$(PREFIX)/bin" && sed -i '1s:bash$$:$(KORN_SHELL):' $(KSH_SCRIPTS)
84 cd -- "$(DESTDIR)$(PREFIX)/bin" && chmod 755 -- $(SCRIPTS)
85 set -e && for m in $(MAN); do \
86 sed '1s/ blind$$/ " blind $(VERSION)"/g' \
87 < "man/$$(basename $$m)" > "$(DESTDIR)$(MANPREFIX)/$$m"; \
88 done
89 cd -- "$(DESTDIR)$(MANPREFIX)" && chmod 644 $(MAN)
90
91 uninstall:
92 cd -- "$(DESTDIR)$(PREFIX)/bin" && rm -f $(BIN) $(SCRIPTS)
93 cd -- "$(DESTDIR)$(MANPREFIX)" && rm -f $(MAN)
94
95 dist:
96 -rm -rf "blind-$(VERSION)"
97 mkdir -p "blind-$(VERSION)"
98 cd "blind-$(VERSION)" && mkdir -p src/util man $(EXAMPLEDIRS)
99 cd man && cp $(DIST_MAN) "../blind-$(VERSION)/man"
100 set -e && for s in $(DIST_MISC); do cp "$$s" "../blind-$(VERSION)/$$s"; done
101 tar -cf "blind-$(VERSION).tar" "blind-$(VERSION)"
102 gzip -9 "blind-$(VERSION).tar"
103 rm -rf "blind-$(VERSION)"
104
105 .SUFFIXES:
106 .SUFFIXES: .o .bo .c
107
108 .PHONY: all mcb install install-mcb install-common uninstall dist
109 .PRECIOUS: $(COMMON_OBJ) build/platform.h