diff options
Diffstat (limited to '')
-rw-r--r-- | Makefile | 173 |
1 files changed, 156 insertions, 17 deletions
@@ -1,35 +1,174 @@ .POSIX: -PREFIX = /usr -NAME = tweetnacl -LIBDIR = $(PREFIX)/lib -INCLUDEDIR = $(PREFIX)/include -SRCDIR = $(PREFIX)/src/$(NAME) +DATE = 1970-01-01 +VERSION = 0.1.0 +NAME = agahu +NAME_UC = $(NAME) +LANGUAGES = en +## Installation prefix. Defaults to "/usr". +PREFIX = /usr +BINDIR = $(PREFIX)/bin +LIBDIR = $(PREFIX)/lib +INCLUDEDIR = $(PREFIX)/include +SRCDIR = $(PREFIX)/src/$(NAME) +SHAREDIR = $(PREFIX)/share +LOCALEDIR = $(SHAREDIR)/locale +MANDIR = $(SHAREDIR)/man +EXEC = ./ +## Where to store the installation. Empty by default. +DESTDIR = +LDLIBS = -all: lib$(NAME).a -lib$(NAME).a: lib$(NAME).a($(NAME).o) +.SUFFIXES: +.SUFFIXES: .in .c .o .a .bin .bin-check .msg .cat -$(NAME).o: $(NAME).h +.in: + sed \ + -e 's:@VERSION@:$(VERSION):g' \ + -e 's:@DATE@:$(DATE):g' \ + -e 's:@NAME@:$(NAME):g' \ + < $< > $@ + if [ -x $< ]; then chmod +x $@; fi +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< -check: +.a.bin: + $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) + + +all: +include deps.mk + + +catalogs.cat = $(catalogs.msg:.msg=.cat) + +sources.h = $(sources.c:.c=.h) +sources.o = $(sources.c:.c=.o) +tests.o = $(tests.c:.c=.o) +tests.a = $(tests.c:.c=.a) +tests.bin = $(tests.c:.c=.bin) + +objects = \ + $(sources.o) \ + $(tests.o) \ + src/main.o \ + +archives = \ + lib$(NAME).a \ + $(tests.a) \ + $(NAME).a \ + +sources = \ + $(sources.c) \ + $(sources.h) \ + src/meta.h.in \ + src/meta.h \ + src/main.c \ + src/$(NAME).h \ + $(catalogs.msg) \ + + +derived-assets = \ + $(objects) \ + $(archives) \ + src/meta.h \ + $(catalogs.cat) \ + $(tests.bin) \ + $(NAME).bin \ + src/random.o + +side-assets = \ + + + +## Default target. Builds all artifacts required for testing +## and installation. +all: $(derived-assets) + + +lib$(NAME).a: $(sources.o) src/random.o +$(NAME).a: $(sources.o) src/main.o src/random.o +src/meta.h $(objects): Makefile deps.mk +src/main.o: src/$(NAME).h + + +$(archives): + $(AR) $(ARFLAGS) $@ $? + +src/$(NAME).en.cat: tests/i18n.bin + env DUMP_TRANSLATABLE_STRINGS=1 $(EXEC)tests/i18n.bin | ifnew $*.msg + gencat $@ $*.msg + touch $@ + + + +tests.bin-check = $(tests.c:.c=.bin-check) +$(tests.bin-check): + $(EXEC)$*.bin + +check-unit: $(tests.bin-check) + + +integration-tests = \ + tests/cli-opts.sh \ + tests/assert-identical.sh \ + +$(integration-tests): ALWAYS + sh $@ $(EXEC)$(NAME).bin + +check-integration: $(integration-tests) + + +## Run all tests. Each test suite is isolated, so that a parallel +## build can run tests at the same time. The required artifacts +## are created if missing. +check: check-unit check-integration + + + +## Remove *all* derived artifacts produced during the build. +## A dedicated test asserts that this is always true. clean: - rm -f *.o *.a + rm -rf $(derived-assets) $(side-assets) +## Installs into $(DESTDIR)$(PREFIX). Its dependency target +## ensures that all installable artifacts are crafted beforehand. install: all mkdir -p \ + '$(DESTDIR)$(BINDIR)' \ '$(DESTDIR)$(LIBDIR)' \ + '$(DESTDIR)$(SRCDIR)' \ '$(DESTDIR)$(INCLUDEDIR)' \ - '$(DESTDIR)$(SRCDIR)' - cp lib$(NAME).a '$(DESTDIR)$(LIBDIR)' - cp $(NAME).h '$(DESTDIR)$(INCLUDEDIR)' - cp $(NAME).h $(NAME).c '$(DESTDIR)$(SRCDIR)' + cp $(NAME).bin '$(DESTDIR)$(BINDIR)'/$(NAME) + cp lib$(NAME).a '$(DESTDIR)$(LIBDIR)' + cp src/$(NAME).h '$(DESTDIR)$(INCLUDEDIR)' + cp $(sources) '$(DESTDIR)$(SRCDIR)' + for c in $(catalogs.cat); do \ + l="`echo "$$c" | cut -d. -f2`"; \ + dir='$(DESTDIR)$(LOCALEDIR)'/"$$l"/LC_MESSAGES; \ + mkdir -p "$$dir"; \ + cp "$$c" "$$dir"/$(NAME).cat; \ + done + +## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror +## of the "install" target, and removes *all* that was installed. +## A dedicated test asserts that this is always true. uninstall: rm -rf \ - '$(DESTDIR)$(LIBDIR)'/lib$(NAME).a \ - '$(DESTDIR)$(INCLUDEDIR)'/$(NAME).h \ - '$(DESTDIR)$(SRCDIR)' + '$(DESTDIR)$(BINDIR)'/$(NAME) \ + '$(DESTDIR)$(LIBDIR)'/lib$(NAME).a \ + '$(DESTDIR)$(INCLUDEDIR)'/$(NAME).h \ + '$(DESTDIR)$(SRCDIR)' \ + + for c in $(catalogs.cat); do \ + l="`echo "$$c" | cut -d. -f2`"; \ + rm -f '$(DESTDIR)$(LOCALEDIR)'/"$$l"/LC_MESSAGES/$(NAME).cat; \ + done + + +ALWAYS: |