summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2022-01-28 07:33:30 -0300
committerEuAndreh <eu@euandre.org>2024-01-01 12:35:01 -0300
commit9f554a72b01705ebf6be66143c5e69b09b3c1372 (patch)
treefadf04038b2d5df32fd4b5bc93ba291269c322a0 /Makefile
downloadpindaiba-9f554a72b01705ebf6be66143c5e69b09b3c1372.tar.gz
pindaiba-9f554a72b01705ebf6be66143c5e69b09b3c1372.tar.xz
Init project: copy files and skeletons from others
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile199
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: