makefiles
authorNiki Roo <niki@nikiroo.be>
Thu, 27 Jun 2024 15:17:29 +0000 (17:17 +0200)
committerNiki Roo <niki@nikiroo.be>
Thu, 27 Jun 2024 15:17:29 +0000 (17:17 +0200)
Makefile
man.d
src/cbook/makefile.d
src/cutils

index 2a0779a63bab9fb57de659eeeb99c30414d90db3..eaf5f24b16bb5759a753427ba039a6d9af453f80 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,88 +1,93 @@
 NAME   = cbook
+NAMES  = $(NAME) cutils
+TEST   =
+TESTS  =
+
+PREFIX = /usr/local
+
 dstdir = bin
 
+
 .PHONY: all run clean mrpropre mrpropre love debug doc man \
        test tests run-test run-tests run-test-more run-tests-more \
        mess-build mess-run mess-clean mess-propre mess-doc mess-man \
        mess-test mess-run-test mess-run-test-more \
-       $(NAME) utils \
-       MK MKTEST MKMAN
+       $(NAMES) $(TESTS)
 
-all: mess-build $(NAME)
+all: build
 
-# Sub makes:
-MK:
-       @$(MAKE) -C src/$(NAME) $(MAKECMDGOALS) DEBUG=$(DEBUG)
-MKTEST:
-       @$(MAKE) -C src/tests   $(MAKECMDGOALS) DEBUG=$(DEBUG)
-MKUTILS:
-       @$(MAKE) -C src/cutils  $(MAKECMDGOALS) DEBUG=$(DEBUG)
-MKMAN:
-       @$(MAKE) -f man.d       $(MAKECMDGOALS) NAME=$(NAME) PREFIX=$(PREFIX)
+build: mess-build $(NAMES)
+
+test: mess-test $(TESTS)
 
 # Main buildables
-$(NAME): utils MK
-utils: 
-       @$(MAKE) -C src/cutils       DEBUG=$(DEBUG)
-check:
-       @$(MAKE) -C src/cutils check DEBUG=$(DEBUG)
+M_OPTS=$(MAKECMDGOALS) --no-print-directory PREFIX=$(PREFIX) DEBUG=$(DEBUG)
+$(NAMES) $(TESTS):
+       $(MAKE) -C src/$@ $(M_OPTS)
+
+# Manual
+man: mess-man
+       @$(MAKE) -f man.d $(M_OPTS) NAME=$(NAME)
 
 # Run
 run: mess-run
        $(dstdir)/$(NAME)
 
-# Test + run test
-tests: test
-test: mess-test utils check MKTEST
-run-tests: run-test
-run-test: mess-run-test utils check MKTEST
-run-tests-more: run-test-more
-run-test-more: mess-run-test-more utils check MKTEST
+# Run main test
+run-test: mess-run-test $(TEST)
+run-test-more: mess-run-test-more $(TEST)
 
 # Doc/man/misc
 doc: mess-doc
        doxygen
-man: mess-man MKMAN
 love:
        @echo " ...not war."
 debug:
        $(MAKE) DEBUG=1
 
 # Clean
-clean: mess-clean MK MKTEST MKUTILS
+clean: mess-clean $(NAMES) $(TESTS)
 mrproper: mrpropre
-mrpropre: mess-propre MK MKTEST MKUTILS MKMAN
+mrpropre: mess-propre $(NAMES) $(TESTS) man
        rm -rf doc/html doc/latex doc/man
        rmdir doc 2>/dev/null || true
 
 # Install/uninstall
-install: mess-install MK MKMAN
-uninstall: mess-uninstall MK MKMAN
+install: mess-install $(NAME) man
+uninstall: mess-uninstall $(NAME) man
 
 # Messages
 mess-build:
+       @echo
        @echo ">>>>>>>>>> Running $(NAME)..."
 mess-run:
-       @echo ">>>>>>>>>> Running $(NAME)..."
        @echo
+       @echo ">>>>>>>>>> Running $(NAME)..."
 mess-clean:
+       @echo
        @echo ">>>>>>>>>> Cleaning $(NAME)..."
 mess-propre:
+       @echo
        @echo ">>>>>>>>>> Calling Mr Propre..."
 mess-doc:
+       @echo
        @echo ">>>>>>>>>> Generating documentation for $(NAME)..."
 mess-man:
