diff --git a/.gitignore b/.gitignore index 5615fe332..ab0e33e93 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ Makefile.gcc Makefile-orig Makefile.bcc-orig Makefile.gcc-orig +make.prefs *.suo *.pdb *.ilk diff --git a/sys/unix/Makefile.src b/sys/unix/Makefile.src index 519894b13..9d7a82e29 100644 --- a/sys/unix/Makefile.src +++ b/sys/unix/Makefile.src @@ -4,7 +4,8 @@ # NetHack may be freely redistributed. See license for details. # Root of source tree: -NHSROOT=.. +NHSROOT ?=.. +SRCDIR = $(NHSROOT)/src # newer makes predefine $(MAKE) to 'make' and do smarter processing of # recursive make calls if $(MAKE) is used @@ -41,37 +42,37 @@ SHELL=/bin/sh # SHELL=E:/GEMINI2/MUPFEL.TTP # Usually, the C compiler driver is used for linking: -#LINK=$(CC) +#LINK ?=$(CC) # If we're cross-compiling, a hints file will override this # to a unique target directory, but otherwise it just goes in # ../src -TARGETPFX= +TARGETPFX ?= # Pick the SYSSRC and SYSOBJ lines corresponding to your desired operating # system. # # for UNIX systems -SYSSRC = ../sys/share/ioctl.c ../sys/share/unixtty.c ../sys/unix/unixmain.c \ +SYSSRC ?= ../sys/share/ioctl.c ../sys/share/unixtty.c ../sys/unix/unixmain.c \ ../sys/unix/unixunix.c ../sys/unix/unixres.c -SYSOBJ = $(TARGETPFX)ioctl.o $(TARGETPFX)unixmain.o $(TARGETPFX)unixtty.o \ +SYSOBJ ?= $(TARGETPFX)ioctl.o $(TARGETPFX)unixmain.o $(TARGETPFX)unixtty.o \ $(TARGETPFX)unixunix.o $(TARGETPFX)unixres.o # # for Systos -# SYSSRC = ../sys/atari/tos.c ../sys/share/pcmain.c ../sys/share/pcsys.c \ +# SYSSRC ?= ../sys/atari/tos.c ../sys/share/pcmain.c ../sys/share/pcsys.c \ # ../sys/share/pctty.c ../sys/share/pcunix.c -# SYSOBJ = $(TARGETPFX)tos.o $(TARGETPFX)pcmain.o $(TARGETPFX)pcsys.o \ +# SYSOBJ ?= $(TARGETPFX)tos.o $(TARGETPFX)pcmain.o $(TARGETPFX)pcsys.o \ # $(TARGETPFX)pctty.o $(TARGETPFX)pcunix.o # # for BeOS -#SYSSRC = ../sys/be/bemain.c ../sys/share/unixtty.c ../sys/share/ioctl.c -#SYSOBJ = $(TARGETPFX)bemain.o $(TARGETPFX)unixtty.o $(TARGETPFX)ioctl.o +#SYSSRC ?= ../sys/be/bemain.c ../sys/share/unixtty.c ../sys/share/ioctl.c +#SYSOBJ ?= $(TARGETPFX)bemain.o $(TARGETPFX)unixtty.o $(TARGETPFX)ioctl.o # NetHack 5.0 began introducing C99 code. # # If your compiler needs an appropriate switch to accept C99 code. -# CSTD = -std=c99 +# CSTD ?= -std=c99 # if you are using gcc as your compiler: # uncomment the CC definition below if it's not in your environment @@ -192,8 +193,8 @@ SYSOBJ = $(TARGETPFX)ioctl.o $(TARGETPFX)unixmain.o $(TARGETPFX)unixtty.o \ CFLAGS ?= -I../include LINK ?= $(CC) -AR = ar -ARFLAGS = rcs +AR ?= ar +ARFLAGS ?= rcs # The Qt and Be window systems are written in C++, while the rest of # NetHack is standard C. If using Qt, uncomment the LINK line here to get @@ -210,15 +211,15 @@ MOCPATH ?= $(QTDIR)/bin/$(MOC) # The default is for the TARGET_* variables to match the defaults. # If we're cross-compiling these will get overridden elsewhere, likely via # a hints file. TARGETPFX was set above earlier. -TARGET_CC = $(CC) -TARGET_CFLAGS = $(CFLAGS) $(CSTD) -TARGET_LINK = $(LINK) -TARGET_LFLAGS = $(LFLAGS) -TARGET_CXX = $(CXX) -TARGET_CXXFLAGS = $(CXXFLAGS) -TARGET_LIBS = $(LIBS) -TARGET_AR = $(AR) -TARGET_ARFLAGS = $(ARFLAGS) +TARGET_CC ?= $(CC) +TARGET_CFLAGS ?= $(CFLAGS) $(CSTD) +TARGET_LINK ?= $(LINK) +TARGET_LFLAGS ?= $(LFLAGS) +TARGET_CXX ?= $(CXX) +TARGET_CXXFLAGS ?= $(CXXFLAGS) +TARGET_LIBS ?= $(LIBS) +TARGET_AR ?= $(AR) +TARGET_ARFLAGS ?= $(ARFLAGS) # we specify C preprocessor flags via CFLAGS; files built with default rules # might include $(CPPFLAGS) which could get a value from user's environment; @@ -227,42 +228,38 @@ CPPFLAGS = # file for regular expression matching REGEXOBJ ?= $(TARGETPFX)posixregex.o -#REGEXOBJ = $(TARGETPFX)pmatchregex.o -#REGEXOBJ = $(TARGETPFX)cppregex.o +#REGEXOBJ ?= $(TARGETPFX)pmatchregex.o +#REGEXOBJ ?= $(TARGETPFX)cppregex.o -TILECFILE ?= tile.c -TILEOFILE ?= +GENTILECFILE = tile.c +GENTILEOFILE = $(TARGETPFX)tile.o # Set the WINSRC, WINOBJ, and WINLIB lines to correspond to your desired # combination of windowing systems. Also set matching USE_x_GRAPHICS in -# config.h. Note that if you are building for any window system which -# uses tiles, uncomment '#$(TARGETPFX)tile.o' (by removing the '#') in that -# system's WINxOBJ (WINX11OBJ or WINQTOBJ or WINQT3OBJ). If you are building -# nethack with support for multiple window systems, only uncomment that for -# one of them to avoid duplicate tile.o. +# config.h. # # files for a straight tty port using no native windowing system -WINTTYSRC = ../win/tty/getline.c ../win/tty/termcap.c ../win/tty/topl.c \ +WINTTYSRC ?= ../win/tty/getline.c ../win/tty/termcap.c ../win/tty/topl.c \ ../win/tty/wintty.c -WINTTYOBJ = $(TARGETPFX)getline.o $(TARGETPFX)termcap.o $(TARGETPFX)topl.o \ +WINTTYOBJ ?= $(TARGETPFX)getline.o $(TARGETPFX)termcap.o $(TARGETPFX)topl.o \ $(TARGETPFX)wintty.o # # Files for curses interface -WINCURSESSRC = ../win/curses/cursmain.c ../win/curses/curswins.c \ +WINCURSESSRC ?= ../win/curses/cursmain.c ../win/curses/curswins.c \ ../win/curses/cursmisc.c ../win/curses/cursdial.c \ ../win/curses/cursstat.c ../win/curses/cursinit.c \ ../win/curses/cursmesg.c ../win/curses/cursinvt.c -WINCURSESOBJ = $(TARGETPFX)cursmain.o $(TARGETPFX)curswins.o \ +WINCURSESOBJ ?= $(TARGETPFX)cursmain.o $(TARGETPFX)curswins.o \ $(TARGETPFX)cursmisc.o $(TARGETPFX)cursdial.o \ $(TARGETPFX)cursstat.o $(TARGETPFX)cursinit.o \ $(TARGETPFX)cursmesg.o $(TARGETPFX)cursinvt.o # # files for an X11 port # (tile.c is a generated source file) -WINX11SRC = ../win/X11/Window.c ../win/X11/dialogs.c ../win/X11/winX.c \ +WINX11SRC ?= ../win/X11/Window.c ../win/X11/dialogs.c ../win/X11/winX.c \ ../win/X11/winmap.c ../win/X11/winmenu.c ../win/X11/winmesg.c \ ../win/X11/winmisc.c ../win/X11/winstat.c ../win/X11/wintext.c \ - ../win/X11/winval.c tile.c + ../win/X11/winval.c $(GENTILECFILE) WINX11OBJ ?= $(TARGETPFX)Window.o $(TARGETPFX)dialogs.o $(TARGETPFX)winX.o \ $(TARGETPFX)winmap.o $(TARGETPFX)winmenu.o $(TARGETPFX)winmesg.o \ $(TARGETPFX)winmisc.o $(TARGETPFX)winstat.o $(TARGETPFX)wintext.o \ @@ -273,7 +270,7 @@ WINX11OBJ ?= $(TARGETPFX)Window.o $(TARGETPFX)dialogs.o $(TARGETPFX)winX.o \ #WINQT3SRC = ../win/Qt3/qt3_win.cpp ../win/Qt3/qt3_clust.cpp \ # ../win/Qt3/qt3tableview.cpp #WINQT3OBJ = $(TARGETPFX)qt3_win.o $(TARGETPFX)qt3_clust.o \ -# $(TARGETPFX)qt3tableview.o #$(TARGETPFX)tile.o +# $(TARGETPFX)qt3tableview.o $(GENTILEOFILE) # empty values for 'make depend' WINQT3SRC = WINQT3OBJ = @@ -283,9 +280,9 @@ WINQT3OBJ = # # generated source files made by Qt's 'moc' program from ../win/Qt/qt_*.h; # appended to WINQTSRC for use by 'make depend' -WINQTMOC = qt_kde0.moc qt_main.moc qt_map.moc qt_menu.moc qt_msg.moc \ +WINQTMOC ?= qt_kde0.moc qt_main.moc qt_map.moc qt_menu.moc qt_msg.moc \ qt_plsel.moc qt_set.moc qt_stat.moc qt_xcmd.moc qt_yndlg.moc -WINQTSRC = ../win/Qt/qt_bind.cpp ../win/Qt/qt_click.cpp \ +WINQTSRC ?= ../win/Qt/qt_bind.cpp ../win/Qt/qt_click.cpp \ ../win/Qt/qt_clust.cpp ../win/Qt/qt_delay.cpp \ ../win/Qt/qt_glyph.cpp ../win/Qt/qt_icon.cpp ../win/Qt/qt_inv.cpp \ ../win/Qt/qt_key.cpp ../win/Qt/qt_line.cpp ../win/Qt/qt_main.cpp \ @@ -293,7 +290,7 @@ WINQTSRC = ../win/Qt/qt_bind.cpp ../win/Qt/qt_click.cpp \ ../win/Qt/qt_plsel.cpp ../win/Qt/qt_rip.cpp ../win/Qt/qt_set.cpp \ ../win/Qt/qt_stat.cpp ../win/Qt/qt_str.cpp ../win/Qt/qt_streq.cpp \ ../win/Qt/qt_svsel.cpp ../win/Qt/qt_win.cpp ../win/Qt/qt_xcmd.cpp \ - ../win/Qt/qt_yndlg.cpp $(WINQTMOC) tile.c + ../win/Qt/qt_yndlg.cpp $(WINQTMOC) $(GENTILECFILE) WINQTOBJ ?= $(TARGETPFX)qt_bind.o $(TARGETPFX)qt_click.o \ $(TARGETPFX)qt_clust.o $(TARGETPFX)qt_delay.o \ $(TARGETPFX)qt_glyph.o $(TARGETPFX)qt_icon.o \ @@ -302,23 +299,22 @@ WINQTOBJ ?= $(TARGETPFX)qt_bind.o $(TARGETPFX)qt_click.o \ $(TARGETPFX)qt_msg.o $(TARGETPFX)qt_plsel.o $(TARGETPFX)qt_rip.o \ $(TARGETPFX)qt_set.o $(TARGETPFX)qt_stat.o $(TARGETPFX)qt_str.o \ $(TARGETPFX)qt_streq.o $(TARGETPFX)qt_svsel.o $(TARGETPFX)qt_win.o \ - $(TARGETPFX)qt_xcmd.o $(TARGETPFX)qt_yndlg.o #$(TARGETPFX)tile.o + $(TARGETPFX)qt_xcmd.o $(TARGETPFX)qt_yndlg.o $(GENTILEOFILE) # Files for Shim windowing interface for libnh -- doesn't do anything, # just passes along the API calls to the library # -WINSHIMSRC = ../win/shim/winshim.c -WINSHIMOBJ = winshim.o +WINSHIMSRC ?= ../win/shim/winshim.c +WINSHIMOBJ ?= winshim.o # # Files for a BeOS InterfaceKit port -- not ready for prime time -WINBESRC = -WINBEOBJ = +WINBESRC ?= +WINBEOBJ ?= #WINBESRC = ../win/BeOS/winbe.cpp ../win/BeOS/NHWindow.cpp \ -# ../win/BeOS/NHMenuWindow.cpp ../win/BeOS/NHMapWindow.cpp tile.c +# ../win/BeOS/NHMenuWindow.cpp ../win/BeOS/NHMapWindow.cpp $(GENTILECFILE) #WINBEOBJ = $(TARGETPFX)winbe.o $(TARGETPFX)NHWindow.o \ -# $(TARGETPFX)NHMenuWindow.o $(TARGETPFX)NHMapWindow.o \ -# $(TARGETPFX)tile.o +# $(TARGETPFX)NHMenuWindow.o $(TARGETPFX)NHMapWindow.o $(GENTILEOFILE) # # #WINSRC = $(WINTTYSRC) @@ -356,16 +352,16 @@ WINBEOBJ = WINQT3LIB = -L$(QTDIR)/lib -lqt # # libraries for Qt 4 -WINQT4LIB = `pkg-config QtGui --libs` +WINQT4LIB ?= `pkg-config QtGui --libs` # # libraries for Qt 5 (use with WINQTSRC and WINQTOBJ) -WINQT5LIB = `pkg-config Qt5Gui Qt5Widgets Qt5Multimedia --libs` +WINQT5LIB ?= `pkg-config Qt5Gui Qt5Widgets Qt5Multimedia --libs` # # libraries for KDE (with Qt) -WINKDELIB = -lkdecore -lkdeui -lXext +WINKDELIB ?= -lkdecore -lkdeui -lXext # # libraries for BeOS -WINBELIB = -lbe +WINBELIB ?= -lbe # # libraries for curses port # link with ncurses @@ -418,14 +414,14 @@ WINOBJ ?= $(WINTTYOBJ) WINLIB ?= $(WINTTYLIB) -lncurses # make NetHack -GAME = nethack +GAME ?= nethack # GAME = nethack.prg -GAMEBIN = $(GAME) +GAMEBIN ?= $(GAME) # if you defined RANDOM in unixconf.h since your system did not come # with a reasonable random number generator # RANDOBJ = $(TARGETPFX)random.o -RANDOBJ = +RANDOBJ ?= # used by `make depend' to reconstruct this Makefile; you shouldn't need this # at all but can override with 'make AWK=nawk' or 'make AWK=gawk' if necessary @@ -494,22 +490,22 @@ AT = $(AT_V$(QUIETCC)) # verbosity-adjacent; these will already have 'real' values if hints have # set up cross-compiling, in which case these assignments will be no-ops -PREGAME=@true -PACKAGE=@true +PREGAME ?=@true +PACKAGE ?=@true -HACKLIBSRC = hacklib.c -HACKLIBOBJS = hacklib.o -HACKLIB = hacklib.a -TARGET_HACKLIB = $(TARGETPFX)hacklib.a +HACKLIBSRC ?= hacklib.c +HACKLIBOBJS ?= hacklib.o +HACKLIB ?= hacklib.a +TARGET_HACKLIB ?= $(TARGETPFX)hacklib.a -MAKEDEFS = ../util/makedefs +MAKEDEFS ?= ../util/makedefs # -lm required by lua LUA_VERSION ?=5.4.8 -LUABASE = liblua-$(LUA_VERSION).a -LUALIB = ../lib/lua/$(LUABASE) -LUALIBS = $(LUALIB) -lm $(DLLIB) -LUAHEADERS = lib/lua-$(LUA_VERSION)/src +LUABASE ?= liblua-$(LUA_VERSION).a +LUALIB ?= ../lib/lua/$(LUABASE) +LUALIBS ?= $(LUALIB) -lm $(DLLIB) +LUAHEADERS ?= lib/lua-$(LUA_VERSION)/src # timestamp files to reduce `make' overhead and shorten .o dependency lists CONFIG_H = ../src/config.h-t @@ -517,7 +513,7 @@ HACK_H = ../src/hack.h-t # all .c that are part of the main NetHack program and are not operating- or # windowing-system specific. Do not include date.c in this list. -HACKCSRC = allmain.c alloc.c apply.c artifact.c attrib.c ball.c bones.c \ +HACKCSRC ?= allmain.c alloc.c apply.c artifact.c attrib.c ball.c bones.c \ botl.c calendar.c cmd.c coloratt.c dbridge.c decl.c detect.c dig.c display.c \ dlb.c do.c do_name.c do_wear.c dog.c dogmove.c dokick.c dothrow.c \ drawing.c dungeon.c earlyarg.c eat.c end.c engrave.c exper.c explode.c \ @@ -537,40 +533,40 @@ HACKCSRC = allmain.c alloc.c apply.c artifact.c attrib.c ball.c bones.c \ windows.c wizard.c wizcmds.c worm.c worn.c write.c zap.c # all operating-system-dependent .c (for dependencies and such) -SYSCSRC = ../sys/share/pcmain.c ../sys/share/pcsys.c \ +SYSCSRC ?= ../sys/share/pcmain.c ../sys/share/pcsys.c \ ../sys/share/pctty.c ../sys/share/pcunix.c \ ../sys/share/pmatchregex.c ../sys/share/posixregex.c \ ../sys/share/random.c \ ../sys/share/ioctl.c ../sys/share/unixtty.c ../sys/unix/unixmain.c \ ../sys/unix/unixunix.c ../sys/unix/unixres.c -SYSCXXSRC = ../sys/share/cppregex.cpp +SYSCXXSRC ?= ../sys/share/cppregex.cpp # generated source files (tile.c is handled separately via WINxxxSRC) -GENCSRC = #tile.c +GENCSRC ?= #tile.c # all windowing-system-dependent .c (for dependencies and such) -WINCSRC = $(WINTTYSRC) $(WINCURSESSRC) $(WINX11SRC) $(WINSHIMSRC) +WINCSRC ?= $(WINTTYSRC) $(WINCURSESSRC) $(WINX11SRC) $(WINSHIMSRC) # all windowing-system-dependent .cpp (for dependencies and such) -WINCXXSRC = $(WINQTSRC) $(WINQT3SRC) $(WINBESRC) +WINCXXSRC ?= $(WINQTSRC) $(WINQT3SRC) $(WINBESRC) # Files for window system chaining. Requires SYSCF; include via HINTSRC/HINTOBJ -CHAINSRC = ../win/chain/wc_chainin.c ../win/chain/wc_chainout.c \ +CHAINSRC ?= ../win/chain/wc_chainin.c ../win/chain/wc_chainout.c \ ../win/chain/wc_trace.c -CHAINOBJ = $(TARGETPFX)wc_chainin.o $(TARGETPFX)wc_chainout.o \ +CHAINOBJ ?= $(TARGETPFX)wc_chainin.o $(TARGETPFX)wc_chainout.o \ $(TARGETPFX)wc_trace.o # .c files for this version (for date.h) -VERSOURCES = $(HACKCSRC) $(HACKLIBSRC) $(SYSSRC) $(WINSRC) $(CHAINSRC) $(GENCSRC) +VERSOURCES ?= $(HACKCSRC) $(HACKLIBSRC) $(SYSSRC) $(WINSRC) $(CHAINSRC) $(GENCSRC) # .c files for all versions using this Makefile (for lint and tags) -CSOURCES = $(HACKCSRC) $(HACKLIBSRC) $(SYSCSRC) $(WINCSRC) $(CHAINSRC) $(GENCSRC) +CSOURCES ?= $(HACKCSRC) $(HACKLIBSRC) $(SYSCSRC) $(WINCSRC) $(CHAINSRC) $(GENCSRC) # all .h files except date.h, which would # cause dependency loops if run through "make depend" # and dgn_file.h, special level & dungeon files. # -HACKINCL = align.h artifact.h artilist.h attrib.h botl.h \ +HACKINCL ?= align.h artifact.h artilist.h attrib.h botl.h \ color.h config.h config1.h context.h coord.h cstd.h decl.h \ defsym.h display.h dlb.h dungeon.h engrave.h extern.h flag.h \ fnamesiz.h func_tab.h global.h warnings.h hack.h lint.h mextra.h \ @@ -583,16 +579,16 @@ HACKINCL = align.h artifact.h artilist.h attrib.h botl.h \ wintty.h wincurs.h winX.h winprocs.h wintype.h you.h youprop.h \ weight.h -HSOURCES = $(HACKINCL) dgn_file.h +HSOURCES ?= $(HACKINCL) dgn_file.h # the following .o's _must_ be made before any others (for makedefs) -FIRSTOBJ = monst.o objects.o -HOSTOBJ = $(FIRSTOBJ) alloc.o drawing.o +FIRSTOBJ ?= monst.o objects.o +HOSTOBJ ?= $(FIRSTOBJ) alloc.o drawing.o # # $(TARGETPFX)date.o is not included in this list # -HOBJ = $(TARGETPFX)allmain.o $(TARGETPFX)alloc.o \ +HOBJ ?= $(TARGETPFX)allmain.o $(TARGETPFX)alloc.o \ $(TARGETPFX)apply.o $(TARGETPFX)artifact.o $(TARGETPFX)attrib.o \ $(TARGETPFX)ball.o $(TARGETPFX)bones.o $(TARGETPFX)botl.o \ $(TARGETPFX)calendar.o $(TARGETPFX)cfgfiles.o $(TARGETPFX)cmd.o \ @@ -636,10 +632,10 @@ HOBJ = $(TARGETPFX)allmain.o $(TARGETPFX)alloc.o \ $(TARGETPFX)wizcmds.o $(TARGETPFX)worm.o $(TARGETPFX)worn.o \ $(TARGETPFX)write.o $(TARGETPFX)zap.o \ $(REGEXOBJ) $(RANDOBJ) $(SYSOBJ) $(WINOBJ) \ - $(HINTOBJ) $(SNDLIBOBJ) $(UUIDOBJ) \ + $(HINTOBJ) $(SNDLIBOBJ) $(UUIDOBJ) $(GENTILEOFILE) \ $(TARGETPFX)version.o -DATE_O = $(TARGETPFX)date.o +DATE_O ?= $(TARGETPFX)date.o # the .o files from the HACKCSRC, SYSSRC, and WINSRC lists @@ -657,42 +653,48 @@ pregame: $(RESPONSEFILES) $(GAME): pregame $(MAKEDEFS) $(LUALIB) $(WAVS) $(SYSTEM) @echo "$(GAME) is up to date." -Sysunix: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(DATE_O) $(BUILDMORE) Makefile +Sysunix: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(GENTILEOFILE) \ + $(DATE_O) $(BUILDMORE) Makefile @echo "Linking $(GAME)." $(AT)$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAMEBIN) \ $(HOBJ) $(DATE_O) $(TARGET_HACKLIB) $(WINLIB) \ $(TARGET_LIBS) $(LUALIBS) $(AUTOLIBS) @touch Sysunix -Sys3B2: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(DATE_O) $(BUILDMORE) Makefile +Sys3B2: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(GENTILEOFILE) \ + $(DATE_O) $(BUILDMORE) Makefile @echo "Linking $(GAME)." $(AT)$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAMEBIN) \ $(HOBJ) $(DATE_O) $(TARGET_HACKLIB) $(WINLIB) \ $(LUALIBS) -lmalloc @touch Sys3B2 -Sysatt: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(DATE_O) $(BUILDMORE) Makefile +Sysatt: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(GENTILEOFILE) \ + $(DATE_O) $(BUILDMORE) Makefile @echo "Loading $(GAME)." $(AT)$(LD) $(TARGET_LFLAGS) /lib/crt0s.o /lib/shlib.ifile \ -o $(GAMEBIN) $(HOSTOBJ) $(HOBJ) $(DATE_O) $(TARGET_HACKLIB) \ $(LUALIBS) @touch Sysatt -Systos: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(DATE_O) $(BUILDMORE) Makefile +Systos: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(GENTILEOFILE) \ + $(DATE_O) $(BUILDMORE) Makefile @echo "Linking $(GAME)." $(AT)$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAMEBIN) \ $(HOBJ) $(DATE_O) $(TARGET_HACKLIB) \ $(WINLIB) $(LUALIBS) @touch Systos -SysV-AT: DUMB.Setup $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(DATE_O) $(BUILDMORE) Makefile +SysV-AT: DUMB.Setup $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(GENTILEOFILE) \ + $(DATE_O) $(BUILDMORE) Makefile @echo "Linking $(GAME)." $(AT)$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAMEBIN) \ $(HOBJ) $(DATE_O) $(TARGET_HACKLIB) \ $(WINLIB) $(LUALIBS) @touch SysV-AT -SysBe: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(DATE_O) $(BUILDMORE) Makefile +SysBe: $(HOSTOBJ) $(HOBJ) $(TARGET_HACKLIB) $(GENTILEOFILE) \ + $(DATE_O) $(BUILDMORE) Makefile @echo "Linking $(GAME)." $(AT)$(TARGET_LINK) $(TARGET_LFLAGS) -o $(GAME) \ $(HOBJ) $(DATE_O) $(TARGET_HACKLIB) \ @@ -766,7 +768,7 @@ $(MAKEDEFS): $(FIRSTOBJ) \ # Created at build time for configurations which support tiles, # but not by makedefs so not connected to the others. tile.c: ../win/share/tilemap.c $(HACK_H) - @( cd ../util ; $(MAKE) ../src/tile.c ) + @( cd ../util ; $(MAKE) $(SRCDIR)/tile.c ) # # hacklib (a library of utility routines) @@ -824,7 +826,7 @@ spotless: clean -rm -f ../include/nhlua.h -rm -f ../include/date.h #created but no longer used, at least by core -rm -f ../include/onames.h ../include/pm.h #obsolete generated files - -rm -f tile.c *.moc Qt*.h-t + -rm -f $(GENTILECFILE) *.moc Qt*.h-t -rm -f ../win/gnome/gn_rip.h package: @@ -856,7 +858,7 @@ updatedepend-setup: echo '#include "../$(LUAHEADERS)/lualib.h"' >> $$HFILE && \ echo '#include "../$(LUAHEADERS)/lauxlib.h"' >> $$HFILE && \ echo '/*nhlua.h*/' >> $$HFILE ) - @echo "Generating bogus src/tile.c" + @echo "Generating bogus $(GENTILECFILE)" @echo '#error bogus include/nhlua.h' > ../../src/tile.c @echo "#include \"hack.h\"" >> ../../src/tile.c @@ -881,7 +883,7 @@ depend2: $(WINQTMOC) @echo '# see make depend above' >> $(MAKEFILE_NAME) - diff Makefile.bak $(MAKEFILE_NAME) @rm -f Makefile.bak - @rm -f ../include/nhlua.h tile.c + @rm -f ../include/nhlua.h $(GENTILECFILE) # DO NOT DELETE THIS LINE OR CHANGE ANYTHING BEYOND IT diff --git a/sys/unix/Makefile.utl b/sys/unix/Makefile.utl index 4e6091550..d169fa5aa 100644 --- a/sys/unix/Makefile.utl +++ b/sys/unix/Makefile.utl @@ -10,6 +10,7 @@ # Root of source tree: NHSROOT=.. +SRCDIR = $(NHSROOT)/src # newer makes predefine $(MAKE) to 'make' and do smarter processing of # recursive make calls if $(MAKE) is used @@ -517,7 +518,7 @@ tilemap: tilemap.o $(OBJDIR)/objects.o $(OBJDIR)/monst.o $(OBJDIR)/drawing.o \ $(CLINK) $(LFLAGS) -o tilemap tilemap.o $(OBJDIR)/objects.o \ $(OBJDIR)/monst.o $(OBJDIR)/drawing.o $(HACKLIB) \ $(LIBS) -../src/tile.c: tilemap +$(SRCDIR)/tile.c: tilemap ./tilemap tiletext.o: ../win/share/tiletext.c $(CONFIG_H) ../win/share/tile.h diff --git a/sys/unix/hints/include/multiw-2.500 b/sys/unix/hints/include/multiw-2.500 index 01f1fb6c1..b25225a66 100644 --- a/sys/unix/hints/include/multiw-2.500 +++ b/sys/unix/hints/include/multiw-2.500 @@ -80,7 +80,6 @@ WINSRC = WINOBJ0 = SND_CFLAGS= XTRASRC = -XTRAOBJ = ifdef WANT_WIN_TTY WINSRC += $(WINTTYSRC) @@ -105,7 +104,6 @@ WINCFLAGS += -DX11_GRAPHICS WINSRC += $(WIINX11SRC) WINOBJ0 += $(WINX11OBJ) XTRASRC += tile.c -XTRAOBJ += $(TARGETPFX)tile.o endif ifndef WANT_WIN_QT @@ -157,7 +155,6 @@ HAVE_SNDLIB = 1 NEEDS_SND_USERSOUNDS = 1 NEEDS_SND_SEAUTOMAP = 1 XTRASRC += tile.c -XTRAOBJ += $(TARGETPFX)tile.o # ifndef CPLUSPLUS_NEEDED CPLUSPLUS_NEEDED = 1 diff --git a/sys/unix/hints/linux.500 b/sys/unix/hints/linux.500 index d4b095e25..4fb8b453f 100755 --- a/sys/unix/hints/linux.500 +++ b/sys/unix/hints/linux.500 @@ -275,6 +275,7 @@ ifdef WANT_WIN_X11 USE_XPM=1 WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 VARDATND0 += x11tiles NetHack.ad pet_mark.xbm pilemark.xbm +GENTILEOFILE = $(SRCDIR)/tile.o # -x: if built without dlb, some versions of mkfontdir think *.lev are fonts POSTINSTALL += bdftopcf win/X11/nh10.bdf > $(HACKDIR)/nh10.pcf; ( cd $(HACKDIR); mkfontdir -x .lev ); # separate from CFLAGS so that we don't pass it to every file @@ -365,7 +366,7 @@ LINK = $(CC) endif # !WANT_WIN_QT # prevent duplicate tile.o in WINOBJ -WINOBJ = $(WINOBJ0) $(sort $(XTRAOBJ)) +WINOBJ = $(WINOBJ0) # prevent duplicates in VARDATND if both X11 and Qt are being supported VARDATND += $(sort $(VARDATND0)) diff --git a/sys/unix/hints/macOS.500 b/sys/unix/hints/macOS.500 index 93af6954d..ebf78788a 100755 --- a/sys/unix/hints/macOS.500 +++ b/sys/unix/hints/macOS.500 @@ -314,7 +314,7 @@ LINK=$(CC) endif # !WANT_WIN_QT # prevent duplicate tile.o in WINOBJ -WINOBJ = $(WINOBJ0) $(sort $(XTRAOBJ)) +WINOBJ = $(WINOBJ0) # prevent duplicates in VARDATND if both X11 and Qt are being supported VARDATND += $(sort $(VARDATND0)) diff --git a/sys/unix/mkmkfile.sh b/sys/unix/mkmkfile.sh index 01cdb9b72..82e8b91d0 100755 --- a/sys/unix/mkmkfile.sh +++ b/sys/unix/mkmkfile.sh @@ -10,6 +10,7 @@ # $3 install path # $4 hints file (path) # $5 hints file (as given by user) +# $6 gnu or bsd echo "#" > $3 echo "# This file is generated automatically. Do not edit." >> $3 @@ -20,6 +21,37 @@ echo "" >> $3 echo "HINTSFILE=$5" >> $3 echo "" >> $3 +echo "###" >> $3 +echo "### add check for builder include file $6-style" >> $3 +echo "###" >> $3 +echo "" >> $3 +BUILDERINCL=make.prefs +echo "" >> $3 +case "$6" in + "gnu") + echo "ifdef MAKEFILE_TOP" >> $3 + echo "NHSROOT=." >> $3 + echo "else" >> $3 + echo "NHSROOT=.." >> $3 + echo "endif" >> $3 + echo "ifneq (\"\$(wildcard \$(NHSROOT)/$BUILDERINCL))\",\"\")" >> $3 + echo "-include \$(NHSROOT)/$BUILDERINCL" >> $3 + echo "endif" >> $3 + ;; + "bsd") + echo ".ifdef MAKEFILE_TOP" >> $3 + echo "NHSROOT=." >> $3 + echo ".else" >> $3 + echo "NHSROOT=.." >> $3 + echo ".endif" >> $3 + echo ".if exists(\$(NHSROOT)/$BUILDERINCL)" >> $3 + echo ".include \"\$(NHSROOT)/$BUILDERINCL\"" >> $3 + echo ".endif" >> $3 + ;; + *) +esac +echo "" >> $3 + echo "###" >> $3 echo "### Start $5 PRE" >> $3 echo "###" >> $3 diff --git a/sys/unix/setup.sh b/sys/unix/setup.sh index 7f5b504e1..6731a12d2 100755 --- a/sys/unix/setup.sh +++ b/sys/unix/setup.sh @@ -31,8 +31,15 @@ x) hints=/dev/null ;; esac -/bin/sh ./mkmkfile.sh Makefile.top TOP ../../Makefile $hints $hfile -/bin/sh ./mkmkfile.sh Makefile.dat DAT ../../dat/Makefile $hints $hfile -/bin/sh ./mkmkfile.sh Makefile.doc DOC ../../doc/Makefile $hints $hfile -/bin/sh ./mkmkfile.sh Makefile.src SRC ../../src/Makefile $hints $hfile -/bin/sh ./mkmkfile.sh Makefile.utl UTL ../../util/Makefile $hints $hfile +# is make gnu or bsd? +if make --version 2>/dev/null | grep -q "GNU"; then + whichmake=gnu +else + whichmake=bsd +fi + +/bin/sh ./mkmkfile.sh Makefile.top TOP ../../Makefile $hints $hfile $whichmake +/bin/sh ./mkmkfile.sh Makefile.dat DAT ../../dat/Makefile $hints $hfile $whichmake +/bin/sh ./mkmkfile.sh Makefile.doc DOC ../../doc/Makefile $hints $hfile $whichmake +/bin/sh ./mkmkfile.sh Makefile.src SRC ../../src/Makefile $hints $hfile $whichmake +/bin/sh ./mkmkfile.sh Makefile.utl UTL ../../util/Makefile $hints $hfile $whichmake