From cc4768f1c9cbc288bf47c6ea807bdb191e25bc34 Mon Sep 17 00:00:00 2001 From: nhmall Date: Tue, 1 Sep 2026 13:38:05 -0400 Subject: [PATCH] adjust some Makefile dependencies Reported by @benknoble in https://github.com/NetHack/NetHack/issues/1669 Some undeclared dependencies could arise when building with make --shuffle This attempts to resolve those. --- sys/unix/Makefile.dat | 2 + sys/unix/Makefile.src | 10 +++-- sys/unix/Makefile.utl | 58 +++++++++++++++-------------- sys/unix/hints/include/response.500 | 2 +- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/sys/unix/Makefile.dat b/sys/unix/Makefile.dat index a339fa307..982e55e9f 100644 --- a/sys/unix/Makefile.dat +++ b/sys/unix/Makefile.dat @@ -95,6 +95,8 @@ GEM_RSC.RSC: # cp ../win/gem/GEM_RSC.RSC GEM_RSC.RSC $(UUDECODE) ../win/gem/gem_rsc.uu +nhdat: $(DATDLB) + ( LC_ALL=C ; ../util/dlb cf nhdat $(DATDLB) ) data: data.base ../util/makedefs ../util/makedefs -d diff --git a/sys/unix/Makefile.src b/sys/unix/Makefile.src index ea065d710..9de766166 100644 --- a/sys/unix/Makefile.src +++ b/sys/unix/Makefile.src @@ -642,8 +642,10 @@ DATE_O = $(TARGETPFX)date.o all: $(GAME) @echo "" -create_responsefiles: +../src/nethack_cc.rsp: echo $(CC_COMPILER_SWITCHES) >$(CC_RESPONSEFILE) + +../src/nethack_cxx.rsp: echo $(CXX_COMPILER_SWITCHES) >$(CXX_RESPONSEFILE) pregame: $(RESPONSEFILES) @@ -752,7 +754,7 @@ qt3tableview.moc: ../win/Qt3/qt3tableview.h $(QTDIR)/bin/moc -o qt3tableview.moc ../win/Qt3/qt3tableview.h # build monst.o and objects.o before executing '$(MAKE) makedefs' -$(MAKEDEFS): $(FIRSTOBJ) \ +$(MAKEDEFS): $(RESPONSEFILES) $(FIRSTOBJ) \ ../util/makedefs.c ../src/mdlib.c $(CONFIG_H) \ ../include/permonst.h ../include/monsters.h \ ../include/objclass.h ../include/objects.h ../include/sym.h \ @@ -770,7 +772,7 @@ $(MAKEDEFS): $(FIRSTOBJ) \ @( cd ../util ; $(MAKE) ../include/pm.h ) # Created at build time for configurations which support tiles, # but not by makedefs so not connected to the others. -../src/tile.c: ../win/share/tilemap.c $(HACK_H) +../src/tile.c: $(RESPONSEFILES) ../win/share/tilemap.c $(HACK_H) @( cd ../util ; $(MAKE) ../src/tile.c ) # @@ -799,7 +801,7 @@ $(TARGETPFX)date.o: date.c $(GENTILECFILE) $(HACK_H) $(HACKCSRC) $(HOBJ) $(TARG # Do NOT include ../dat/gitinfo.txt as either a prerequisite or target. # 'makedefs -v' processes it when present and ignores it if not. # -../include/date.h: ../util/makedefs $(VERSOURCES) $(HACK_H) +../include/date.h: $(RESPONSEFILES) ../util/makedefs $(VERSOURCES) $(HACK_H) -$(SHELL) ../sys/unix/gitinfo.sh $(GITINFO) #before 'makedefs -v' ../util/makedefs -v diff --git a/sys/unix/Makefile.utl b/sys/unix/Makefile.utl index 2bb835766..fb8f32c8c 100644 --- a/sys/unix/Makefile.utl +++ b/sys/unix/Makefile.utl @@ -144,6 +144,8 @@ QUIETCC=0 CLINK=$(CC) CXXLINK=$(CXX) +CCRESP=$(CC_RESPONSEFILE) + # ---------------------------------------- # # Nothing below this line should have to be changed. @@ -234,7 +236,7 @@ TARGET_AR ?= $(AR) # # dependencies for makedefs # -makedefs: $(HACKLIB) $(MAKEOBJS) mdgrep.h +makedefs: $(CCRESP) $(HACKLIB) $(MAKEOBJS) mdgrep.h $(CLINK) $(LFLAGS) -o makedefs $(MAKEOBJS) $(HACKLIB) @@ -276,9 +278,11 @@ $(HACKLIB): $(CONFIG_H) $(HACKLIBSRC) panic.o @( cd ../src ; $(MAKE) hacklib.a ) # support code used by several of the utility programs (but not makedefs) -panic.o: panic.c $(CONFIG_H) +panic.o: $(CCRESP) panic.c $(CONFIG_H) $(CC) $(CFLAGS) $(CSTD) -c panic.c -o $@ +../src/nethack_cc.rsp: + ( cd ../src; $(MAKE) ../src/nethack_cc.rsp ) # with all of extern.h's functions to complain about, we drown in # 'defined but not used' without -u @@ -289,7 +293,7 @@ lintdgn: # dependencies for recover # -recover: $(RECOVOBJS) $(HACKLIB) +recover: $(CCRESP) $(RECOVOBJS) $(HACKLIB) $(CLINK) $(LFLAGS) -o recover \ $(RECOVOBJS) $(HACKLIB) $(LIBS) @@ -325,7 +329,7 @@ SFCTOOLBIN = sfctool SFFLAGS=-DSFCTOOL -DNOPANICTRACE -DNOCRASHREPORT -DNO_CHRONICLE sfutil: $(SFCTOOLBIN) @echo '$(SFCTOOLBIN) is up to date.' -$(SFCTOOLBIN): $(SFCTOOLOBJS) $(HACKLIB) +$(SFCTOOLBIN): $(CCRESP) $(SFCTOOLOBJS) $(HACKLIB) $(TARGET_CLINK) $(TARGET_LFLAGS) -o $@ $(SFCTOOLOBJS) $(HACKLIB) $(TARGET_LIBS) $(TARGETPFX)sfctool.o: sfctool.c $(HACK_H) ../include/sfprocs.h $(TARGET_CC) $(TARGET_CFLAGS) $(SFFLAGS) -o $@ -c sfctool.c @@ -399,7 +403,7 @@ sftags: sftags.o $(HACKLIB) $(TARGETPFX)sf-alloc.o $(TARGETPFX)panic.o $(CLINK) $(LFLAGS) -o $@ sftags.o \ $(TARGETPFX)sf-alloc.o $(TARGETPFX)panic.o \ $(HACKLIB) $(LIBS) -sftags.o: sftags.c $(HACK_H) +sftags.o: $(CCRESP) sftags.c $(HACK_H) $(CC) $(CFLAGS) -c sftags.c ../include/sfproto.h: sf.tags sftags ./sftags @@ -468,13 +472,13 @@ sf.tags: $(CTAGDEP) dlb: $(DLBOBJS) $(HACKLIB) $(CLINK) $(LFLAGS) -o dlb $(DLBOBJS) $(HACKLIB) $(LIBS) -dlb_main.o: dlb_main.c $(CONFIG_H) ../include/dlb.h +dlb_main.o: $(CCRESP) dlb_main.c $(CONFIG_H) ../include/dlb.h $(CC) $(CFLAGS) $(CSTD) -c dlb_main.c -o $@ stripbs: stripbs.o $(CC) $(LFLAGS) -o stripbs stripbs.o -stripbs.o: stripbs.c +stripbs.o: $(CCRESP) stripbs.c $(CC) $(CFLAGS) -c stripbs.c # dependencies for tile utilities @@ -521,38 +525,38 @@ tilemap: tilemap.o $(OBJDIR)/objects.o $(OBJDIR)/monst.o $(OBJDIR)/drawing.o \ ../src/tile.c: tilemap ./tilemap -tiletext.o: ../win/share/tiletext.c $(CONFIG_H) ../win/share/tile.h +tiletext.o: $(CCRESP) ../win/share/tiletext.c $(CONFIG_H) ../win/share/tile.h $(CC) $(CFLAGS) $(NO_WARN_DISCARDED_QUALIFIERS) $(CSTD) -I../win/share -c ../win/share/tiletext.c -o $@ -tiletxt.o: ../win/share/tiletxt.c ../win/share/tilemap.c $(HACK_H) +tiletxt.o: $(CCRESP) ../win/share/tiletxt.c ../win/share/tilemap.c $(HACK_H) $(CC) $(CFLAGS) $(CSTD) -I../win/share -c ../win/share/tiletxt.c -o $@ -tilemap.o: ../win/share/tilemap.c $(HACK_H) +tilemap.o: $(CCRESP) ../win/share/tilemap.c $(HACK_H) $(CC) $(CFLAGS) $(CSTD) -c ../win/share/tilemap.c -o $@ -gifread.o: ../win/share/gifread.c $(CONFIG_H) ../win/share/tile.h +gifread.o: $(CCRESP) ../win/share/gifread.c $(CONFIG_H) ../win/share/tile.h $(CC) $(CFLAGS) $(CSTD) -I../win/share -c ../win/share/gifread.c -o $@ -ppmwrite.o: ../win/share/ppmwrite.c $(CONFIG_H) ../win/share/tile.h +ppmwrite.o: $(CCRESP) ../win/share/ppmwrite.c $(CONFIG_H) ../win/share/tile.h $(CC) $(CFLAGS) $(CSTD) -I../win/share -c ../win/share/ppmwrite.c -o $@ -tile2bmp.o: ../win/share/tile2bmp.c $(HACK_H) ../win/share/tile.h +tile2bmp.o: $(CCRESP) ../win/share/tile2bmp.c $(HACK_H) ../win/share/tile.h $(CC) $(CFLAGS) $(CSTD) -I../win/share -c ../win/share/tile2bmp.c -o $@ -tile2x11.o: ../win/X11/tile2x11.c $(HACK_H) ../win/share/tile.h \ +tile2x11.o: $(CCRESP) ../win/X11/tile2x11.c $(HACK_H) ../win/share/tile.h \ ../include/tile2x11.h $(CC) $(CFLAGS) $(CSTD) -I../win/share -c ../win/X11/tile2x11.c -o $@ -tile2img.o: ../win/gem/tile2img.c $(HACK_H) ../win/share/tile.h \ +tile2img.o: $(CCRESP) ../win/gem/tile2img.c $(HACK_H) ../win/share/tile.h \ ../include/bitmfile.h $(CC) $(CFLAGS) $(CSTD) -I../win/share -c ../win/gem/tile2img.c -o $@ -xpm2img.o: ../win/gem/xpm2img.c $(HACK_H) ../include/bitmfile.h +xpm2img.o: $(CCRESP) ../win/gem/xpm2img.c $(HACK_H) ../include/bitmfile.h $(CC) $(CFLAGS) $(CSTD) -c ../win/gem/xpm2img.c -o $@ -bitmfile.o: ../win/gem/bitmfile.c ../include/bitmfile.h +bitmfile.o: $(CCRESP) ../win/gem/bitmfile.c ../include/bitmfile.h $(CC) $(CFLAGS) $(CSTD) -c ../win/gem/bitmfile.c -o $@ -tile2beos.o: ../win/BeOS/tile2beos.cpp $(HACK_H) ../win/share/tile.h +tile2beos.o: $(CCRESP) ../win/BeOS/tile2beos.cpp $(HACK_H) ../win/share/tile.h $(CXX) $(CFLAGS) $(CSTD) -I../win/share -c ../win/BeOS/tile2beos.cpp -o $@ # note: tileedit.cpp was developed for Qt2 and will not compile using Qt5 -tileedit.o: ../win/Qt/tileedit.cpp +tileedit.o: $(CCRESP) ../win/Qt/tileedit.cpp $(CXX) -I../include -I$(QTDIR)/include ../win/Qt/tileedit.cpp tileedit: tileedit.o $(TEXT_IO) $(QTDIR)/bin/moc -o tileedit.moc tileedit.h @@ -560,7 +564,7 @@ tileedit: tileedit.o $(TEXT_IO) uudecode: uudecode.o $(CLINK) $(LFLAGS) -o uudecode uudecode.o $(LIBS) -uudecode.o: ../sys/share/uudecode.c +uudecode.o: $(CCRESP) ../sys/share/uudecode.c $(CC) $(CFLAGS) $(CSTD) -c -o uudecode.o ../sys/share/uudecode.c # using dependencies like @@ -577,27 +581,27 @@ uudecode.o: ../sys/share/uudecode.c # make sure host object files from src are available when needed # (note: these dependencies have been copied from Makefile.src so only come # indirectly from 'make depend', hence are subject to bit rot as src changes) -$(OBJDIR)/alloc.o: ../src/alloc.c $(CONFIG_H) ../include/nhlua.h +$(OBJDIR)/alloc.o: $(CCRESP) ../src/alloc.c $(CONFIG_H) ../include/nhlua.h $(CC) $(CFLAGS) $(CSTD) -c ../src/alloc.c -o $@ -$(OBJDIR)/drawing.o: ../src/drawing.c $(CONFIG_H) ../include/color.h \ +$(OBJDIR)/drawing.o: $(CCRESP) ../src/drawing.c $(CONFIG_H) ../include/color.h \ ../include/rm.h ../include/objclass.h ../include/defsym.h \ ../include/objects.h ../include/sym.h $(CC) $(CFLAGS) $(CSTD) -c ../src/drawing.c -o $@ -$(OBJDIR)/decl.o: ../src/decl.c $(HACK_H) +$(OBJDIR)/decl.o: $(CCRESP) ../src/decl.c $(HACK_H) $(CC) $(CFLAGS) $(CSTD) -c ../src/decl.c -o $@ -$(OBJDIR)/monst.o: ../src/monst.c $(CONFIG_H) ../include/permonst.h \ +$(OBJDIR)/monst.o: $(CCRESP) ../src/monst.c $(CONFIG_H) ../include/permonst.h \ ../include/align.h ../include/monattk.h ../include/monflag.h \ ../include/monsters.h ../include/wintype.h ../include/sym.h \ ../include/defsym.h ../include/color.h $(CC) $(CFLAGS) $(CSTD) -c ../src/monst.c -o $@ -$(OBJDIR)/objects.o: ../src/objects.c $(CONFIG_H) ../include/obj.h \ +$(OBJDIR)/objects.o: $(CCRESP) ../src/objects.c $(CONFIG_H) ../include/obj.h \ ../include/prop.h ../include/skills.h ../include/color.h \ ../include/objclass.h ../include/defsym.h ../include/objects.h $(CC) $(CFLAGS) $(CSTD) -c ../src/objects.c -o $@ -$(OBJDIR)/dlb.o: ../src/dlb.c $(CONFIG_H) ../include/dlb.h +$(OBJDIR)/dlb.o: $(CCRESP) ../src/dlb.c $(CONFIG_H) ../include/dlb.h $(CC) $(CFLAGS) $(CSTD) -c ../src/dlb.c -o $@ # this differs substantially from what Makefile.src specifies -$(OBJDIR)/date.o: ../src/date.c $(CONFIG_H) +$(OBJDIR)/date.o: $(CCRESP) ../src/date.c $(CONFIG_H) $(CC) $(CFLAGS) $(CSTD) -c ../src/date.c -o $@ ../include/nhlua.h: @( cd .. ; $(MAKE) lua_support ) diff --git a/sys/unix/hints/include/response.500 b/sys/unix/hints/include/response.500 index 0781323e0..24b5d8822 100644 --- a/sys/unix/hints/include/response.500 +++ b/sys/unix/hints/include/response.500 @@ -15,7 +15,6 @@ USE_RESPONSEFILE=1 endif ifeq "$(USE_RESPONSEFILE)" "1" -RESPONSEFILES=create_responsefiles CXXFLAGS = $(CCXXFLAGS) -I. -I$(QTDIR)/include $(QTCXXFLAGS) CC_COMPILER_SWITCHES := $(subst \,\\,$(CFLAGS)) CC_COMPILER_SWITCHES := $(subst ",\",$(CC_COMPILER_SWITCHES)) @@ -23,6 +22,7 @@ CXX_COMPILER_SWITCHES := $(subst \,\\,$(CXXFLAGS)) CXX_COMPILER_SWITCHES := $(subst ",\",$(CXX_COMPILER_SWITCHES)) CC_RESPONSEFILE=../src/nethack_cc.rsp CXX_RESPONSEFILE=../src/nethack_cxx.rsp +RESPONSEFILES=$(CC_RESPONSEFILE) $(CXX_RESPONSEFILE) CFLAGS=@$(CC_RESPONSEFILE) CXXFLAGS=@$(CXX_RESPONSEFILE) CLEAN_CC_RESPONSEFILE=rm -f $(CC_RESPONSEFILE);