# # NetHack 3.7 linux.2020 $NHDT-Date: 1597072358 2020/08/10 15:12:38 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ # 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) # # This hints file supports tty, curses, x11, and Qt in the same binary, # but: # # - 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 ifdef WANT_WIN_QT QTDIR=/usr 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). 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 CFLAGS=-g -O -I../include -DNOTPARMDECL ifeq "$(CCISCLANG)" "" # get the version of gcc GCCGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9) ifeq "$(GCCGTEQ9)" "1" CFLAGS+=-Wno-format-overflow endif #gcc version greater than or equal to 9 endif #not clang CFLAGS+=-DDLB CFLAGS+=-DCOMPRESS=\"/bin/gzip\" -DCOMPRESS_EXTENSION=\".gz\" CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE CFLAGS+=-DTIMED_DELAY CFLAGS+=-DHACKDIR=\"$(HACKDIR)\" CFLAGS+=-DDUMPLOG CFLAGS+=-DCONFIG_ERROR_SECURE=FALSE #CFLAGS+=-DEXTRA_SANITY_CHECKS #CFLAGS+=-DEDIT_GETLIN #CFLAGS+=-DSCORE_ON_BOTL #CFLAGS+=-DMSGHANDLER #CFLAGS+=-DTTY_TILES_ESCCODES #CFLAGS+=-DTTY_SOUND_ESCCODES WINSRC = WINOBJ0 = WINLIB = VARDATND = VARDATND0 = CURSESLIB = ifdef WANT_WIN_TTY WINSRC += $(WINTTYSRC) WINOBJ0 += $(WINTTYOBJ) CURSESLIB = -lncurses -ltinfo else # !WANT_WIN_TTY CFLAGS += -DNOTTYGRAPHICS endif # !WANT_WIN_TTY ifdef WANT_WIN_CURSES CFLAGS += -DCURSES_GRAPHICS WINSRC += $(WINCURSESSRC) WINOBJ0 += $(WINCURSESOBJ) CURSESLIB = -lncurses -ltinfo endif ifdef CURSESLIB 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 # -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 WINSRC += $(WINX11SRC) WINOBJ0 += $(WINX11OBJ) WINLIB += $(WINX11LIB) LFLAGS=-L/opt/X11/lib endif # WANT_WIN_X11 ifdef WANT_WIN_QT CFLAGS += -DQT_GRAPHICS 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 ); endif # !WANT_WIN_QT # prevent duplicate tile.o in WINOBJ WINOBJ = $(sort $(WINOBJ0)) # prevent duplicates in VARDATND if both X11 and Qt are being supported VARDATND += $(sort $(VARDATND0)) #PREFIX=/usr PREFIX=$(wildcard ~)/nh/install HACKDIR=$(PREFIX)/games/lib/$(GAME)dir SHELLDIR = $(PREFIX)/games INSTDIR=$(HACKDIR) VARDIR = $(HACKDIR) POSTINSTALL+= cp -n sys/unix/sysconf $(INSTDIR)/sysconf; \ $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf; \ $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf; \ chmod $(VARFILEPERM) $(INSTDIR)/sysconf; # 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; # 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_POSIX # Only needed for GLIBC stack trace: LFLAGS=-rdynamic # if TTY_TILES_ESCCODES #WINSRC += tile.c #WINOBJ += tile.o CHOWN=true CHGRP=true VARDIRPERM = 0755 VARFILEPERM = 0600 GAMEPERM = 0755