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.
336 lines
12 KiB
Groff
336 lines
12 KiB
Groff
#
|
|
# NetHack 3.6 macosx10.8 $NHDT-Date: 1566346607 2019/08/21 00:16:47 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.38 $
|
|
# Copyright (c) Kenneth Lorber, Kensington, Maryland, 2009.
|
|
# NetHack may be freely redistributed. See license for details.
|
|
#
|
|
#-PRE
|
|
# Mac OS X (Darwin) hints file
|
|
# This is for Mac OS X 10.8, Mountain Lion, and also 10.9.
|
|
#
|
|
# X11 is no longer included with OSX.
|
|
# To regain X11, download and install XQuartz. (Attempting to run X11.app
|
|
# will describe how.) Xcode (not related to X11) has also changed since
|
|
# earlier versions and some tools are no longer in their previous locations.
|
|
#
|
|
# 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
|
|
|
|
# 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 Qt2 or Qt3
|
|
# library installation root. (Qt4 will not work; Qt3 does not presently
|
|
# compile under Leopard (MacOSX 10.5) out-of-the-box.)
|
|
# B) set XPMLIB to point to the Xpm library
|
|
ifdef WANT_WIN_QT
|
|
QTDIR=/Developer/Qt
|
|
LIBXPM= -L/opt/X11/lib -lXpm
|
|
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=gcc
|
|
|
|
# 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 -ansi -pedantic -Wno-long-long
|
|
# 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\"
|
|
CFLAGS+= -DGDBPATH=\"/Developer/usr/bin/gdb\"
|
|
|
|
ifdef WANT_WIN_CHAIN
|
|
CFLAGS+= -DWINCHAIN
|
|
HINTSRC=$(CHAINSRC)
|
|
HINTOBJ=$(CHAINOBJ)
|
|
endif
|
|
|
|
ifdef WANT_WIN_TTY
|
|
WINSRC = $(WINTTYSRC)
|
|
WINOBJ = $(WINTTYOBJ)
|
|
WINLIB = $(WINTTYLIB)
|
|
WINTTYLIB=-lncurses
|
|
else # !WANT_WIN_TTY
|
|
CFLAGS += -DNOTTYGRAPHICS
|
|
endif # !WANT_WIN_TTY
|
|
|
|
ifdef WANT_WIN_X11
|
|
WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11
|
|
VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm
|
|
POSTINSTALL+= bdftopcf win/X11/nh10.bdf > $(INSTDIR)/nh10.pcf; ( cd $(INSTDIR); mkfontdir -x .lev );
|
|
# separate from CFLAGS so that we don't pass it to every file
|
|
X11CFLAGS = -I/opt/X11/include
|
|
CFLAGS += -DX11_GRAPHICS
|
|
# avoid repeated complaints about _X_NONNULL(args...) in <X11/Xfuncproto.h>
|
|
X11CFLAGS += -Wno-variadic-macros
|
|
ifdef USE_XPM
|
|
CFLAGS += -DUSE_XPM
|
|
WINX11LIB += -lXpm
|
|
VARDATND += rip.xpm
|
|
endif
|
|
WINSRC += $(WINX11SRC)
|
|
WINOBJ += $(WINX11OBJ)
|
|
WINLIB += $(WINX11LIB)
|
|
LFLAGS=-L/opt/X11/lib
|
|
endif # WANT_WIN_X11
|
|
|
|
ifdef WANT_WIN_QT
|
|
CFLAGS += -DQT_GRAPHICS -DNOUSER_SOUNDS
|
|
CFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4
|
|
LINK=g++
|
|
WINSRC += $(WINQTSRC)
|
|
WINLIB += $(WINQTLIB) $(LIBXPM)
|
|
WINLIB += -framework Carbon -framework QuickTime -lz -framework OpenGL
|
|
WINLIB += -framework AGL
|
|
ifdef WANT_WIN_X11
|
|
# prevent duplicate tile.o in WINOBJ
|
|
WINOBJ = $(sort $(WINQTOBJ) $(WINX11OBJ))
|
|
ifdef WANT_WIN_TTY
|
|
WINOBJ += $(WINTTYOBJ)
|
|
endif # WANT_WIN_TTY
|
|
else # !WANT_WIN_X11
|
|
WINOBJ += $(WINQTOBJ)
|
|
endif # !WANT_WIN_X11
|
|
|
|
# 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
|
|
|
|
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
|
|
INSTDIR=$(HACKDIR)
|
|
VARDIR=$(HACKDIR)
|
|
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)/nethackdir
|
|
INSTDIR=$(HACKDIR)
|
|
VARDIR=$(HACKDIR)
|
|
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 $(INSTDIR)/sysconf; $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf; chmod $(VARFILEPERM) $(INSTDIR)/sysconf;
|
|
CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE
|
|
else ifdef WANT_SOURCE_INSTALL
|
|
PREFIX=$(abspath $(NHSROOT))
|
|
# suppress nethack.sh
|
|
#SHELLDIR=
|
|
HACKDIR=$(PREFIX)/playground
|
|
INSTDIR=$(HACKDIR)
|
|
VARDIR=$(HACKDIR)
|
|
CHOWN=/usr/bin/true
|
|
CHGRP=/usr/bin/true
|
|
GAMEPERM = 0700
|
|
VARFILEPERM = 0600
|
|
VARDIRPERM = 0700
|
|
# 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
|
|
INSTDIR=$(HACKDIR)
|
|
VARDIR=$(HACKDIR)
|
|
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 $(INSTDIR)/sysconf; $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf; chmod $(VARFILEPERM) $(INSTDIR)/sysconf;
|
|
CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE
|
|
endif # !WANT_SOURCE_INSTALL
|
|
|
|
|
|
# ~/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
|
|
PKGR=$(DEVUTIL)/PackageMaker.app/Contents/MacOS/PackageMaker
|
|
SVS=$(shell $(NHSROOT)/util/makedefs --svs)
|
|
SVSDOT=$(shell $(NHSROOT)/util/makedefs --svs .)
|
|
|
|
PKGROOT_UG = PKGROOT/usr/games
|
|
PKGROOT_UGLN = PKGROOT/usr/games/lib/nethackdir
|
|
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 |ps2pdf - > Guidebook.pdf)
|
|
cp doc/Guidebook.pdf $(PKGROOT_UG)/doc/NetHackGuidebook.pdf
|
|
|
|
osacompile -o PKGROOT/Applications/NetHackGuidebook.app \
|
|
win/macosx/NetHackGuidebook.applescript
|
|
|
|
$(PKGR) --root PKGROOT --info Info.plist -e RESOURCES -v -o 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_UG)/bin $(PKGROOT_UG)/man/man6 $(PKGROOT_UG)/doc $(PKGROOT_UGLN)
|
|
install -p src/nethack $(PKGROOT_UG)/bin
|
|
# XXX should this be called nethackrecover?
|
|
install -p util/recover $(PKGROOT_UG)/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)
|
|
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
|
|
# XXX may need postinstall script to get perms right for sgid, etc.
|
|
mkdir $(PKGROOT_UGLN)/save
|
|
# XXX what about a news file?
|
|
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
|