From bdbf8f19cc4d6993a2b2bc2efc2fbe4201da4e41 Mon Sep 17 00:00:00 2001 From: nhmall Date: Thu, 13 Aug 2020 11:34:23 -0400 Subject: [PATCH] update some hints mechanics for 2020 Allow sharing of common code between different hints files through use of: #-INCLUDE new folder created: sys/unix/hints/include new hints include files: sys/unix/hints/include/multiw-1.2020 sys/unix/hints/include/multiw-2.2020 structure the early parts of sys/unix/hints/linux.2020 and sys/unix/hints/macOS.2020 consistently, and utilize #-INCLUDE multiw-1.2020 and #-INCLUDE multiw-2.2020 in them. That will allow the Makefile lines that they contain to be maintained in a single place. --- sys/unix/hints/include/multiw-1.2020 | 37 ++++ sys/unix/hints/include/multiw-2.2020 | 108 +++++++++++ sys/unix/hints/linux.2020 | 192 ++++++------------- sys/unix/hints/macOS.2020 | 268 ++++++++++----------------- sys/unix/mkmkfile.sh | 5 +- 5 files changed, 306 insertions(+), 304 deletions(-) create mode 100644 sys/unix/hints/include/multiw-1.2020 create mode 100644 sys/unix/hints/include/multiw-2.2020 diff --git a/sys/unix/hints/include/multiw-1.2020 b/sys/unix/hints/include/multiw-1.2020 new file mode 100644 index 000000000..3fb550882 --- /dev/null +++ b/sys/unix/hints/include/multiw-1.2020 @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# NetHack 3.7 multiw-1.2020 $NHDT-Date: 1597332785 2020/08/13 15:33:05 $ $NHDT-Branch: NetHack-3.7 $ + +# 1. Which windowing interface(s) should be included in this binary? +# One or more of these can be manually uncommented and/or can be specified +# on the 'make' command line. If none are enabled, tty will be used. +#WANT_WIN_TTY=1 +#WANT_WIN_CURSES=1 +#WANT_WIN_X11=1 +#WANT_WIN_QT=1 + +# 2. What is the default window system? +# Exactly one of these can be manually uncommented and/or can be specified +# on the 'make' command line. If none is enabled, the first among +# WANT_WIN_{tty,curses,X11,Qt} that is enabled will become default. +#WANT_DEFAULT=tty +#WANT_DEFAULT=curses +#WANT_DEFAULT=Qt +#WANT_DEFAULT=X11 + +# 3. compiler detection or optional override +CCISCLANG := $(shell echo `$(CC) --version` | grep clang) +ifeq "$(CCISCLANG)" "" +CXX=g++ -std=gnu++11 +else +CXX=clang++ -std=gnu++11 +endif +# if you want to override the compiler detection just carried out +# uncomment one of the following pairs as desired. +#CC= gcc +#CXX= g++ -std-gnu++11 +# +#CC= clang +#CXX=clang++ -std=gnu++11 + +#end of multiw-1.2020 +#------------------------------------------------------------------------------ diff --git a/sys/unix/hints/include/multiw-2.2020 b/sys/unix/hints/include/multiw-2.2020 new file mode 100644 index 000000000..ad4028aed --- /dev/null +++ b/sys/unix/hints/include/multiw-2.2020 @@ -0,0 +1,108 @@ +#------------------------------------------------------------------------------ +# NetHack 3.7 multiw-2.2020 $NHDT-Date: 1597332785 2020/08/13 15:33:05 $ $NHDT-Branch: NetHack-3.7 $ +# +# Sorts out support for multiple window ports (interfaces) to included in the build. +# +# Included from: +# hints/linux.2020 +# hints/macOS.2020 +# +# The following will be set appropriately following this: +# - WANT_WIN_XXX (at least one will be set; default is TTY) +# - WANT_DEFAULT (set to match one of the enabled WANT_WIN_XXX) +# - WINCFLAGS +# - WINSRC +# - WINOBJ0 +#--- +# User selections could be specified as combinations of any of the following: +# WIN_WANT_TTY=1, WIN_WANT_CURSES=1, WIN_WANT_QT=1, WIN_WANT_X11=1 +# The selections will all be linked into the same binary. +# +# Assuming you have the prerequisite packages mentioned above, you can +# specify, right on the make command line, which window ports (or interfaces) +# to include in your build. Doing it via the make command line means that won't +# have to edit the Makefile. +# +# make WANT_WIN_QT=1 WANT_WIN_X11=1 WANT_WIN_CURSES=1 WANT_WIN_TTY=1 install +# +# Add WANT_DEFAULT=Qt (or other interface) if you want nethack to use +# something other than tty as the default interface. +# + +# Make sure that at least one interface is enabled. +ifndef WANT_WIN_ALL +ifndef WANT_WIN_TTY +ifndef WANT_WIN_CURSES +ifndef WANT_WIN_X11 +ifndef WANT_WIN_QT +WANT_WIN_TTY=1 +endif +endif +endif +endif +endif + +ifdef WANT_WIN_ALL +WANT_WIN_TTY=1 +WANT_WIN_CURSES=1 +WANT_WIN_X11=1 +WANT_WIN_QT=1 +endif + + +# Make sure that a default interface is specified; this doesn't guarantee +# sanity for something like 'make WANT_WIN_CURSES=1 WANT_DEFAULT=X11' but +# 'makedefs -v' would notice, complain, and quit causing 'make' to quit. +ifndef WANT_DEFAULT +# pick the first one enabled among { tty, curses, X11, Qt } +ifdef WANT_WIN_TTY +WANT_DEFAULT=tty +else +ifdef WANT_WIN_CURSES +WANT_DEFAULT=curses +else +ifdef WANT_WIN_X11 +WANT_DEFAULT=X11 +else +ifdef WANT_WIN_QT +WANT_DEFAULT=Qt +else +# ? shouldn't be able to get here... +endif +endif +endif +endif +endif + +WINCFLAGS= +WINSRC = +WINOBJ0 = + +ifdef WANT_WIN_TTY +WINSRC += $(WINTTYSRC) +WINOBJ0 += $(WINTTYOBJ) +else +WINCFLAGS += -DNOTTYGRAPHICS +endif + +ifdef WANT_WIN_CURSES +WINCFLAGS += -DCURSES_GRAPHICS +WINSRC += $(WINCURSESSRC) +WINOBJ0 += $(WINCURSESOBJ) +endif + +ifdef WANT_WIN_X11 +WINCFLAGS += -DX11_GRAPHICS +WINSRC += $(WIINX11SRC) +WINOBJ0 += $(WINX11OBJ) +endif + +ifdef WANT_WIN_QT +WINCFLAGS += -DQT_GRAPHICS +WINSRC += $(WINQTSRC) +WINOBJ0 += $(WINQTOBJ) +endif + +#end of hints/include/multiw-2.2020 +#------------------------------------------------------------------------------ + diff --git a/sys/unix/hints/linux.2020 b/sys/unix/hints/linux.2020 index 96db2412a..a633fec4f 100755 --- a/sys/unix/hints/linux.2020 +++ b/sys/unix/hints/linux.2020 @@ -1,137 +1,51 @@ -# -# NetHack 3.7 linux.2020 $NHDT-Date: 1597072358 2020/08/10 15:12:38 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# NetHack 3.7 linux.2020 $NHDT-Date: 1597332698 2020/08/13 15:31:38 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2007. # NetHack may be freely redistributed. See license for details. # -#-PRE +#--------------------------------------------------------------------- # Linux hints file with support for multiple window ports (interfaces) +# Tested on: +# - Ubuntu focal # -# This hints file supports tty, curses, x11, and Qt in the same binary, -# but: +# 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. # -# - For x11 support, you'll need to obtain and install x11 development libraries. -# For example, on Ubuntu 20.04 (as of August 2020): -# sudo apt-get install libx11-dev -# sudo apt-get install libmotif-dev -# sudo apt-get install libxaw7-dev -# sudo apt install xfonts-utils -# (That last one is for bdftopcf and mkfontdir utils) -# -# - For Qt support, you'll need to obtain and install Qt. -# For example, on Ubuntu 20.04 (as of August 2020): -# sudo apt-get install qtbase5-dev -# sudo apt-get install qtmultimedia5-dev -# -# Another odd note about Qt on Linux is that if you find you are getting -# the following error trying to run NetHack after you build it: -# "error while loading shared libraries: libQt5Core.so.5: -# cannot open shared object file: No such file or directory" -# you may have to fix that (one-time only) by the following command: -# sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 -# -# - For curses support, you may need to obtain and install the -# ncurses development libraries if they aren't already installed -# with your distribution. They seem to be there already with Ubuntu 20.04, but -# for example, if you needed to install ncurses: -# sudo apt-get install libncurses-dev -# -# - tty support shouldn't require any prerequisite additional packages. -# -# Assuming you have the prerequisite packages mentioned above, you can -# specify, right on the make command line, which window ports (or interfaces) -# to include in your build. Doing it via the make command line means that won't -# have to edit the Makefile. -# -# make WANT_WIN_QT=1 WANT_WIN_X11=1 WANT_WIN_CURSES=1 WANT_WIN_TTY=1 install -# -# Add WANT_DEFAULT=Qt (or other interface) if you want nethack to use -# something other than tty as the default interface. -# -# 1. Which windowing interface(s) should be included in this binary? -# One or more of these can be manually uncommented and/or can be specified -# on the 'make' command line. If none are enabled, tty will be used. -#WANT_WIN_TTY=1 -#WANT_WIN_CURSES=1 -#WANT_WIN_X11=1 -#WANT_WIN_QT=1 -# 1a. What is the default window system? -# Exactly one of these can be manually uncommented and/or can be specified -# on the 'make' command line. If none is enabled, the first among -# WANT_WIN_{tty,curses,X11,Qt} that is enabled will become default. -#WANT_DEFAULT=tty -#WANT_DEFAULT=curses -#WANT_DEFAULT=Qt -#WANT_DEFAULT=X11 +#-PRE +# linux.2020 hints file provides a single-user build for Linux (such +# as Ubuntu focal). +#-INCLUDE multiw-1.2020 + +# 4. If you set WANT_WIN_QT, you need to +# A) set QTDIR either here or in the environment to point to the Qt5 +# Library installation root. +# B) set XPMLIB to point to the Xpm library +ifndef WANT_WIN_QT +ifdef WANT_WIN_ALL +WANT_WIN_QT=1 +endif +endif ifdef WANT_WIN_QT QTDIR=/usr -endif # WANT_WIN_QT +endif # WANT_WIN_QT ifndef LIBXPM LIBXPM= -L/opt/X11/lib -lXpm endif -# 2. Not customizable in this linux.2020 hints file, which provides -# a single-user build for Linux (such as Ubuntu focal). +#5. Other GAMEUID = $(USER) GAMEGRP = games -# +#----------------------------------------------------------------------------- # 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). # -# Make sure that at least one interface is enabled. -ifndef WANT_WIN_TTY -ifndef WANT_WIN_CURSES -ifndef WANT_WIN_X11 -ifndef WANT_WIN_QT -WANT_WIN_TTY=1 -endif -endif -endif -endif - -# Make sure that a default interface is specified; this doesn't guarantee -# sanity for something like 'make WANT_WIN_CURSES=1 WANT_DEFAULT=X11' but -# 'makedefs -v' would notice, complain, and quit causing 'make' to quit. -ifndef WANT_DEFAULT -# pick the first one enabled among { tty, curses, X11, Qt } -ifdef WANT_WIN_TTY -WANT_DEFAULT=tty -else -ifdef WANT_WIN_CURSES -WANT_DEFAULT=curses -else -ifdef WANT_WIN_X11 -WANT_DEFAULT=X11 -else -ifdef WANT_WIN_QT -WANT_DEFAULT=Qt -else -# ? shouldn't be able to get here... -endif -endif -endif -endif -endif - -# compiler detection -CCISCLANG := $(shell echo `$(CC) --version` | grep clang) -ifeq "$(CCISCLANG)" "" -CXX=g++ -std=gnu++11 -else -CXX=clang++ -std=gnu++11 -endif - -ifdef WANT_WIN_QT -# Qt5 requires C++11 -LINK = $(CXX) -#MOC = moc -else -LINK = $(CC) -endif +#-INCLUDE multiw-2.2020 +# XXX -g vs -O should go here, -I../include goes in the makefile CFLAGS=-g -O -I../include -DNOTPARMDECL ifeq "$(CCISCLANG)" "" # get the version of gcc @@ -140,13 +54,26 @@ ifeq "$(GCCGTEQ9)" "1" CFLAGS+=-Wno-format-overflow endif #gcc version greater than or equal to 9 endif #not clang +# As of LLVM build 2336.1.00, this gives dozens of spurious messages, so +# leave it out by default. +#CFLAGS+=-Wunreachable-code +#CFLAGS+=-Wall -Wextra -Wno-missing-field-initializers -Wimplicit \ +# -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings +#CFLAGS+=-DGCC_WARN + +# NetHack sources control CFLAGS+=-DDLB -CFLAGS+=-DCOMPRESS=\"/bin/gzip\" -DCOMPRESS_EXTENSION=\".gz\" +CFLAGS+=-DHACKDIR=\"$(HACKDIR)\" +CFLAGS+=-DDEFAULT_WINDOW_SYS=\"$(WANT_DEFAULT)\" CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE CFLAGS+=-DTIMED_DELAY -CFLAGS+=-DHACKDIR=\"$(HACKDIR)\" CFLAGS+=-DDUMPLOG CFLAGS+=-DCONFIG_ERROR_SECURE=FALSE +#CFLAGS+=-DGREPPATH=\"/usr/bin/grep\" +CFLAGS+=-DCOMPRESS=\"/bin/gzip\" -DCOMPRESS_EXTENSION=\".gz\" +# older binaries use NOCLIPPING, but that disables SIGWINCH +#CFLAGS+=-DNOCLIPPING +#CFLAGS+=-DNOMAIL #CFLAGS+=-DEXTRA_SANITY_CHECKS #CFLAGS+=-DEDIT_GETLIN #CFLAGS+=-DSCORE_ON_BOTL @@ -154,25 +81,22 @@ CFLAGS+=-DCONFIG_ERROR_SECURE=FALSE #CFLAGS+=-DTTY_TILES_ESCCODES #CFLAGS+=-DTTY_SOUND_ESCCODES -WINSRC = -WINOBJ0 = -WINLIB = +CFLAGS+= $(WINCFLAGS) #from multiwin.2020 + VARDATND = VARDATND0 = CURSESLIB = +#ifdef WANT_WIN_CHAIN +#HINTSRC=$(CHAINSRC) +#HINTOBJ=$(CHAINOBJ) +#endif # WANT_WIN_CHAIN + ifdef WANT_WIN_TTY -WINSRC += $(WINTTYSRC) -WINOBJ0 += $(WINTTYOBJ) CURSESLIB = -lncurses -ltinfo -else # !WANT_WIN_TTY -CFLAGS += -DNOTTYGRAPHICS -endif # !WANT_WIN_TTY +endif ifdef WANT_WIN_CURSES -CFLAGS += -DCURSES_GRAPHICS -WINSRC += $(WINCURSESSRC) -WINOBJ0 += $(WINCURSESOBJ) CURSESLIB = -lncurses -ltinfo endif @@ -181,7 +105,6 @@ WINLIB += $(CURSESLIB) endif ifdef WANT_WIN_X11 -CFLAGS += -DX11_GRAPHICS USE_XPM=1 WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 VARDATND0 += x11tiles NetHack.ad pet_mark.xbm pilemark.xbm @@ -196,32 +119,27 @@ CFLAGS += -DUSE_XPM WINX11LIB += -lXpm VARDATND0 += rip.xpm endif -WINSRC += $(WINX11SRC) -WINOBJ0 += $(WINX11OBJ) WINLIB += $(WINX11LIB) LFLAGS=-L/opt/X11/lib endif # WANT_WIN_X11 ifdef WANT_WIN_QT -CFLAGS += -DQT_GRAPHICS +# Qt5 requires C++11 +LINK = $(CXX) QTCXXFLAGS += -Wno-deprecated-declarations QTCXXFLAGS += $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig pkg-config Qt5Gui Qt5Widgets Qt5Multimedia --cflags) QTCXXFLAGS += -fPIC WINLIB += $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig pkg-config Qt5Gui Qt5Widgets Qt5Multimedia --libs) -WINSRC += $(WINQTSRC) -WINOBJ0 += $(WINQTOBJ) VARDATND0 += nhtiles.bmp rip.xpm nhsplash.xpm pet_mark.xbm pilemark.xbm # XXX if /Developer/qt exists and QTDIR not set, use that ifndef QTDIR $(error QTDIR not defined in the environment or Makefile) endif # QTDIR # XXX make sure QTDIR points to something reasonable -POSTINSTALL+= cp -n sys/unix/sysconf $(INSTDIR)/sysconf; \ - $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf; \ - $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf; \ - chmod $(VARFILEPERM) $(INSTDIR)/sysconf; POSTINSTALL+= bdftopcf win/X11/nh10.bdf > $(INSTDIR)/nh10.pcf; \ ( cd $(INSTDIR); mkfontdir -x .lev ); +else +LINK = $(CC) endif # !WANT_WIN_QT # prevent duplicate tile.o in WINOBJ @@ -240,11 +158,14 @@ POSTINSTALL+= cp -n sys/unix/sysconf $(INSTDIR)/sysconf; \ $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf; \ $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf; \ chmod $(VARFILEPERM) $(INSTDIR)/sysconf; + +ifneq "$(CCISCLANG)" "" # gdb may not be installed if clang is chosen compiler so the game # won't start in that case due to a sysconf error. Comment out # relevant lines in sysconf. POSTINSTALL+= sed -i -e 's;^GDBPATH=/usr/bin/gdb;\#GDBPATH=/usr/bin/gdb;' \ -e 's;PANICTRACE_GDB=1;PANICTRACE_GDB=0;' $(INSTDIR)/sysconf; +endif # 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 @@ -257,6 +178,7 @@ LFLAGS=-rdynamic # if TTY_TILES_ESCCODES #WINSRC += tile.c #WINOBJ += tile.o +# endif CHOWN=true CHGRP=true diff --git a/sys/unix/hints/macOS.2020 b/sys/unix/hints/macOS.2020 index e02026563..4e4449e3c 100755 --- a/sys/unix/hints/macOS.2020 +++ b/sys/unix/hints/macOS.2020 @@ -1,64 +1,32 @@ -# NetHack 3.7 macOS.2020 $NHDT-Date: 1596489016 2020/08/03 21:10:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.65 $ +# NetHack 3.7 macOS.2020 $NHDT-Date: 1597332721 2020/08/13 15:32:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.67 $ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. # NetHack may be freely redistributed. See license for details. # -#-PRE -# macOS X hints file +#--------------------------------------------------------------------- +# MacOS hints file with support for multiple window ports (interfaces) # Tested on: # - MacOS Catalina 10.15 # -# If this doesn't work for some other version of Mac OS X, make a new file for -# that OS, don't change this one. And let us know about it. +# If this doesn't work for some other version of Mac OS X, consider +# making a new hints file it, rather than changing this one. +# And let us know about it. # Useful info: http://www.opensource.apple.com/darwinsource/index.html -# -# This hints file supports tty, curses, x11, and Qt in the same binary, -# but: -# - You'll need to obtain and install XQuartz if you want X11 support. -# (Attempting to run X11.app will describe where to get it.) -# One possible way: brew install xquartz -# -# - You'll need to obtain and install Qt if you want Qt support -# One possible way: brew install Qt -# -# - You'll need to obtain and install the ncurses development libraries -# if you want curses window port support. -# -# Assuming you have the prerequisite packages, You can specify the -# window ports to include on the make command line without requiring -# you to edit the Makefile: -# make WANT_WIN_QT=1 WANT_WIN_X11=1 WANT_WIN_CURSES=1 WANT_WIN_TTY=1 all -# in the src/ directory prior to 'make install' in the top directory. -# Add WANT_DEFAULT=Qt (or other interface) if you want nethack to use -# something other than tty as the default interface. +#-PRE xxxx +# macOS X hints file # -# This hints file can build several different interfaces and several -# types of installations (private, shared, source). -# Edit the section (1.) to control which interface(s). -# Edit the section (2.) to match the type of build you need. +#-INCLUDE multiw-1.2020 -# 1. Which windowing interface(s) should be included in this binary? -# One or more of these can be manually uncommented and/or can be specified -# on the 'make' command line. If none are enabled, tty will be used. -#WANT_WIN_TTY=1 -#WANT_WIN_CURSES=1 -#WANT_WIN_X11=1 -#WANT_WIN_QT=1 - -# 1a. What is the default window system? -# Exactly one of these can be manually uncommented and/or can be specified -# on the 'make' command line. If none is enabled, the first among -# WANT_WIN_{tty,curses,X11,Qt} that is enabled will become default. -#WANT_DEFAULT=tty -#WANT_DEFAULT=curses -#WANT_DEFAULT=Qt -#WANT_DEFAULT=X11 - -# 1b. If you set WANT_WIN_QT, you need to +# 4. If you set WANT_WIN_QT, you need to # A) set QTDIR either here or in the environment to point to the Qt5 # library installation root. (Qt2, Qt3, Qt4 will not work) # B) set XPMLIB to point to the Xpm library +ifndef WANT_WIN_QT +ifdef WANT_WIN_ALL +WANT_WIN_QT=1 +endif +endif ifdef WANT_WIN_QT #QTDIR=/Developer/Qt # Qt installed via homebrew @@ -70,92 +38,17 @@ ifndef LIBXPM LIBXPM= -L/opt/X11/lib -lXpm endif -# 2. Is this a build for a binary that will be shared among different users -# or will it be private to you? -# If it is shared: -# - it will be owned by the user and group listed -# - if the user does not exist, you MUST create it before installing -# NetHack -# - if the group does not exist, it will be created. -# NB: if the group already exists and is being used for something -# besides games, you probably want to specify a new group instead -# NB: the group will be created locally; if your computer is centrally -# administered this may not be what you (or your admin) want. -# Consider a non-shared install (WANT_SHARE_INSTALL=0) instead. -# - 'make install' must be run as "sudo make install" -# Note: 'make install' starts out be removing all files and subdirectories -# from the target destination. Use 'make update' instead if there is -# anything there that you want to keep such as the high scores file from -# a previous install. -#WANT_SHARE_INSTALL=1 -GAMEUID = $(USER) -GAMEGRP = games -# build to run in the source tree - primarily for development. Build -# with "make all" -#WANT_SOURCE_INSTALL=1 +# 5. Other -# 3. miscellaneous: compiler selection; Qt5 requires C++11 -ifdef WANT_WIN_QT -CC=clang -CXX=clang++ -std=gnu++11 -#CC=gcc -#CXX=g++ -std=gnu++11 -LINK= $(CXX) -else -# compiling C code only; CC and CXX defaults can be used -#CC= -#CXX= -LINK = $(CC) -endif -#MOC = moc - -# At the moment the 'chain' interface is just for debugging, but in the future -# it could be useful for other things. Requires SYSCF and an ANSI compiler. -#WANT_WIN_CHAIN=1 - -# +#----------------------------------------------------------------------------- # 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). # -# Make sure that at least one interface aside from 'chain' is enabled. -ifndef WANT_WIN_TTY -ifndef WANT_WIN_CURSES -ifndef WANT_WIN_X11 -ifndef WANT_WIN_QT -WANT_WIN_TTY=1 -endif -endif -endif -endif +#-INCLUDE multiw-2.2020 -# Make sure that a default interface is specified; this doesn't guarantee -# sanity for something like 'make WANT_WIN_CURSES=1 WANT_DEFAULT=X11' but -# 'makedefs -v' would notice, complain, and quit causing 'make' to quit. -ifndef WANT_DEFAULT -# pick the first one enabled among { tty, curses, X11, Qt } -ifdef WANT_WIN_TTY -WANT_DEFAULT=tty -else -ifdef WANT_WIN_CURSES -WANT_DEFAULT=curses -else -ifdef WANT_WIN_X11 -WANT_DEFAULT=X11 -else -ifdef WANT_WIN_QT -WANT_DEFAULT=Qt -else -# ? shouldn't be able to get here... -endif -endif -endif -endif -endif - -CFLAGS+=-Wall -Wextra -Wno-missing-field-initializers -Wimplicit \ - -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings -CFLAGS+=-DGCC_WARN +# XXX -g vs -O should go here, -I../include goes in the makefile +CFLAGS+=-g -I../include -DNOTPARMDECL ifndef WANT_WIN_QT # these are normally used when compiling nethack's core CFLAGS+=-ansi -pedantic -Wno-long-long @@ -169,45 +62,51 @@ endif # As of LLVM build 2336.1.00, this gives dozens of spurious messages, so # leave it out by default. #CFLAGS+=-Wunreachable-code +CFLAGS+=-Wall -Wextra -Wno-missing-field-initializers -Wimplicit \ + -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings +CFLAGS+=-DGCC_WARN -# XXX -g vs -O should go here, -I../include goes in the makefile -CFLAGS+=-g -I../include +# NetHack sources control +CFLAGS+=-DDLB +CFLAGS+=-DHACKDIR=\"$(HACKDIR)\" +CFLAGS+=-DDEFAULT_WINDOW_SYS=\"$(WANT_DEFAULT)\" -DDLB +CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE +#CFLAGS+=-DTIMED_DELAY +#CFLAGS+=-DDUMPLOG +#CFLAGS+=-DCONFIG_ERROR_SECURE=FALSE +CFLAGS+=-DGREPPATH=\"/usr/bin/grep\" +#CFLAGS+=-DCOMPRESS=\"/bin/gzip\" -DCOMPRESS_EXTENSION=\".gz\" # older binaries use NOCLIPPING, but that disables SIGWINCH #CFLAGS+=-DNOCLIPPING -CFLAGS+= -DNOMAIL -DNOTPARMDECL -DHACKDIR=\"$(HACKDIR)\" -CFLAGS+= -DDEFAULT_WINDOW_SYS=\"$(WANT_DEFAULT)\" -DDLB -CFLAGS+= -DGREPPATH=\"/usr/bin/grep\" +CFLAGS+=-DNOMAIL +#CFLAGS+=-DEXTRA_SANITY_CHECKS +#CFLAGS+=-DEDIT_GETLIN +#CFLAGS+=-DSCORE_ON_BOTL +#CFLAGS+=-DMSGHANDLER +#CFLAGS+=-DTTY_TILES_ESCCODES +#CFLAGS+=-DTTY_SOUND_ESCCODES + +CFLAGS+= $(WINCFLAGS) #from multiwin.2020 + +VARDATND = +VARDATND0 = +CURSESLIB = ifdef WANT_WIN_CHAIN -CFLAGS+= -DWINCHAIN HINTSRC=$(CHAINSRC) HINTOBJ=$(CHAINOBJ) endif # WANT_WIN_CHAIN -WINSRC = -WINOBJ0 = -WINLIB = -VARDATND = -VARDATND0 = -WINCURSESLIB = - ifdef WANT_WIN_TTY -WINSRC += $(WINTTYSRC) -WINOBJ0 += $(WINTTYOBJ) -WINCURSESLIB = -lncurses -else # !WANT_WIN_TTY -CFLAGS += -DNOTTYGRAPHICS -endif # !WANT_WIN_TTY - -ifdef WANT_WIN_CURSES -CFLAGS += -DCURSES_GRAPHICS -WINSRC += $(WINCURSESSRC) -WINOBJ0 += $(WINCURSESOBJ) -WINCURSESLIB = -lncurses +CURSESLIB = -lncurses endif -ifdef WINCURSESLIB -WINLIB += $(WINCURSESLIB) +ifdef WANT_WIN_CURSES +CURSESLIB = -lncurses +endif + +ifdef CURSESLIB +WINLIB += $(CURSESLIB) endif ifdef WANT_WIN_X11 @@ -216,7 +115,6 @@ 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 ); -CFLAGS += -DX11_GRAPHICS # 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 @@ -226,14 +124,13 @@ CFLAGS += -DUSE_XPM WINX11LIB += -lXpm VARDATND0 += rip.xpm endif -WINSRC += $(WINX11SRC) -WINOBJ0 += $(WINX11OBJ) WINLIB += $(WINX11LIB) LFLAGS=-L/opt/X11/lib endif # WANT_WIN_X11 ifdef WANT_WIN_QT -CFLAGS += -DQT_GRAPHICS +# Qt5 requires C++11 +LINK = $(CXX) QTCXXFLAGS += -Wno-deprecated-declarations QTCXXFLAGS += $(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) @@ -254,6 +151,7 @@ WINOBJ = $(sort $(WINOBJ0)) # prevent duplicates in VARDATND if both X11 and Qt are being supported VARDATND += $(sort $(VARDATND0)) +WANT_BUNDLE=1 ifdef WANT_SHARE_INSTALL # if $GAMEUID is root, we install into roughly proper Mac locations, otherwise # we install into ~/nethackdir @@ -278,10 +176,16 @@ VARDIRPERM = 0775 ROOTCHECK= [[ `id -u` == 0 ]] || ( echo "Must run install with sudo."; exit 1) # XXX it's nice we don't write over sysconf, but we've already erased it # make sure we have group GAMEUID and group GAMEGRP -PREINSTALL= . sys/unix/hints/macosx.sh user2 $(GAMEUID); . sys/unix/hints/macosx.sh group2 $(GAMEGRP); mkdir $(SHELLDIR); chown $(GAMEUID) $(SHELLDIR) -POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; chmod $(VARFILEPERM) $(HACKDIR)/sysconf; -CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE +PREINSTALL= . sys/unix/hints/macosx.sh user2 $(GAMEUID); \ + . sys/unix/hints/macosx.sh group2 $(GAMEGRP); \ + mkdir $(SHELLDIR); chown $(GAMEUID) $(SHELLDIR) +POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; \ + $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; \ + $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; \ + chmod $(VARFILEPERM) $(HACKDIR)/sysconf; + else ifdef WANT_SOURCE_INSTALL + PREFIX=$(abspath $(NHSROOT)) # suppress nethack.sh #SHELLDIR= @@ -295,7 +199,9 @@ POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/s # We can use "make all" to build the whole thing - but it misses some things: MOREALL=$(MAKE) install CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE + else # !WANT_SOURCE_INSTALL + PREFIX:=$(wildcard ~) SHELLDIR=$(PREFIX)/bin HACKDIR=$(PREFIX)/nethackdir @@ -304,18 +210,46 @@ CHGRP=/usr/bin/true GAMEPERM = 0700 VARFILEPERM = 0600 VARDIRPERM = 0700 -ifdef WANT_WIN_X11 +ifdef ($(WANT_DEFAULT),X11) # install nethack.rc as ~/.nethackrc if no ~/.nethackrc exists PREINSTALL= cp -n win/X11/nethack.rc ~/.nethackrc || true -endif # WANT_WIN_X11 -POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; chmod $(VARFILEPERM) $(HACKDIR)/sysconf; -CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE -endif # !WANT_SOURCE_INSTALL +endif # WANT_DEFAULT X11 + +POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; \ + $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; \ + $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; \ + chmod $(VARFILEPERM) $(HACKDIR)/sysconf; +ifdef WANT_BUNDLE +# +# Bundle +# +# $(HACKDIR)/$(GAME).app/ +# Contents/ +# Frameworks/ +# Info.plist +# MacOS/ +# $(GAME) +# PkgInfo/ +# PlugIns/ +# Resources/ +# SharedFrameWorks/ +# +BUNDLE = mkdir -p $(HACKDIR)/nethack.app/Contents/MacOS; \ + sys/unix/hints/macosx.sh infoplist > $(HACKDIR)/nethack.app/Contents/Info.plist; \ + mv $(HACKDIR)/nethack $(HACKDIR)/nethack.app/Contents/MacOS/nethack; +ifdef WANT_SHARE_INSTALL +BUNDLE+= chmod $(GAMEPERM) $(HACKDIR)/nethack.app/Contents/MacOS/nethack; +endif + +POSTINSTALL+= $(BUNDLE) +POSTINSTALL+= if test -f $(SHELLDIR)/$(GAME); then \ + sed -i '' 's;HACKDIR/$(GAME);HACKDIR/$(GAME).app/Contents/MacOS/$(GAME);' $(SHELLDIR)/$(GAME) ; fi; +endif # WANT_BUNDLE +endif # !WANT_SHARE_INSTALL INSTDIR=$(HACKDIR) VARDIR=$(HACKDIR) - # ~/Library/Preferences/NetHack Defaults # OPTIONS=name:player,number_pad,menustyle:partial,!time,showexp # OPTIONS=hilite_pet,toptenwin,msghistory:200,windowtype:Qt diff --git a/sys/unix/mkmkfile.sh b/sys/unix/mkmkfile.sh index 478aa70cc..17d56d706 100755 --- a/sys/unix/mkmkfile.sh +++ b/sys/unix/mkmkfile.sh @@ -1,5 +1,5 @@ #!/bin/sh -# NetHack 3.7 mkmkfile.sh $NHDT-Date: 1596498293 2020/08/03 23:44:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.14 $ +# NetHack 3.7 mkmkfile.sh $NHDT-Date: 1597332770 2020/08/13 15:32:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.15 $ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2007. # NetHack may be freely redistributed. See license for details. @@ -23,7 +23,8 @@ echo "### Start $5 PRE" >> $3 echo "###" >> $3 awk '/^#-PRE/,/^#-POST/{ \ if(index($0, "#-PRE") == 1) print "# (new segment at source line",NR,")"; \ - if(index($0, "#-P") != 1) print}' $4 >> $3 + if(index($0, "#-INCLUDE") == 1) system("cat hints/include/"$2); \ + else if(index($0, "#-P") != 1) print}' $4 >> $3 echo "### End $5 PRE" >> $3 echo "" >> $3