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