# NetHack 3.7 linux.370 $NHDT-Date: 1693519390 2023/08/31 22:03:10 $ $NHDT-Branch: keni-crashweb2 $:$NHDT-Revision: 1.61 $ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2007. # NetHack may be freely redistributed. See license for details. # #--------------------------------------------------------------------- # Linux hints file with support for multiple window ports (interfaces) # Tested on: # - Ubuntu focal # # If this doesn't work for your distribution, consider making a new # hints file for it, rather than changing this one. # And let us know about it. # #-PRE # linux.370 hints file provides a single-user build for Linux (such # as Ubuntu focal). # note: '#-INCLUDE' is not just a comment # multiw-1.370 contains sections 1 to 2 #-INCLUDE multiw-1.370 HINTSVERSION := 370 ifdef MAKEFILE_TOP ifeq ($(MAKELEVEL),0) PRECHECK+=checkmakefiles # all files included from this hints file get listed # in HINTSINCLNAMES (without suffix and without a path) HINTSINCLNAMES := compiler cross-pre1 cross-pre2 cross-post \ gbdates-pre gbdates-post \ multiw-1 multiw-2 misc \ multisnd1-pre multisnd2-pre multisnd-post HINTSINCLFILES := $(addsuffix .$(HINTSVERSION), $(HINTSINCLNAMES)) endif endif ifndef LIBXPM LIBXPM= -L/opt/X11/lib -lXpm endif #4. Other GAMEUID = $(USER) GAMEGRP = games # This gives better backtraces by making all core functions global; this # works around a limitation in glibc's backtrace(3) function. # This will be turned on automatically with CRASHREPROT. # 1 to enable, 0 to disable USE_NOSTATICFN = 1 # If you want CRASHREPORT but absolutely don't want NOSTATICFN, define this: #USE_NONOSTATICFN = 1 #----------------------------------------------------------------------------- #-INCLUDE cross-pre1.370 #----------------------------------------------------------------------------- # You shouldn't need to change anything below here (in the hints file; if # you're reading this in Makefile augmented by hints, that may not be true). # #-INCLUDE multiw-2.370 # compiler.370 contains compiler detection and adjustments common # to both linux and macOS #-INCLUDE compiler.370 ifdef WANT_WIN_QT ifdef WANT_WIN_QT5 QTDIR=/usr endif # WANT_WIN_QT5 ifdef WANT_WIN_QT6 #if your Qt6 is elsewhere, change this to match QTDIR=/usr/local/qt6 ifeq "$(GPPGTEQ14)" "1" CCXXFLAGS += -Wno-template-id-cdtor endif # g++ greater than or equal to 14 endif # WANT_WIN_QT6 endif # WANT_WIN_QT # misc.370 must come after compiler.370 # and after QTDIR is defined. # #-INCLUDE misc.370 ifeq "$(USE_ASAN)" "1" CFLAGS+=-fsanitize=address LFLAGS+=-fsanitize=address endif ifeq "$(USE_UBSAN)" "1" CFLAGS+=-fsanitize=undefined LFLAGS+=-fsanitize=undefined endif ifeq "$(USE_CURSESLIB)" "1" # default CURSESLIB = -lncurses -ltinfo # If CURSES_UNICODE is defined, we need ncursesw. # Without CURSES_UNICODE the following simpler setting works. # CURSESLIB = -lncurses -ltinfo ifdef MAKEFILE_SRC comma:=, NCURSES_LFLAGS = $(shell pkg-config ncursesw --libs) NCURSES_CFLAGS = $(shell pkg-config ncursesw --cflags) ifeq (,$(findstring ncursesw, $(NCURSES_LFLAGS))) ifeq (,$(findstring ncurses, $(NCURSES_LFLAGS))) #this indicates that pkg-config itself was unavailable NCURSES_LFLAGS = -lncursesw -ltinfo endif endif #$(info $(NCURSES_LFLAGS)) ifeq (,$(findstring ncursesw, $(NCURSES_LFLAGS))) HAVE_NCURSESW=0 else HAVE_NCURSESW=1 endif #$(info $(NCURSES_LFLAGS)) #$(info HAVE_NCURSESW=$(HAVE_NCURSESW)) ifeq "$(HAVE_NCURSESW)" "1" # remove unnecessary -Wl,-Bsymbolic-functions if present ifneq (,$(findstring -Wl$(comma)-Bsymbolic-functions, $(NCURSES_LFLAGS))) CURSESLIB = $(subst -Wl$(comma)-Bsymbolic-functions,,$(NCURSES_LFLAGS)) else CURSESLIB = $(NCURSES_LFLAGS) endif endif #HAVE_NCURSESW #$(info $(CURSESLIB)) ifeq (,$(findstring ncursesw, $(NCURSES_LFLAGS))) ifeq (,$(findstring ncurses, $(NCURSES_LFLAGS))) #this indicates that pkg-config itself was unavailable NOPKGCONFIG = 1 endif #ncurses not in NCURSES_LFLAGS? endif #ncursesw not in NCURSES_LFLAGS? # ifeq "$(NOPKGCONFIG)" "1" NCURSES_CFLAGS = -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 ifeq "$(HAVE_NCURSESW)" "1" ifeq (,$(wildcard /usr/include/ncursesw/curses.h)) NCURSES_CFLAGS += -I/usr/include else NCURSES_CFLAGS += -I/usr/include/ncursesw endif NCURSES_LFLAGS = -lncursesw -ltinfo else #HAVE_NCURSESW ifeq (,$(wildcard /usr/include/ncurses/curses.h)) NCURSES_CFLAGS += -I/usr/include else NCURSES_CFLAGS += -I/usr/include/ncurses endif NCURSES_LFLAGS = -lncurses -ltinfo endif #HAVE_NCURSESW endif #NOPKGCONFIG endif #MAKEFILE_SRC endif #USE_CURSESLIB # NetHack sources control NHCFLAGS+=-DDLB NHCFLAGS+=-DHACKDIR=\"$(HACKDIR)\" NHCFLAGS+=-DDEFAULT_WINDOW_SYS=\"$(WANT_DEFAULT)\" NHCFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE NHCFLAGS+=-DTIMED_DELAY NHCFLAGS+=-DDUMPLOG NHCFLAGS+=-DCONFIG_ERROR_SECURE=FALSE #NHCFLAGS+=-DGREPPATH=\"/usr/bin/grep\" NHCFLAGS+=-DCOMPRESS=\"/bin/gzip\" -DCOMPRESS_EXTENSION=\".gz\" #NHCFLAGS+=-DNOMAIL #NHCFLAGS+=-DEXTRA_SANITY_CHECKS NHCFLAGS+=-DEDIT_GETLIN NHCFLAGS+=-DSCORE_ON_BOTL #NHCFLAGS+=-DMSGHANDLER NHCFLAGS+=-DTTY_TILES_ESCCODES #NHCFLAGS+=-DTTY_SOUND_ESCCODES #NHCFLAGS+=-DNO_CHRONICLE #NHCFLAGS+=-DLIVELOG NHCFLAGS+=-DDUMPLOG NHCFLAGS+=-DDUMPHTML NHCFLAGS+=-DUSE_GENERAL_ALTAR_COLORS #NHCFLAGS+=-DCHANGE_COLOR NHCFLAGS+=-DSELF_RECOVER ifdef WANT_WIN_CURSES NHCFLAGS+=$(NCURSES_CFLAGS) ifeq "$(HAVE_NCURSESW)" "1" NHCFLAGS+=-DCURSES_UNICODE else ifdef MAKEFILE_SRC $(info Attention: CURSES_UNICODE is not being defined without ncursesw) endif #MAKEFILE_SRC endif #HAVE_NCURSESW endif #WANT_WIN_CURSES # #-INCLUDE multisnd1-pre.370 # ifeq "$(CCISCLANG)" "1" # clang-specific starts # clang-specific ends else # gcc-specific starts LIBCFLAGS+=-DSIG_RET_TYPE=__sighandler_t # gcc-specific ends endif # WINCFLAGS set from multiw-2.370 # SNDCFLAGS set from multisnd-pre.370 CFLAGS+= $(WINCFLAGS) CFLAGS+= $(SNDCFLAGS) CFLAGS+= $(NHCFLAGS) CFLAGS+= $(LIBCFLAGS) # WINCFLAGS set from multiw-2.370 # SNDCFLAGS set from multisnd-pre.370 CCXXFLAGS+= $(WINCFLAGS) CCXXFLAGS+= $(SNDCFLAGS) CCXXFLAGS+= $(NHCFLAGS) CCXXFLAGS+= $(LIBCFLAGS) VARDATND = VARDATND0 = #ifdef WANT_WIN_CHAIN #HINTSRC=$(CHAINSRC) #HINTOBJ=$(CHAINOBJ) #endif # WANT_WIN_CHAIN ifdef MAKEFILE_SRC ifdef CURSESLIB WINLIB += $(CURSESLIB) endif #CURSESLIB endif #MAKEFILE_SRC ifdef WANT_WIN_X11 USE_XPM=1 WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 VARDATND0 += x11tiles NetHack.ad pet_mark.xbm pilemark.xbm # -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 X11CFLAGS = -I/opt/X11/include # avoid repeated complaints about _X_NONNULL(args...) in X11CFLAGS += -Wno-variadic-macros ifdef USE_XPM CFLAGS += -DUSE_XPM WINX11LIB += -lXpm VARDATND0 += rip.xpm endif WINLIB += $(WINX11LIB) LFLAGS+=-L/opt/X11/lib endif # WANT_WIN_X11 ifdef WANT_WIN_QT LINK = $(CXX) ifdef WANT_WIN_QT4 QTCXXFLAGS += $(sort $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig pkg-config QtGui --cflags)) -DQT_NO_SOUND=1 WINLIB += $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig pkg-config QtGui --libs) endif # WANT_WIN_QT4 ifdef WANT_WIN_QT5 QTCXXFLAGS += $(sort $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig pkg-config Qt5Gui Qt5Widgets Qt5Multimedia --cflags)) WINLIB += $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig pkg-config Qt5Gui Qt5Widgets Qt5Multimedia --libs) endif # WANT_WIN_QT5 ifdef WANT_WIN_QT6 ifdef QT6MANUAL # Try some likely spots for a self-built Qt6. # You'll have to change these manually before using the hints file # if they don't match the installed location on your system. ifneq "$(HOSTTYPE)" "" QTHOST=$(HOSTTYPE) else QTHOST=x86_64 endif QTTOP=/usr/include/$(HOSTTYPE)-linux-gnu/qt6 ifneq ($(wildcard $(QTTOP)/*),) #we don't set QTLOCATED=1 for this QTINCDIR=/usr/include/$(QTHOST)-linux-gnu/qt6 QTLIBDIR=/usr/lib/$(QTHOST)-linux.gnu QTCXXFLAGS += -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB QTCXXFLAGS += -I$(QTINCDIR)/QtWidgets -I$(QTINCDIR) -I$(QTINCDIR)/QtMultimedia QTCXXFLAGS += -I$(QTINCDIR)/QtNetwork -I$(QTINCDIR)/QtGui -I$(QTINCDIR)/QtCore WINLIB += -L$(QTLIBDIR) -lQt6Widgets -lQt6Multimedia -lQt6Network -lQt6Gui -lQt6Core MOCPATH = /usr/lib/qt6/libexec/moc #/usr/lib/x86_64-linux-gnu/libQt6EglFSDeviceIntegration.so endif # QTTOP/* ifndef QTINCDIR ifneq ($(wildcard /usr/local/Qt6/*),) QTDIR=/usr/local/Qt6 QTLOCATED=1 endif # wildcard /usr/local/Qt6 ifneq ($(wildcard /usr/local/qt6/*),) QTDIR=/usr/local/qt6 QTLOCATED=1 endif # wildcard /usr/local/qt6 endif # !QTINCDIR ifdef QTLOCATED QTCXXFLAGS += -I$(QTDIR)/include/QtCore QTCXXFLAGS += -I$(QTDIR)/include/QtGui QTCXXFLAGS += -I$(QTDIR)/include/QtMultimedia QTCXXFLAGS += -I$(QTDIR)/include/QtWidgets MOCPATH = $(QTDIR)/libexec/moc WINLIB += -L$(QTDIR)/lib -lQt6Widgets -lQt6Multimedia -lQt6Network -lQt6Gui -lQt6Core endif # QTLOCATED else # !QT6MANUAL MOCDIR = $(shell pkg-config Qt6Gui --variable=libexecdir) ifneq ($(wildcard $(MOCDIR)/*),) MOCPATH = $(MOCDIR)/moc else MOCPATH = /usr/lib/qt6/libexec/moc endif # MOCDIR QTCXXFLAGS += $(sort $(shell pkg-config Qt6Gui Qt6Widgets Qt6Multimedia --cflags)) WINLIB += $(shell pkg-config Qt6Gui Qt6Widgets Qt6Multimedia --libs) endif # QT6MANUAL endif # WANT_WIN_QT6 ifndef QTDIR $(error QTDIR not defined in the environment or Makefile) endif # QTDIR # XXX if /Developer/qt exists and QTDIR not set, use that # XXX make sure QTDIR points to something reasonable QTCXXFLAGS += -fPIC POSTINSTALL+= bdftopcf win/X11/nh10.bdf > $(INSTDIR)/nh10.pcf; \ ( cd $(INSTDIR); mkfontdir -x .lev ); VARDATND0 += nhtiles.bmp rip.xpm nhsplash.xpm else # WANT_WIN_QT LINK = $(CC) endif # !WANT_WIN_QT # prevent duplicate tile.o in WINOBJ WINOBJ = $(WINOBJ0) $(sort $(XTRAOBJ)) # prevent duplicates in VARDATND if both X11 and Qt are being supported VARDATND += $(sort $(VARDATND0)) GIT_HASH := $(shell echo `git rev-parse --verify HEAD` 2>&1) GIT_BRANCH := $(shell echo `git rev-parse --abbrev-ref HEAD` 2>&1) GIT_PREFIX := $(shell echo `git config nethack.substprefix` 2>&1) ifdef GIT_HASH GITHASH = -DNETHACK_GIT_SHA=\"$(GIT_HASH)\" endif ifdef GIT_BRANCH GITBRANCH = -DNETHACK_GIT_BRANCH=\"$(GIT_BRANCH)\" endif ifdef GIT_PREFIX GITPREFIX = -DNETHACK_GIT_PREFIX=\"$(GIT_PREFIX)\" endif ifdef WANT_LIBNH CFLAGS += -DSHIM_GRAPHICS -DNOTTYGRAPHICS -DNOSHELL -DLIBNH -fpic LIBNHSYSSRC = ../sys/libnh/libnhmain.c \ ../sys/share/ioctl.c ../sys/share/unixtty.c \ ../sys/unix/unixunix.c ../sys/unix/unixres.c \ ../win/shim/winshim.c LIBNHSYSOBJ = $(TARGETPFX)libnhmain.o $(TARGETPFX)ioctl.o \ $(TARGETPFX)unixtty.o $(TARGETPFX)unixunix.o \ $(TARGETPFX)unixres.o $(TARGETPFX)winshim.o \ $(TARGETPFX)date.o #don't bother building the game executable as it will fail #without winshim override GAME= MOREALL += ( cd src ; $(MAKE) pregame ; $(MAKE) $(TARGETPFX)libnh.a ) endif # WANT_LIBNH SYSCONFCREATE = cp sys/unix/sysconf $(INSTDIR)/sysconf SYSCONFINSTALL = $(SYSCONFCREATE) && \ $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf && \ $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf && \ chmod $(VARFILEPERM) $(INSTDIR)/sysconf; SYSCONFENSURE = (if ! test -f $(INSTDIR)/sysconf ; then \ $(SYSCONFCREATE) && \ $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf && \ $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf && \ chmod $(VARFILEPERM) $(INSTDIR)/sysconf; fi ); ifdef WANT_SOURCE_INSTALL PREFIX=$(abspath $(NHSROOT)) #SHELLDIR= HACKDIR=$(PREFIX)/playground GAMEPERM = 0700 VARFILEPERM = 0600 VARDIRPERM = 0700 CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE MOREALL=$(MAKE) install else #!WANT_SOURCE_INSTALL #PREFIX=/usr PREFIX=$(wildcard ~)/nh/install HACKDIR=$(PREFIX)/games/lib/nethackdir SHELLDIR = $(PREFIX)/games VARDIRPERM = 0755 VARFILEPERM = 0600 GAMEPERM = 0755 endif #?WANT_SOURCE_INSTALL INSTDIR=$(HACKDIR) VARDIR = $(HACKDIR) ifdef MAKEFILE_TOP TESTGDBPATH=/usr/bin/gdb POSTINSTALL+= test -f $(TESTGDBPATH) || \ sed -i -e 's;^GDBPATH=/usr/bin/gdb;\#GDBPATH=/usr/bin/gdb;' \ -e 's;PANICTRACE_GDB=1;PANICTRACE_GDB=0;' $(INSTDIR)/sysconf; POSTUPDATE+= test -f $(TESTGDBPATH) || \ sed -i -e 's;^GDBPATH=/usr/bin/gdb;\#GDBPATH=/usr/bin/gdb;' \ -e 's;PANICTRACE_GDB=1;PANICTRACE_GDB=0;' $(INSTDIR)/sysconf; endif #MAKEFILE_TOP ifeq '$(USE_NONOSTATICFN)' '1' CFLAGS += -DNONOSTATICFN else ifeq '$(USE_NOSTATICFN)' '1' CFLAGS += -DNOSTATICFN endif endif # Lua # when building liblua.a, avoid warning that use of tmpnam() should be # replaced by mkstemp(); the lua code doesn't use nethack's config.h so # this needs to be passed via make rather than defined in unixconf.h SYSCFLAGS=-DLUA_USE_LINUX ifdef GITSUBMODULES LUAFLAGS=CC='$(CC)' SYSCFLAGS='$(SYSCFLAGS)' ifneq "$(CCISCLANG)" "" # clang LUAFLAGS +=CWARNGCC='' endif # clang override LUAHEADERS = submodules/lua override LUA2NHTOP = ../.. override LUAMAKEFLAGS=$(LUAFLAGS) endif # GITSUBMODULES DLLIB = -ldl # Only needed for GLIBC stack trace: LFLAGS+=-rdynamic # if TTY_TILES_ESCCODES WINSRC += tile.c WINOBJ += tile.o # endif CHOWN=true CHGRP=true # manpages directory MANDIR=/usr/share/man/man6 # #-INCLUDE cross-pre2.370 # # #-INCLUDE gbdates-pre.370 # # #-INCLUDE multisnd2-pre.370 # # #-INCLUDE response.370 # #-POST # #-INCLUDE gbdates-post.370 # # #-INCLUDE multisnd-post.370 # ifdef MAKEFILE_TOP ifeq ($(MAKELEVEL),0) .PHONY: checkmakefiles checkmakefiles: @$(MAKE) -f sys/unix/Makefile.check \ HINTSFILE="$(HINTSFILE)" HINTSINCLFILES="$(HINTSINCLFILES)" endif endif ifdef WANT_LIBNH $(TARGETPFX)libnh.a: $(HOBJ) $(LIBNHSYSOBJ) ../lib/lua/liblua-$(LUA_VERSION).a $(AR) rcs $@ $(HOBJ) $(LIBNHSYSOBJ) ../lib/lua/liblua-$(LUA_VERSION).a @echo "$@ built." $(TARGETPFX)libnhmain.o : ../sys/libnh/libnhmain.c $(HACK_H) $(CC) $(CFLAGS) -c -o$@ $< #dependency tool added this to Makefile.src #$(TARGETPFX)winshim.o : ../win/shim/winshim.c $(HACK_H) # $(CC) $(CFLAGS) -c -o$@ $< endif # WANT_LIBNH # #-INCLUDE cross-post.370 #