From 31e4c2917b05f10b5f9bd5ce429dbf42a8346b6d Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 2 Jul 2023 22:09:07 +0200 Subject: Make makefile portable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- Makefile | 92 +++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 47 insertions(+), 45 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index cd71a99..93c0b1d 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,20 @@ -.NONPOSIX: +.POSIX: CONFIGFILE = config.mk include $(CONFIGFILE) LIBEXECDIR = $(PREFIX)/$(LIBEXEC) -BIN =\ + +BIN_GENERIC =\ keccaksum\ + sha3sum\ + +BIN_SPECIFIC =\ keccak-224sum\ keccak-256sum\ keccak-384sum\ keccak-512sum\ - sha3sum\ sha3-224sum\ sha3-256sum\ sha3-384sum\ @@ -23,48 +26,38 @@ BIN =\ shake256sum\ shake512sum +BIN = $(BIN_GENERIC) $(BIN_SPECIFIC) MAN1 = $(BIN:=.1) HDR = arg.h common.h -keccaksum = Keccak[] -keccak-224sum = Keccak-224 -keccak-256sum = Keccak-256 -keccak-384sum = Keccak-384 -keccak-512sum = Keccak-512 -sha3sum = SHA3 -sha3-224sum = SHA3-224 -sha3-256sum = SHA3-256 -sha3-384sum = SHA3-384 -sha3-512sum = SHA3-512 -rawshake128sum = RawSHAKE128 -rawshake256sum = RawSHAKE256 -rawshake512sum = RawSHAKE512 -shake128sum = SHAKE128 -shake256sum = SHAKE256 -shake512sum = SHAKE512 - all: $(BIN) $(MAN1) mcb: sha3sum-mcb $(MAN1) -sha3sum-mcb.c: commands.h +sha3sum-mcb.o: commands.h +$(BIN:=.o): $(HDR) +$(BIN:=.bo): $(HDR) +$(BIN): common.o -%: %.o common.o - $(CC) -o $@ $< common.o $(LDFLAGS) +.o: + $(CC) -o $@ $@.o common.o $(LDFLAGS) -%.o: %.c $(HDR) +.c.o: $(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS) -%.bo: %.c $(HDR) +.c.bo: $(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS) \ -Dmain="main_$$(printf '%s\n' $* | tr - _)(int, char *[]); int main_$$(printf '%s\n' $* | tr - _)" -%.1: xsum.man - u=$$(printf '%s\n' $* | tr a-z A-Z); \ - if test $* = sha3sum; then \ - sed -e 's/xsum/$*/g' -e 's/XSUM/'"$$u"'/g' -e 's/Xsum/$($*)/g' -e 's/^\\# ONLY SHA3: //' < xsum.man > $@; \ +$(MAN1): xsum.man algorithm-map + set -e; \ + f="$$(printf '%s\n' "$@" | sed 's/\.1$$//')"; \ + u="$$(printf '%s\n' "$$f" | tr a-z A-Z)"; \ + a="$$(sed -n 's/^'"$$f"'\s*=\s*//p' < algorithm-map | sed 's/\s*$$//')"; \ + if test "$$f" = sha3sum; then \ + sed -e "s/xsum/$$f/g" -e "s/XSUM/$$u/g" -e "s/Xsum/$$a/g" -e 's/^\\# ONLY SHA3: //' < xsum.man > $@; \ else \ - sed -e 's/xsum/$*/g' -e 's/XSUM/'"$$u"'/g' -e 's/Xsum/$($*)/g' -e '/^\\# ONLY SHA3: /d' < xsum.man > $@; \ + sed -e "s/xsum/$$f/g" -e "s/XSUM/$$u/g" -e "s/Xsum/$$a/g" -e '/^\\# ONLY SHA3: /d' < xsum.man > $@; \ fi commands.h: Makefile @@ -74,18 +67,6 @@ commands.h: Makefile sha3sum-mcb: sha3sum-mcb.o common.o $(BIN:=.bo) $(CC) -o $@ sha3sum-mcb.o common.o $(BIN:=.bo) $(LDFLAGS) -keccak-%sum.c: - printf '%s\n' '#include "common.h"' 'KECCAK_MAIN($*)' > $@ - -sha3-%sum.c: - printf '%s\n' '#include "common.h"' 'SHA3_MAIN($*)' > $@ - -rawshake%sum.c: - printf '%s\n' '#include "common.h"' 'RAWSHAKE_MAIN($*)' > $@ - -shake%sum.c: - printf '%s\n' '#include "common.h"' 'SHAKE_MAIN($*)' > $@ - check: $(BIN) ./test @@ -103,7 +84,7 @@ install-mcb: sha3sum-mcb $(MAN1) mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man1" mkdir -p -- "$(DESTDIR)$(PREFIX)/share/licenses/sha3sum" set -e && cd "$(DESTDIR)$(PREFIX)/bin/" && \ - for f in $(BIN); do ln -sf -- ../$(LIBEXEC)/sha3sum "$$f"; done + for f in $(BIN); do ln -sf -- ../$(LIBEXEC)/sha3sum "$$f" || exit 1; done cp -- sha3sum-mcb "$(DESTDIR)$(LIBEXECDIR)/sha3sum" cp -- $(MAN1) "$(DESTDIR)$(MANPREFIX)/man1/" cp -- LICENSE "$(DESTDIR)$(PREFIX)/share/licenses/sha3sum/" @@ -115,8 +96,29 @@ uninstall: -rm -f -- "$(DESTDIR)$(LIBEXECDIR)/sha3sum" clean: - -rm -rf -- $(MAN1) $(BIN) sha3sum-mcb *.o *.bo *.su commands.h keccak-*sum.c sha3-*sum.c rawshake*sum.c shake*sum.c .testdir + -rm -rf -- $(MAN1) $(BIN) sha3sum-mcb *.o *.bo *.su commands.h .testdir + -rm -rf -- keccak-*sum.c sha3-*sum.c rawshake*sum.c shake*sum.c + +$(BIN_SPECIFIC:=.c): + +@set -e; \ + f="$$(\ + set -e; \ + sed -n 's/^\([a-z0-9-]\+\)%\([^:]*\):.*$$/\1 \2/p' < unportable.mk | while read start end; do \ + end="$$(printf '%s\n' "$$end" | sed 's/\./\\\./g')"; \ + x="$$(printf '%s\n' '$@' | sed -n 's/^'"$$start"'\(.*\)'"$$end"'$$/\1/p')"; \ + if test -n "$$x"; then \ + printf '%s\n' "$$x"; \ + break; \ + fi; \ + done; \ + )"; \ + if test -z "$$f"; then \ + printf 'No rule to make target %s\n' "$@" >&2; \ + exit 1; \ + fi; \ + sed "/^[a-z]/s/%/$$f/g" < unportable.mk | sed 's/\$$\*/'"$$f/g" | $(MAKE) -f - "$@" .SUFFIXES: +.SUFFIXES: .c .o .bo -.PHONY: all check install uninstall clean +.PHONY: all mcb check install install-mcb uninstall clean -- cgit v1.2.3-70-g09d2