+       @echo
        @echo ">>>>>>>>>> Generating the manual of $(NAME)..."
 mess-test:
+       @echo
        @echo ">>>>>>>>>> Building tests for $(NAME)..."
 mess-run-test:
-       @echo ">>>>>>>>>> Running tests on $(NAME)..."
        @echo
+       @echo ">>>>>>>>>> Running tests on $(NAME)..."
 mess-run-test-more:
-       @echo ">>>>>>>>>> Running more tests on $(NAME)..."
        @echo
+       @echo ">>>>>>>>>> Running more tests on $(NAME)..."
 mess-install:
+       @echo
        @echo ">>>>>>>>>> Installing $(NAME) into $(PREFIX)..."
 mess-uninstall:
+       @echo
        @echo ">>>>>>>>>> Uninstalling $(NAME) from $(PREFIX)..."
 
diff --git a/man.d b/man.d
index 97121397580490bbb8109f7051e93d0c93592cf7..ab527b4b20e595912c4eb8090a7812b1246a8730 100644 (file)
--- a/man.d
+++ b/man.d
@@ -47,8 +47,10 @@ mrpropre:
 
 install:
        @if [ -e "man/man1/$(NAME).1" ]; then \
-               echo cp -r man/ "$(PREFIX)"/share/; \
-               cp -r man/ "$(PREFIX)"/share/; \
+               echo mkdir -p "$(PREFIX)"/share/man; \
+               mkdir -p "$(PREFIX)"/share/man; \
+               echo cp -r man "$(PREFIX)"/share/; \
+               cp -r man "$(PREFIX)"/share/; \
        else \
                echo "No manual has been built (see \`make man')"; \
        fi
@@ -59,6 +61,9 @@ uninstall:
                        echo rm "$(PREFIX)/share/$$page";\
                        rm "$(PREFIX)/share/$$page";\
                done; \
+               echo rmdir "$(PREFIX)/share/man" 2>/dev/null \|\| true; \
+               rmdir "$(PREFIX)/share/man" 2>/dev/null || true; \
+               rmdir "$(PREFIX)/share"     2>/dev/null || true; \
        else \
                echo "No manual has been built (see \`make man')"; \
        fi
index c7531c5ab270ef23f52dcfbb17051970f0114c6a..4747a79e629de1bef3df3f643461e1b761c8d564 100644 (file)
@@ -1,28 +1,44 @@
 # Note: 99+ required for for-loop initial declaration (CentOS 6)
 
-srcdir = cbook
+NAME   = cbook
+NAMES  = $(NAME)
+srcdir = $(NAME)
 dstdir = ../bin
 
 CFLAGS   += -Wall -pedantic -I./ -std=c99
 CXXFLAGS += -Wall -pedantic -I./
-LDFLAGS  += $(dstdir)/libcutils.o
+# LDFLAGS  += -lcheck
+PREFIX   =  /usr/local
 
 ifdef DEBUG
 CFLAGS   += -ggdb -O0
 CXXFLAGS += -ggdb -O0
 endif
 
-.PHONY: all build install uninstall clean mrpropre mrpropre
-
-all: build
-
-build: $(dstdir)/cbook
+.PHONY: all build install uninstall clean mrpropre mrpropre \
+       $(NAMES)
 
 SOURCES=$(wildcard $(srcdir)/*.c)
 HEADERS=$(wildcard $(srcdir)/*.h)
 OBJECTS=$(SOURCES:%.c=%.o)
 
-$(dstdir)/cbook: $(OBJECTS) $(dstdir)/libcutils.o
+# Main targets
+
+all: build
+
+build: $(NAMES)
+
+cbook: $(dstdir)/cbook
+
+################
+# Dependencies #
+################
+OBJECTS+=$(dstdir)/libcutils.o
+$(dstdir)/libcutils.o:
+       $(MAKE) --no-print-directory -C cutils/ cutils
+################
+
+$(dstdir)/cbook: $(OBJECTS)
        mkdir -p $(dstdir)
        $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
 
index 493c8a6cd70e7e4b520d15edcf9922576506ca59..1c3044c56cb58890730407ba39675fcf9342d8d1 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 493c8a6cd70e7e4b520d15edcf9922576506ca59
+Subproject commit 1c3044c56cb58890730407ba39675fcf9342d8d1