diff options
| author | EuAndreh <eu@euandre.org> | 2022-01-28 07:33:30 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2024-01-01 12:35:01 -0300 |
| commit | 9f554a72b01705ebf6be66143c5e69b09b3c1372 (patch) | |
| tree | fadf04038b2d5df32fd4b5bc93ba291269c322a0 /Makefile | |
| download | pindaiba-9f554a72b01705ebf6be66143c5e69b09b3c1372.tar.gz pindaiba-9f554a72b01705ebf6be66143c5e69b09b3c1372.tar.xz | |
Init project: copy files and skeletons from others
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..26919ba --- /dev/null +++ b/Makefile @@ -0,0 +1,199 @@ +.POSIX: +DATE = 1970-01-01 +VERSION = 0.1.0 +NAME = pindaiba +NAME_UC = PindaĆba +MAILING_LIST = public-inbox +TRANSLATIONS = +## 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 +CFLAGS.a = $(CFLAGS) +CFLAGS.so = $(CFLAGS) -fPIC +LDFLAGS.a = $(LDFLAGS) +LDFLAGS.so = $(LDFLAGS) --shared +LDLIBS.a = $(LDLIBS) +LDLIBS.so = $(LDLIBS) +EXT.so = .so +ILIBS = lib$(NAME).a lib$(NAME)$(EXT.so) # no ABI stability whatsoever +EXEC = ./ +## Where to store the installation. Empty by default. +DESTDIR = +LDLIBS = + + + +.SUFFIXES: +.SUFFIXES: .in .c .o .lo .to .xa .bin .msg .cat + +.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.a) -o $@ -c $< + +.c.lo: + $(CC) $(CFLAGS.so) -o $@ -c $< + +.c.to: + $(CC) $(CFLAGS.a) -DTEST -o $@ -c $< + +.xa.bin: + $(CC) $(LDFLAGS.a) -o $@ $< $(LDLIBS.a) + + + +all: +include deps.mk + +manpages.in = $(manpages.en.in) +manpages = $(manpages.in:.in=) + +catalogs.en.msg = src/$(NAME).en.msg +catalogs.msg = $(catalogs.en.msg) +catalogs.cat = $(catalogs.msg:.msg=.cat) + +sources.o = $(sources.c:.c=.o) +sources.lo = $(sources.c:.c=.lo) +sources.to = $(sources.c:.c=.to) +sources.xa = $(sources.c:.c=.xa) +sources.bin = $(sources.c:.c=.bin) + +sources = \ + $(sources.c) \ + $(sources.c:.c=.h) \ + src/config.h.in \ + src/config.h \ + src/main.c \ + src/$(NAME).h \ + $(catalogs.msg) \ + + +derived-assets = \ + $(ILIBS) \ + src/config.h \ + $(manpages) \ + $(catalogs.cat) \ + $(sources.o) \ + $(sources.lo) \ + $(sources.to) \ + $(sources.xa) \ + $(sources.bin) \ + tests/slurp.o \ + src/main.o \ + src/main.xa \ + src/main.bin \ + +side-assets = \ + src/logerr.c.txt \ + src/catalog.c.txt \ + + + +## Default target. Builds all artifacts required for testing +## and installation. +all: $(derived-assets) + + +lib$(NAME).a: $(sources.o) +src/main.xa: $(sources.o) src/main.o +$(manpages) src/config.h: Makefile deps.mk +$(sources.o) $(sources.lo) $(sources.to): src/config.h Makefile deps.mk +tests/slurp.o: src/config.h Makefile deps.mk + + +lib$(NAME)$(EXT.so): $(sources.lo) + $(CC) $(LDFLAGS.so) -o $@ $(sources.lo) $(LDLIBS.so) + +lib$(NAME).a $(sources.xa) src/main.xa: + $(AR) $(ARFLAGS) $@ $? + +src/$(NAME).en.cat: src/i18n.bin + env DUMP_TRANSLATABLE_STRINGS=1 $(EXEC)src/i18n.bin > $*.msg.new + cmp -s $*.msg.new $*.msg || mv $*.msg.new $*.msg + rm -f $*.msg.new + gencat $@ $*.msg + touch $@ + + + +src/catalog.bin-check: src/$(NAME).en.cat + + +.SUFFIXES: .bin-check +sources.bin-check = $(sources.c:.c=.bin-check) +$(sources.bin-check): + $(EXEC)$*.bin + +check-unit: $(sources.bin-check) + + +## 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 + + +## Remove *all* derived artifacts produced during the build. +## A dedicated test asserts that this is always true. +clean: + 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)$(INCLUDEDIR)' + cp src/main.bin '$(DESTDIR)$(BINDIR)'/$(NAME) + cp $(ILIBS) '$(DESTDIR)$(LIBDIR)' + cp src/$(NAME).h '$(DESTDIR)$(INCLUDEDIR)' + for f in $(sources); do \ + dir='$(DESTDIR)$(SRCDIR)'/"`dirname "$${f#src/}"`"; \ + mkdir -p "$$dir"; \ + cp -P "$$f" "$$dir"; \ + done + for l in en $(TRANSLATIONS); do \ + dir='$(DESTDIR)$(LOCALEDIR)'/"$$l"/LC_MESSAGES; \ + mkdir -p "$$dir"; \ + cp src/$(NAME)."$$l".cat "$$dir"/$(NAME).cat; \ + done + sh tools/manpages.sh -ip '$(DESTDIR)$(MANDIR)' $(manpages) + +## 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)$(BINDIR)'/$(NAME) \ + '$(DESTDIR)$(INCLUDEDIR)'/$(NAME).h \ + '$(DESTDIR)$(SRCDIR)' + for lib in $(ILIBS); do \ + rm -f '$(DESTDIR)$(LIBDIR)'/"$$lib"; \ + done + for l in en $(TRANSLATIONS); do \ + rm -f '$(DESTDIR)$(LOCALEDIR)'/"$$l"/LC_MESSAGES/$(NAME).cat; \ + done + sh tools/manpages.sh -up '$(DESTDIR)$(MANDIR)' $(manpages) + + +MAKEFILE = Makefile +## Show this help. +help: + cat $(MAKEFILE) | sh tools/makehelp.sh + + +ALWAYS: |
