Add multi-call binary installation - 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
       ---
 (DIR) commit d0c94265c042fe419926ee3e42fe4821c5e464cb
 (DIR) parent 6cde3f62419e656ae874a2d2b43c0a91da8a43e8
 (HTM) Author: Mattias Andrée <maandree@kth.se>
       Date:   Sat, 15 Jul 2017 21:56:07 +0200
       
       Add multi-call binary installation
       
       Signed-off-by: Mattias Andrée <maandree@kth.se>
       
       Diffstat:
         M Makefile                            |      44 ++++++++++++++++++++++++++++++-
         M config.mk                           |       3 +++
       
       2 files changed, 46 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -151,6 +151,7 @@ MAN7 = blind.7
        
        
        all: $(BIN)
       +mcb: blind-mcb
        
        %: %.o $(COMMON_OBJ)
                $(CC) -o $@ $^ $(LDFLAGS)
       @@ -158,6 +159,26 @@ all: $(BIN)
        %.o: src/%.c src/*.h src/*/*.h platform.h
                $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
        
       +%.mcb.o: src/%.c src/*.h src/*/*.h 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:=.mcb.o) $(COMMON_OBJ)
       +        $(CC) -o $@ $^ $(LDFLAGS)
       +
        generate-macros: src/generate-macros.c
                $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
        
       @@ -181,6 +202,26 @@ install: all
                done
                cd -- "$(DESTDIR)$(MANPREFIX)/man7" && chmod 644 $(MAN7)
        
       +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"
       +        chmod 755 -- "$(DESTDIR)$(PREFIX)/bin/blind-single-colour"
       +        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)
       +
        uninstall:
                cd -- "$(DESTDIR)$(PREFIX)/bin" && rm -f $(BIN)
                cd -- "$(DESTDIR)$(MANPREFIX)/man1" && rm -f $(MAN1)
       @@ -203,8 +244,9 @@ dist:
        
        clean:
                -rm -f $(BIN) *.o blind-$(VERSION).tar.gz platform.h generate-macros
       +        -rm -f blind-mcb.c blind-mcb.o blind-mcb
                -rm -rf "blind-$(VERSION)"
        
        
       -.PHONY: all install uninstall dist clean
       +.PHONY: all mcb install install-mcb uninstall dist clean
        .PRECIOUS: $(COMMON_OBJ) platform.h
 (DIR) diff --git a/config.mk b/config.mk
       @@ -5,6 +5,9 @@ VERSION = 1.1
        PREFIX = /usr/local
        MANPREFIX = $(PREFIX)/share/man
        
       +# Commands
       +LN = ln -s
       +
        # You may want to remove -DHAVE_PRCTL, -DHAVE_EPOLL, and
        # -DHAVE_SENDFILE from CPPFLAGS if you are not using Linux.
        CFLAGS   = -std=c11 -Wall -pedantic -O2