Change all the POSTINSTALL 'mkfontdir' to 'mkfontdir -x .lev' although the mkfontdir version on my system didn't think $(HACKDIR)/*.lev were font files when I built without dlb. Also change the PREINSTALL 'cp -n win/X11/nethack.rc ~/.nethackrc' to keep going if it fails. The linux hints use 'cp -n' for sysconf but since it is doing so for the playground directory and 'make install' starts out by clearing away everything in that directory, it shouldn't fail. But some extra bullet proofing there may be warranted. Only the initial cp is protected against clobbering an existing file; the ownership+permission fixups that are applied to the copy of original file still get applied to an existing one.
344 lines
13 KiB
Plaintext
344 lines
13 KiB
Plaintext
#
|
|
# NetHack 3.6 macosx10.11 $NHDT-Date: 1566346604 2019/08/21 00:16:44 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.51 $
|
|
# Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015.
|
|
# NetHack may be freely redistributed. See license for details.
|
|
#
|
|
#-PRE
|
|
# Mac OS X (Darwin) hints file
|
|
# This is for the Qt interface on Mac OS X 10.10 through 10.13, and has
|
|
# been tested on 10.11 (El Capitan). 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.
|
|
# Useful info: http://www.opensource.apple.com/darwinsource/index.html
|
|
|
|
# You'll need to obtain and install XQuartz if you want X11 support.
|
|
# (Attempting to run X11.app will describe where to get it.)
|
|
|
|
# This hints file can build several different types of installations.
|
|
# Edit the next section to match the type of build you need.
|
|
|
|
# 1. Which window system(s) should be included in this binary?
|
|
WANT_WIN_TTY=1
|
|
#WANT_WIN_X11=1
|
|
WANT_WIN_QT=1
|
|
|
|
# 1a. What is the default window system?
|
|
#WANT_DEFAULT=tty
|
|
#WANT_DEFAULT=x11
|
|
WANT_DEFAULT=Qt
|
|
|
|
# 1b. 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 or Qt3 will not work.)
|
|
ifdef WANT_WIN_QT
|
|
QTDIR=$(shell brew --prefix)/opt/qt
|
|
endif # WANT_WIN_QT
|
|
|
|
# 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"
|
|
#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
|
|
|
|
CC=clang
|
|
CXX=clang++ -std=gnu++11
|
|
|
|
# At the moment this 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.
|
|
#
|
|
|
|
#CFLAGS+=-W -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wcast-qual -Wwrite-strings -DGCC_WARN
|
|
CFLAGS+=-Wall -Wextra -Wno-missing-field-initializers -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings -DGCC_WARN
|
|
# As of LLVM build 2336.1.00, this gives dozens of spurious messages, so
|
|
# leave it out by default.
|
|
#CFLAGS+=-Wunreachable-code
|
|
|
|
# XXX -g vs -O should go here, -I../include goes in the makefile
|
|
CFLAGS+=-g -I../include
|
|
# 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\"
|
|
|
|
ifdef WANT_WIN_CHAIN
|
|
CFLAGS+= -DWINCHAIN
|
|
HINTSRC=$(CHAINSRC)
|
|
HINTOBJ=$(CHAINOBJ)
|
|
endif
|
|
|
|
WINSRC =
|
|
WINOBJ0 =
|
|
WINLIB =
|
|
LINK = $(CC)
|
|
VARDATND =
|
|
|
|
ifdef WANT_WIN_TTY
|
|
WINSRC += $(WINTTYSRC)
|
|
WINOBJ0 += $(WINTTYOBJ)
|
|
WINLIB += $(WINTTYLIB)
|
|
WINTTYLIB=-lncurses
|
|
else # !WANT_WIN_TTY
|
|
CFLAGS += -DNOTTYGRAPHICS
|
|
endif # !WANT_WIN_TTY
|
|
|
|
ifdef WANT_WIN_X11
|
|
WINSRC += $(WINX11SRC)
|
|
WINOBJ0 += $(WINX11OBJ)
|
|
WINLIB += $(WINX11LIB)
|
|
LFLAGS += -L/opt/X11/lib
|
|
VARDATND += x11tiles NetHack.ad pet_mark.xbm pilemark.xbm
|
|
POSTINSTALL+= bdftopcf win/X11/nh10.bdf > $(HACKDIR)/nh10.pcf; ( cd $(HACKDIR); mkfontdir -x .lev );
|
|
CFLAGS += -DX11_GRAPHICS -I/opt/X11/include
|
|
# avoid repeated complaints about _X_NONNULL(args...) in <X11/Xfuncproto.h>
|
|
CFLAGS += -Wno-variadic-macros
|
|
endif # WANT_WIN_X11
|
|
|
|
ifdef WANT_WIN_QT
|
|
CFLAGS += -DQT_GRAPHICS -DNOUSER_SOUNDS
|
|
CFLAGS += $(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)
|
|
LINK=$(CXX)
|
|
WINSRC += $(WINQT4SRC)
|
|
WINOBJ0 += $(WINQT4OBJ)
|
|
VARDATND += rip.xpm
|
|
MOC = moc
|
|
|
|
# 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
|
|
endif # WANT_WIN_QT
|
|
|
|
# prevent duplicate tile.o in WINOBJ
|
|
WINOBJ = $(sort $(WINOBJ0))
|
|
|
|
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;
|
|
CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE
|
|
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_WIN_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
|
|
|
|
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.
|
|
|
|
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)
|
|
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.pkg
|
|
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) -R $(GAMEUID) $(HACKDIR) >> PKGSCRIPTS/postinstall
|
|
echo $(CHGRP) -R $(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
|