From ebed555f0ab72423c87e8593353dffecf6e5a1e3 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sun, 19 Apr 2026 08:33:57 -0700 Subject: [PATCH] streamhack hints file --- sys/unix/hints/streamhack | 492 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 492 insertions(+) create mode 100755 sys/unix/hints/streamhack diff --git a/sys/unix/hints/streamhack b/sys/unix/hints/streamhack new file mode 100755 index 000000000..b41810f5e --- /dev/null +++ b/sys/unix/hints/streamhack @@ -0,0 +1,492 @@ +# 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 +# +