# NetHack 3.7 macOS.2020 $NHDT-Date: 1597704793 2020/08/17 22:53:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.69 $ # 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 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 #-PRE xxxx # macOS X hints file # # 5. 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). # AR=ar rcu RANLIB=ranlib # XXX -g vs -O should go here, -I../include goes in the makefile CFLAGS+=-g -I../include -DNOTPARMDECL CFLAGS+=-Wno-missing-field-initializers -Wimplicit -Wreturn-type -Wformat -Wswitch -Wshadow -Wwrite-strings CFLAGS+=-DGCC_WARN # NetHack sources control CFLAGS+=-DDLB CFLAGS+=-DHACKDIR=\"$(HACKDIR)\" CFLAGS+=-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 #CFLAGS+=-DEXTRA_SANITY_CHECKS #CFLAGS+=-DEDIT_GETLIN #CFLAGS+=-DSCORE_ON_BOTL #CFLAGS+=-DMSGHANDLER #CFLAGS+=-DTTY_TILES_ESCCODES #CFLAGS+=-DTTY_SOUND_ESCCODES CFLAGS+=-DDEFAULT_WINDOW_SYS=\"shim\" -DNOTTYGRAPHICS -DLIBNH CFLAGS+= $(WINCFLAGS) #WINCFLAGS set from multiw-2.2020 VARDATND = VARDATND0 = CURSESLIB = ifdef WANT_WIN_CHAIN HINTSRC=$(CHAINSRC) HINTOBJ=$(CHAINOBJ) endif # WANT_WIN_CHAIN LINK=$(CC) # prevent duplicate tile.o in WINOBJ 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 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). #-POST 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