From 2947e7ea3d36cb92a9fd8580d19d6d2e14f67058 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Wed, 16 Oct 2024 17:47:19 +0100 Subject: [PATCH] Makefile: database.h removal by toplevel Makefile --- Makefile | 5 +++-- database/Makefile | 14 +++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 81fce96b..0c9ca509 100644 --- a/Makefile +++ b/Makefile @@ -47,9 +47,9 @@ mains: database/database.h modules libs for dir in ${PROGRAMS}; do \ (cd $$dir && ${MAKE} main) || exit 1; done -database/database.h: database/database.h.in +database/database.h: ${MAGICDIR}/database/database.h.in @echo --- making header file database/database.h - ${SCRIPTS}/makedbh database/database.h.in database/database.h + ${SCRIPTS}/makedbh ${MAGICDIR}/database/database.h.in database/database.h modules: database/database.h depend @echo --- making modules @@ -124,6 +124,7 @@ distclean: ${RM} defs.mak old.defs.mak ${MAGICDIR}/scripts/defs.mak ${RM} ${MAGICDIR}/scripts/default.conf ${RM} ${MAGICDIR}/scripts/config.log ${MAGICDIR}/scripts/config.status + ${RM} database/database.h ${RM} scripts/magic.spec magic-${VERSION} magic-${VERSION}.tgz ${RM} *.log diff --git a/database/Makefile b/database/Makefile index 8bc0f864..a8fb133f 100644 --- a/database/Makefile +++ b/database/Makefile @@ -15,6 +15,18 @@ SRCS = DBbound.c DBcell.c DBcellbox.c DBcellcopy.c \ include ${MAGICDIR}/defs.mak LIB_OBJS += ${MAGICDIR}/tiles/libtiles.o ${MAGICDIR}/utils/libutils.o -CLEANS += database.h +# database.h is managed by the toplevel Makefile, because it has a build dependency +# order affecting multiple modules that need it. Both the creation time and the +# removal time (during 'clean') are managed by toplevel Makefile. +# if it was additionally removed by this clause here, it only causes bogus errors +# to be seen during some make operations due to race conditions caused by the +# unexpected removal by this clause in parallel MAKE execution of other modules +# that thought the file existed. FWIW database.h should be created first (near the +# start of top level build) and removed last (near the end of a top level clean). +#CLEANS += database.h + +# This is delegated back to the top level Makefile +database.h: ${MAGICDIR}/database/database.h.in + ${MAKE} -C ${MAGICDIR} database/database.h include ${MAGICDIR}/rules.mak