# NetHack 3.7 macOS.370 $NHDT-Date: 1633401749 2021/10/05 02:42:29 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.88 $ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. # NetHack may be freely redistributed. See license for details. # #--------------------------------------------------------------------- # 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 macOS, 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 #-PRE xxxx # macOS hints file # # note: '#-INCLUDE' is not just a comment; multiw-1 contains sections 1 to 2 #-INCLUDE multiw-1.370 # 3. 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 ifdef WANT_WIN_QT5 ifndef WANT_WIN_QT WANT_WIN_QT=1 endif # not WANT_WIN_QT endif # WANT_WIN_QT5 ifdef WANT_WIN_QT6 ifndef WANT_WIN_QT WANT_WIN_QT=1 endif # not WANT_WIN_QT endif # WANT_WIN_QT6 endif # not WANT_WIN_QT ifdef WANT_WIN_QT ifndef WANT_WIN_QT5 ifndef WANT_WIN_QT6 WANT_WIN_QT5=1 endif # not WANT_WIN_QT6 endif # not WANT_WIN_QT5 #QTDIR=/Developer/Qt ifdef WANT_WIN_QT5 # Qt5 installed via homebrew QTDIR=$(shell brew --prefix)/opt/qt@5 endif # WANT_WIN_QT5 ifdef WANT_WIN_QT6 QTDIR=$(shell brew --prefix)/opt/qt@6 endif # WANT_WIN_QT6 # Qt5 installed via macports #QTDIR=/opt/local/libexec/qt5 endif # WANT_WIN_QT ifndef LIBXPM LIBXPM= -L/opt/X11/lib -lXpm endif # 4. Other #----------------------------------------------------------------------------- # 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 # 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 CFLAGS+= $(WINCFLAGS) #WINCFLAGS set from multiw-2.370 CFLAGS+= $(NHCFLAGS) CCXXFLAGS+= $(WINCFLAGS) #WINCFLAGS set from multiw-2.370 CCXXFLAGS+= $(NHCFLAGS) VARDATND = VARDATND0 = CURSESLIB = ifdef WANT_WIN_CHAIN HINTSRC=$(CHAINSRC) HINTOBJ=$(CHAINOBJ) endif # WANT_WIN_CHAIN ifdef WANT_WIN_TTY CURSESLIB = -lncurses endif ifdef WANT_WIN_CURSES CURSESLIB = -lncurses endif ifdef CURSESLIB WINLIB += $(CURSESLIB) endif 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_QT5 # Qt5 requires C++11 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 QTCXXFLAGS += -std=c++17 -I $(QTDIR)/include -I $(QTDIR)/include/QtCore MOC = moc MOCPATH = $(QTDIR)/share/qt/libexec/moc WINLIB += -F $(QTDIR)/Frameworks -framework QtCore -framework QtGui -framework QtWidgets endif # WANT_WIN_QT6 WINSRC += $(WINQTSRC) WINOBJ0 += $(WINQTOBJ) VARDATND0 += nhtiles.bmp rip.xpm nhsplash.xpm # 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 else # !WANT_WIN_QT LINK=$(CC) 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)) GIT_HASH := $(shell echo `git rev-parse --verify HEAD` 2>&1) GIT_BRANCH := $(shell echo `git rev-parse --abbrev-ref HEAD` 2>&1) ifdef GIT_HASH GITHASH = -DNETHACK_GIT_SHA=\"$(GIT_HASH)\" endif ifdef GIT_BRANCH GITBRANCH = -DNETHACK_GIT_BRANCH=\"$(GIT_BRANCH)\" endif ifdef WANT_LIBNH CFLAGS += -DSHIM_GRAPHICS -DNOTTYGRAPHICS -DNOSHELL -DLIBNH 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 #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 WANT_BUNDLE=1 ifdef WANT_SHARE_INSTALL # if $GAMEUID is root, we install into roughly proper Mac locations, otherwise # we install into ~/nethackdir ifeq ($(GAMEUID),root) PREFIX:=/Library/NetHack SHELLDIR=/usr/local/bin HACKDIR=$(PREFIX)/nethackdir CHOWN=chown CHGRP=chgrp # We run sgid so the game has access to both HACKDIR and user preferences. GAMEPERM = 02755 else # ! root PREFIX:=/Users/$(GAMEUID) SHELLDIR=$(PREFIX)/bin HACKDIR=$(PREFIX)/Library/NetHack/nethackdir CHOWN=/usr/bin/true CHGRP=/usr/bin/true GAMEPERM = 0500 endif # ! root VARFILEPERM = 0664 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; else ifdef WANT_SOURCE_INSTALL PREFIX=$(abspath $(NHSROOT)) # suppress nethack.sh #SHELLDIR= HACKDIR=$(PREFIX)/playground CHOWN=/usr/bin/true CHGRP=/usr/bin/true GAMEPERM = 0700 VARFILEPERM = 0600 VARDIRPERM = 0700 POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; # 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 CHOWN=/usr/bin/true CHGRP=/usr/bin/true GAMEPERM = 0700 VARFILEPERM = 0600 VARDIRPERM = 0700 ifdef ($(WANT_DEFAULT),X11) # install nethack.rc as ~/.nethackrc if no ~/.nethackrc exists PREINSTALL= cp -n win/X11/nethack.rc ~/.nethackrc || true 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 # # Install.Qt mentions a patch for macos - it's not there (it seems to be in the Qt binary # package under the docs directory). # #-INCLUDE cross-pre.370 # #-POST ifdef WANT_LIBNH $(TARGETPFX)libnh.a: $(HOBJ) $(LIBNHSYSOBJ) ../lib/lua/liblua.a $(AR) rcs $@ $(HOBJ) $(LIBNHSYSOBJ) ../lib/lua/liblua.a @echo "$@ built." $(TARGETPFX)libnhmain.o : ../sys/libnh/libnhmain.c $(HACK_H) $(CC) $(CFLAGS) -c -o$@ $< $(TARGETPFX)winshim.o : ../win/shim/winshim.c $(HACK_H) $(CC) $(CFLAGS) -c -o$@ $< endif # WANT_LIBNH ifdef MAKEFILE_TOP ### ### Packaging ### # Notes: # 1) The Apple developer utilities must be installed in the default location. # 2) Do a normal build before trying to package the game. # 3) This matches the 3.4.3 Term package, but there are some things that # should be changed. # # Packages that are being distributed must be signed by a Developer ID # Installer certificate. Set DEVELOPER_CERT to the name of the certificate # if you wish for your package to be signed for distribution. # # If building a package for signing, you must use sudo approriately. # the binaries and package using sudo but you DO NOT use sudo to sign the # package. If you use sudo to sign the package, it will fail. # # sudo make all # sudo make build_tty_pkg # make sign_tty_pkg # ifdef WANT_WIN_TTY DEVUTIL=/Developer/Applications/Utilities SVS=$(shell $(NHSROOT)/util/makedefs --svs) SVSDOT=$(shell $(NHSROOT)/util/makedefs --svs .) PKGROOT_UG = PKGROOT/$(PREFIX) PKGROOT_UGLN = PKGROOT/$(HACKDIR) PKGROOT_BIN = PKGROOT/$(SHELLDIR) #DEVELOPER_CERT = Developer ID Installer: Bart House DEVELOPER_CERT = NONE spotless:: rm -rf RESOURCES rm -rf PKG rm -rf PKGSCRIPTS rm -rf PKGROOT rm -f Info.plist rm -f Distribution.xml rm -f NetHack-*-mac-Term* build_tty_pkg: ifneq (,$(WANT_WIN_X11)$(WANT_WIN_QT)) -echo build_tty_pkg only works for a tty-only build exit 1 else rm -rf NetHack-$(SVS)-mac-Term.pkg NetHack-$(SVS)-mac-Term.dmg $(MAKE) build_package_root rm -rf RESOURCES mkdir RESOURCES #enscript --language=rtf -o - < dat/license >RESOURCES/License.rtf sys/unix/hints/macosx.sh descplist > RESOURCES/Description.plist sys/unix/hints/macosx.sh infoplist > Info.plist mkdir PKGROOT/Applications #osacompile -o NetHackQt/NetHackQt.app/nethackdir/NetHackRecover.app \ # win/macosx/NetHackRecover.applescript #cp win/macosx/recover.pl NetHackQt/NetHackQt.app/nethackdir osacompile -o PKGROOT/Applications/NetHackRecover.app \ win/macosx/NetHackRecover.applescript cp win/macosx/recover.pl $(PKGROOT_UGLN) osacompile -o PKGROOT/Applications/NetHackTerm.app \ win/macosx/NetHackTerm.applescript # XXX integrate into Makefile.doc (cd doc; cat Guidebook.mn | ../util/makedefs --grep --input - --output - \ | tbl tmac.n - | groff | pstopdf -i -o Guidebook.pdf) cp doc/Guidebook.pdf $(PKGROOT_UG)/doc/NetHackGuidebook.pdf osacompile -o PKGROOT/Applications/NetHackGuidebook.app \ win/macosx/NetHackGuidebook.applescript mkdir -p PKG pkgbuild --root PKGROOT --identifier org.nethack.term --scripts PKGSCRIPTS PKG/NH-Term.pkg productbuild --synthesize --product Info.plist --package PKG/NH-Term.pkg Distribution.xml productbuild --distribution Distribution.xml --resources RESOURCES --package-path PKG NetHack-$(SVS)-mac-Term-unsigned.pkg ifeq ($(DEVELOPER_CERT),NONE) cp NetHack-$(SVS)-mac-Term-unsigned.pkg NetHack-$(SVS)-mac-Term.pkg hdiutil create -verbose -srcfolder NetHack-$(SVS)-mac-Term-unsigned.pkg NetHack-$(SVS)-mac-Term-unsigned.dmg @echo ------------------------------------------- @echo PACKAGE IS NOT SIGNED FOR DISTRIBUTION!!!!! @echo =========================================== else @echo "run 'make sign_tty_pkg' to complete package" endif sign_tty_pkg: productsign --timestamp=none --sign "$(DEVELOPER_CERT)" NetHack-$(SVS)-mac-Term-unsigned.pkg NetHack-$(SVS)-mac-Term.pkg || (echo "Package signing failed"; exit 1) spctl -a -v --type install NetHack-$(SVS)-mac-Term.pkg || (echo "Package not signed properly"; exit 1) hdiutil create -verbose -srcfolder NetHack-$(SVS)-mac-Term.pkg NetHack-$(SVS)-mac-Term.dmg build_package_root: cd src/.. # make sure we are at TOP rm -rf PKGROOT mkdir -p $(PKGROOT_UG)/lib $(PKGROOT_BIN) $(PKGROOT_UG)/man/man6 $(PKGROOT_UG)/doc $(PKGROOT_UGLN) install -p src/nethack $(PKGROOT_BIN) # XXX should this be called nethackrecover? install -p util/recover $(PKGROOT_BIN) install -p doc/nethack.6 $(PKGROOT_UG)/man/man6 install -p doc/recover.6 $(PKGROOT_UG)/man/man6 install -p doc/Guidebook $(PKGROOT_UG)/doc install -p dat/nhdat $(PKGROOT_UGLN) sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(PKGROOT_UGLN)/sysconf cd dat; install -p $(DATNODLB) ../$(PKGROOT_UGLN) # XXX these files should be somewhere else for good Mac form touch $(PKGROOT_UGLN)/perm $(PKGROOT_UGLN)/record $(PKGROOT_UGLN)/logfile $(PKGROOT_UGLN)/xlogfile mkdir $(PKGROOT_UGLN)/save # XXX what about a news file? mkdir -p PKGSCRIPTS echo '#!/bin/sh' > PKGSCRIPTS/postinstall echo dseditgroup -o create -r '"Games Group"' -s 3600 $(GAMEGRP) >> PKGSCRIPTS/postinstall echo $(CHOWN) $(GAMEUID) $(HACKDIR) >> PKGSCRIPTS/postinstall echo $(CHOWN) $(GAMEUID) $(HACKDIR)/* >> PKGSCRIPTS/postinstall echo $(CHGRP) $(GAMEGRP) $(HACKDIR) >> PKGSCRIPTS/postinstall echo $(CHGRP) $(GAMEGRP) $(HACKDIR)/* >> PKGSCRIPTS/postinstall echo $(CHOWN) $(GAMEUID) $(SHELLDIR)/nethack >> PKGSCRIPTS/postinstall echo $(CHGRP) $(GAMEGRP) $(SHELLDIR)/nethack >> PKGSCRIPTS/postinstall echo $(CHOWN) $(GAMEUID) $(SHELLDIR)/recover >> PKGSCRIPTS/postinstall echo $(CHGRP) $(GAMEGRP) $(SHELLDIR)/recover >> PKGSCRIPTS/postinstall echo chmod $(VARDIRPERM) $(HACKDIR) >> PKGSCRIPTS/postinstall echo chmod $(VARDIRPERM) $(HACKDIR)/save >> PKGSCRIPTS/postinstall echo chmod $(FILEPERM) $(HACKDIR)/license >> PKGSCRIPTS/postinstall echo chmod $(FILEPERM) $(HACKDIR)/nhdat >> PKGSCRIPTS/postinstall echo chmod $(FILEPERM) $(HACKDIR)/symbols >> PKGSCRIPTS/postinstall echo chmod $(VARFILEPERM) $(HACKDIR)/perm >> PKGSCRIPTS/postinstall echo chmod $(VARFILEPERM) $(HACKDIR)/record >> PKGSCRIPTS/postinstall echo chmod $(VARFILEPERM) $(HACKDIR)/logfile >> PKGSCRIPTS/postinstall echo chmod $(VARFILEPERM) $(HACKDIR)/xlogfile >> PKGSCRIPTS/postinstall echo chmod $(VARFILEPERM) $(HACKDIR)/sysconf >> PKGSCRIPTS/postinstall echo chmod $(GAMEPERM) $(SHELLDIR)/nethack >> PKGSCRIPTS/postinstall echo chmod $(EXEPERM) $(SHELLDIR)/recover >> PKGSCRIPTS/postinstall chmod 0775 PKGSCRIPTS/postinstall endif # end of build_tty_pkg endif # WANT_WIN_TTY for packaging ifdef WANT_WIN_QT # XXX untested and incomplete (see below) build_qt_pkg: ifneq (,$(WANT_WIN_X11)$(WANT_WIN_TTY)) -echo build_qt_pkg only works for a qt-only build exit 1 else $(MAKE) build_package_root rm -rf NetHackQt mkdir -p NetHackQt/NetHackQt.app/nethackdir/save mkdir NetHackQt/Documentation cp doc/Guidebook.txt doc/nethack.txt doc/recover.txt NetHackQt/Documentation osacompile -o NetHackQt/NetHackQt.app/nethackdir/NetHackRecover.app \ win/macosx/NetHackRecover.applescript cp win/macosx/recover.pl NetHackQt/NetHackQt.app/nethackdir mkdir -p NetHackQt/NetHackQt.app/Contents/Frameworks cp $(QTDIR)/libqt-mt.3.dylib NetHackQt/NetHackQt.app/Contents/Frameworks mkdir NetHackQt/NetHackQt.app/Contents/MacOS mv PKGROOT/nethack NetHackQt/NetHackQt.app/Contents/MacOS mv PKGROOT/lib/nethackdir NetHackQt/NetHackQt.app/nethackdir # XXX still missing: #NetHackQt/NetHackQt.app # /Contents # Info.plist # Resources/nethack.icns #NetHackQt/Documentation #NetHackQtRecover.txt #NetHack Defaults.txt #changes.patch XXX is this still needed? why isn't it part of the tree? # doesn't go here hdiutil create -verbose -srcfolder NetHackQt NetHack-$(SVS)-macosx-qt.dmg endif # end of build_qt_pkg endif # WANT_WIN_QT for packaging endif # MAKEFILE_TOP # #-INCLUDE cross-post.370 #