From 0fc3c7e48d0a2ab470ead2b2ad647daca03c662f Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Thu, 27 Jun 2024 17:01:07 +0200 Subject: [PATCH] makefiles --- Makefile | 73 +++++++++++++--------- man.d | 9 ++- src/cutils | 2 +- src/{tests => tests-cutils}/Makefile | 8 +-- src/{tests => tests-cutils}/cstring-test.c | 0 src/{tests => tests-cutils}/makefile.d | 41 +++++++----- src/{tests => tests-cutils}/tests.c | 0 src/{tests => tests-cutils}/tests.h | 0 8 files changed, 79 insertions(+), 54 deletions(-) rename src/{tests => tests-cutils}/Makefile (50%) rename src/{tests => tests-cutils}/cstring-test.c (100%) rename src/{tests => tests-cutils}/makefile.d (62%) rename src/{tests => tests-cutils}/tests.c (100%) rename src/{tests => tests-cutils}/tests.h (100%) diff --git a/Makefile b/Makefile index 802ebaf..5178ab8 100644 --- a/Makefile +++ b/Makefile @@ -1,79 +1,92 @@ NAME = cutils +NAMES = $(NAME) +TEST = tests-cutils +TESTS = $(TEST) + +PREFIX = /usr/local + dstdir = bin -.PHONY: all run clean mrpropre mrpropre love debug doc man \ +.PHONY: all build run clean mrpropre mrpropre love debug doc man \ test run-test run-test-more \ - mess-run mess-clean mess-propre mess-doc mess-man \ + mess-build mess-run mess-clean mess-propre mess-doc mess-man \ mess-test mess-run-test mess-run-test-more \ - $(NAME) utils net check \ - MK MKTEST MKMAN + $(NAMES) -all: $(NAME) +all: build -# Sub makes: -M_OPTS=$(MAKECMDGOALS) --no-print-directory PREFIX=$(PREFIX) -MK: - @$(MAKE) -C src/$(NAME) $(M_OPTS) DEBUG=$(DEBUG) -MKTEST: - @$(MAKE) -C src/tests $(M_OPTS) DEBUG=$(DEBUG) -MKMAN: - @$(MAKE) -f man.d $(M_OPTS) NAME=$(NAME) +build: mess-build $(NAMES) + +test: mess-test $(TESTS) # Main buildables -$(NAME): utils net check -utils: MK -net: MK -check: MK +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 @echo Nothing to run, this is a library -# Test + run test -test: mess-test MKTEST -run-test: mess-run-test MKTEST -run-test-more: mess-run-test-more 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) $(M_OPTS) DEBUG=1 # Clean -clean: mess-clean MK MKTEST +clean: mess-clean $(NAMES) $(TESTS) mrproper: mrpropre -mrpropre: mess-propre MK MKTEST 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 ">>>>>>>>>> Building $(NAMES)..." 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 ">>>>>>>>>> Building tests for $(NAME)..." + @echo + @echo ">>>>>>>>>> Building all tests: $(TESTS)..." mess-run-test: - @echo ">>>>>>>>>> Running tests on $(NAME)..." + @echo + @echo ">>>>>>>>>> Running tests: $(TEST)..." mess-run-test-more: - @echo ">>>>>>>>>> Running more tests on $(NAME)..." + @echo + @echo ">>>>>>>>>> Running more tests: $(TEST)..." 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 9712139..ab527b4 100644 --- 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 diff --git a/src/cutils b/src/cutils index 493c8a6..1c3044c 160000 --- a/src/cutils +++ b/src/cutils @@ -1 +1 @@ -Subproject commit 493c8a6cd70e7e4b520d15edcf9922576506ca59 +Subproject commit 1c3044c56cb58890730407ba39675fcf9342d8d1 diff --git a/src/tests/Makefile b/src/tests-cutils/Makefile similarity index 50% rename from src/tests/Makefile rename to src/tests-cutils/Makefile index dd68271..46c73e5 100644 --- a/src/tests/Makefile +++ b/src/tests-cutils/Makefile @@ -1,10 +1,10 @@ # Simply pass everything to makefile.d, but calling from "../" -.PHONY: MK all install uninstall clean mrpropre mrpropre \ - run test run-test run-test-more +.PHONY: all build install uninstall clean mrpropre mrpropre \ + run test run-test run-test-more default \ + tests-cutils -$(MAKECMDGOALS): MK -MK: +default $(MAKECMDGOALS): @$(MAKE) --no-print-directory -C ../ -f $(CURDIR)/makefile.d \ $(MAKECMDGOALS) diff --git a/src/tests/cstring-test.c b/src/tests-cutils/cstring-test.c similarity index 100% rename from src/tests/cstring-test.c rename to src/tests-cutils/cstring-test.c diff --git a/src/tests/makefile.d b/src/tests-cutils/makefile.d similarity index 62% rename from src/tests/makefile.d rename to src/tests-cutils/makefile.d index 5116e76..7bdfac3 100644 --- a/src/tests/makefile.d +++ b/src/tests-cutils/makefile.d @@ -1,58 +1,65 @@ # Note: 99+ required for for-loop initial declaration (CentOS 6) -srcdir = tests +NAME = tests-cutils +srcdir = $(NAME) dstdir = ../bin CFLAGS += -Wall -pedantic -I./ -std=c99 CXXFLAGS += -Wall -pedantic -I./ LDFLAGS += -lcheck +PREFIX = /usr/local ifdef DEBUG CFLAGS += -ggdb -O0 CXXFLAGS += -ggdb -O0 endif -.PHONY: all install uninstall clean mrpropre mrpropre \ - test run run-test run-test-more +.PHONY: all build install uninstall clean mrpropre mrpropre \ + $(NAME) test run run-test run-test-more SOURCES=$(wildcard $(srcdir)/*.c) HEADERS=$(wildcard $(srcdir)/*.h) OBJECTS=$(SOURCES:%.c=%.o) +# Main target + +all: build + +build: $(NAME) + +$(NAME): $(dstdir)/$(NAME) + ################ # Dependencies # ################ OBJECTS+=$(dstdir)/libcutils.o OBJECTS+=$(dstdir)/libcutils-check.o $(dstdir)/libcutils.o: - $(MAKE) --no-print-directory -C cutils/ utils + $(MAKE) --no-print-directory -C cutils/ cutils $(dstdir)/libcutils-check.o: $(MAKE) --no-print-directory -C cutils/ check ################ -all: test - -test: $(dstdir)/tests +$(dstdir)/$(NAME): $(OBJECTS) + mkdir -p $(dstdir) + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@ +# Test program, so running = running tests run: run-test +test: build + run-test: test @echo - @$(dstdir)/tests - + @$(dstdir)/$(NAME) run-test-more: test @echo - @$(dstdir)/tests --more - - -$(dstdir)/tests: $(OBJECTS) - mkdir -p $(dstdir) - $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@ + @$(dstdir)/($NAME) --more clean: - rm -f $(srcdir)/*.o + rm -f $(srcdir)/*.o $(srcdir)/*/*.o mrproper: mrpropre mrpropre: clean - rm -f $(dstdir)/tests + rm -f $(dstdir)/$(NAME) rmdir $(dstdir) 2>/dev/null || true diff --git a/src/tests/tests.c b/src/tests-cutils/tests.c similarity index 100% rename from src/tests/tests.c rename to src/tests-cutils/tests.c diff --git a/src/tests/tests.h b/src/tests-cutils/tests.h similarity index 100% rename from src/tests/tests.h rename to src/tests-cutils/tests.h -- 2.27.0