Set things up so that the Makefile build will look for 'make.prefs'
at the top of the NetHack source tree.
If 'make.prefs' is present, the Makefile build will include it
just ahead of the PRE section of a hints file specified to
sys/unix/setup.sh, or practically the first thing during a
Makefile build if no hints file was specified.
The advantage of using a 'make.prefs' is that instead of putting a
series of Makefile variable value assignments on the command line
each time, like this:
make WANT_WIN_X11=1 WANT_WIN_TTY=1 WANT_WIN_CURSES=1 c2x=1 resp=1 update
you can, instead, put those preferences into make.prefs, like this:
# start of make.prefs
WANT_WIN_X11=1
WANT_WIN_TTY=1
WANT_WIN_CURSES=1
c2x=1
resp=1
# end of make.prefs
Now, my make command just needs to specify a target:
make update
The syntax for checking whether make.prefs exists, and for including
it, is GNU make, or bsd make, specific, so sys/unix/mkmkfile.sh will
insert the correct syntax for the make that is in-use when
sys/unix/setup.sh is executed.
The 'make.prefs' file isn't limited to Makefile variable assignments, and
can contain any valid make syntax for the version of make on your system,
but adding make syntax beyond Makefile variable assignment will cause
your make.prefs file to become specific to that version of make. There
are syntactical differences between GNU make and bsd make, particularly
for directives and conditional tests.
The 'make.prefs' file can potentially eliminate much/all of the manual
editing of distributed repository Makefiles or hints files that you, as
a NetHack developer or builder, might routinely carry out.
You have the option of placing your preference changes in 'make.prefs'
instead.
Related reference for .500 hints file variables:
In the NetHack source tree:
sys/unix/README.hints
On GitHub:
https://github.com/NetHack/NetHack/blob/NetHack-5.0/sys/unix/README-hints
For example, on macOS, where GNU make is being used, and I typically
set things up using the macOS.500 hints file:
sys/unix/setup.sh sys/unix/hints/macOS.500
I might have the following make.prefs in the root of my NetHack source tree:
#---- snip -------
$(info Attention - Using make.prefs)
WANT_MACSOUND=1
resp=1
#---- end-snip ---
For another example, on Linux, where GNU make is being used, and I
typically set things up using the linux.500 hints file:
sys/unix/setup.sh sys/unix/hints/linux.500
I might have the following make.prefs file in the root of my NetHack
source tree:
#---- snip -------
$(info Using make.prefs)
WANT_WIN_X11=1
WANT_WIN_TTY=1
WANT_WIN_CURSES=1
c2x=1
resp=1
#---- end-snip ---
916 lines
29 KiB
Plaintext
Executable File
916 lines
29 KiB
Plaintext
Executable File
# NetHack 5.0 macOS.500 $NHDT-Date: 1693359574 2023/08/30 01:39:34 $ $NHDT-Branch: keni-crashweb2 $:$NHDT-Revision: 1.138 $
|
|
# 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
|
|
# - MacOS Ventura 13 (Intel processor)
|
|
#
|
|
# 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.500
|
|
|
|
HINTSVERSION := 500
|
|
|
|
ifdef MAKEFILE_TOP
|
|
ifeq ($(MAKELEVEL),0)
|
|
PRECHECK+=checkmakefiles
|
|
# all files included from this hints file get listed
|
|
# in HINTSINCLNAMES (without suffix and without a path)
|
|
HINTSINCLNAMES := compiler cross-pre1 cross-pre2 cross-post \
|
|
gbdates-pre gbdates-post \
|
|
multiw-1 multiw-2 misc \
|
|
multisnd1-pre multisnd2-pre multisnd-post
|
|
HINTSINCLFILES := $(addsuffix .$(HINTSVERSION), $(HINTSINCLNAMES))
|
|
endif
|
|
endif
|
|
|
|
ifneq "$(USEMACPORTS)" "1"
|
|
HAVE_HOMEBREW := $(shell expr `which -s brew; echo $$?` = 0)
|
|
endif
|
|
ifneq "$(USEHOMEBREW)" "1"
|
|
HAVE_MACPORTS := $(shell expr `which -s port; echo $$?` = 0)
|
|
endif
|
|
|
|
ifndef LIBXPM
|
|
LIBXPM= -L/opt/X11/lib -lXpm
|
|
endif
|
|
|
|
#WANT_WIN_CHAIN=1
|
|
|
|
# 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 cross-pre1.500
|
|
|
|
#-INCLUDE multiw-2.500
|
|
|
|
# compiler.500 contains compiler detection and adjustments common
|
|
# to both linux and macOS
|
|
|
|
#-INCLUDE compiler.500
|
|
|
|
ifdef WANT_WIN_QT
|
|
ifeq "$(HAVE_HOMEBREW)" "1"
|
|
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
|
|
endif # HAVE_HOMEBREW
|
|
ifndef QTDIR
|
|
ifeq "$(HAVE_MACPORTS)" "1"
|
|
# Qt installed via macports
|
|
ifdef WANT_WIN_QT5
|
|
QTDIR=/opt/local/libexec/qt5
|
|
endif # WANT_WIN_QT5
|
|
ifdef WANT_WIN_QT6
|
|
QTDIR=/opt/local/libexec/qt6
|
|
endif # WANT_WIN_QT6
|
|
endif # HAVE_MACPORTS
|
|
endif # QTDIR
|
|
endif # WANT_WIN_QT
|
|
|
|
ifdef WANT_WIN_QT
|
|
ifeq "$(CLANGPPGTEQ16)" "1"
|
|
CXX=clang++ --std=c++17
|
|
CCXXFLAGS +=-Wno-c++20-attribute-extensions
|
|
endif
|
|
endif
|
|
|
|
# misc.500 must come after compiler.500
|
|
# and after QTDIR is defined
|
|
|
|
#-INCLUDE misc.500
|
|
|
|
# manpages directory
|
|
MANDIR=/usr/local/share/man/man6
|
|
PREMANPAGES = checkmandir
|
|
|
|
ifeq "$(USE_ASAN)" "1"
|
|
CFLAGS +=-fsanitize=address
|
|
LFLAGS +=-fsanitize=address
|
|
endif
|
|
|
|
# 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
|
|
#NHCFLAGS+=-DNO_CHRONICLE
|
|
#NHCFLAGS+=-DLIVELOG
|
|
# not NHCFLAGS - needed for makedefs
|
|
CFLAGS+=-DCRASHREPORT=\"/usr/bin/open\"
|
|
|
|
ifdef MAKEFILE_SRC
|
|
# default
|
|
CURSESLIB = -lncurses
|
|
ifeq "$(CURSES_UNICODE)" "sys"
|
|
NHCFLAGS+=-DCURSES_UNICODE
|
|
WINLIB += $(CURSESLIB)
|
|
else
|
|
ifeq "$(CURSES_UNICODE)" "0"
|
|
WINLIB += $(CURSESLIB)
|
|
else
|
|
ifeq "$(USE_CURSESLIB)" "1"
|
|
NHCFLAGS+=-DCURSES_UNICODE
|
|
else
|
|
# If CURSES_UNICODE is defined, we need ncursesw.
|
|
# Without CURSES_UNICODE the following simpler setting works.
|
|
# CURSESLIB = -lncurses -ltinfo
|
|
comma:=,
|
|
NCURSES_LFLAGS = $(shell pkg-config ncursesw --libs)
|
|
ifeq (,$(findstring ncursesw, $(NCURSES_LFLAGS)))
|
|
ifeq (,$(findstring ncurses, $(NCURSES_LFLAGS)))
|
|
#this indicates that pkg-config itself was unavailable
|
|
CURSESLIB = $(NCURSES_LFLAGS)
|
|
NHCFLAGS+=-DCURSES_UNICODE
|
|
endif
|
|
endif
|
|
#$(info $(NCURSES_LFLAGS))
|
|
ifeq (,$(findstring ncursesw, $(NCURSES_LFLAGS)))
|
|
HAVE_NCURSESW=0
|
|
else
|
|
HAVE_NCURSESW=1
|
|
endif
|
|
ifeq "$(HAVE_NCURSESW)" "1"
|
|
CURSESLIB = $(NCURSES_LFLAGS)
|
|
NHCFLAGS+=-DCURSES_UNICODE
|
|
else
|
|
$(info Attention: CURSES_UNICODE is not being defined without ncursesw)
|
|
endif #HAVE_NCURSESW
|
|
endif #USE_CURSESLIB
|
|
ifdef CURSESLIB
|
|
PKGCFLAGS=
|
|
ifeq "$(HAVE_HOMEBREW)" "1"
|
|
HAVE_HOMEBREW_NCURSES := $(shell expr `brew ls --versions ncurses > /dev/null; echo $$?` = 0)
|
|
#$(info HAVE_HOMEBREW_NCURSES=$(HAVE_HOMEBREW_NCURSES))
|
|
ifeq "$(HAVE_HOMEBREW_NCURSES)" "1"
|
|
# Newer versions of ncurses are commonly installed via homebrew, but intentionally unlinked.
|
|
HOMEBREW_LFLAGS := -L$(shell brew --prefix)/opt/ncurses/lib
|
|
HOMEBREW_WINLIB :=
|
|
HOMEBREW_CFLAGS = -I$(shell brew --prefix)/opt/ncurses/include
|
|
endif #HAVE_HOMEBREW_NCURSES
|
|
endif #HAVE_HOMEBREW
|
|
ifeq "$(HAVE_MACPORTS)" "1"
|
|
MACPORTS_CFLAGS = -I/opt/local/include
|
|
MACPORTS_LFLAGS = -L/opt/local/lib
|
|
CURSESLIB=
|
|
ifneq ($(wildcard /opt/local/lib/libncursesw*),)
|
|
MACPORTS_WINLIB = -lncursesw
|
|
else
|
|
MACPORTS_WINLIB = -lncurses
|
|
endif
|
|
endif #HAVE_MACPORTS
|
|
LFLAGS += $(HOMEBREW_LFLAGS) $(MACPORTS_LFLAGS)
|
|
WINLIB += $(HOMEBREW_WINLIB) $(MACPORTS_WINLIB) $(CURSESLIB)
|
|
PKGCFLAGS += $(HOMEBREW_CFLAGS) $(MACPORTS_CFLAGS)
|
|
endif #CURSESLIB
|
|
WINLIB += $(CURSESLIB)
|
|
#$(info WINLIB=$(WINLIB))
|
|
#$(info CURSESLIB=$(CURSESLIB))
|
|
endif #CURSES_UNICODE=0
|
|
endif #CURSES_UNIODE=sys
|
|
endif #MAKEFILE_SRC
|
|
|
|
ifdef WANT_MACSOUND
|
|
HAVE_SNDLIB = 1
|
|
NEEDS_SND_USERSOUNDS = 1
|
|
NEEDS_SND_SEAUTOMAP = 1
|
|
NEEDS_WAV = 1
|
|
SNDCFLAGS+= -DSND_LIB_MACSOUND
|
|
SNDLIBSRC = ../sound/macsound/macsound.m
|
|
SNDLIBOBJ = macsound.o
|
|
LFLAGS += -framework AppKit
|
|
#ifdef WANT_SPEECH
|
|
LFLAGS += -framework AVFoundation
|
|
#endif
|
|
endif
|
|
|
|
ifdef MAKEFILE_SRC
|
|
ifndef NO_NHUUID
|
|
# macOS doesn't need any extra prerequisite libraries
|
|
# so do this unconditionally, unless NO_NHUUID=1 is
|
|
# passed on the Make command line.
|
|
WANT_NHUUID=1
|
|
endif #NO_NHUUID
|
|
|
|
ifdef WANT_NHUUID
|
|
CFLAGS += -DNHUUID
|
|
UUIDOBJ = macuuid.o
|
|
LFLAGS += -framework Foundation
|
|
endif
|
|
endif #MAKEFILE_SRC
|
|
|
|
#
|
|
#-INCLUDE multisnd1-pre.500
|
|
#
|
|
|
|
# although not currently doing anything for macOS, this is
|
|
# kept in for consistency with layout of linux.500
|
|
ifeq "$(CCISCLANG)" "1"
|
|
# clang-specific starts
|
|
# clang-specific ends
|
|
else
|
|
# gcc-specific starts
|
|
# LIBCFLAGS+=
|
|
# gcc-specific ends
|
|
endif
|
|
|
|
# WINCFLAGS set from multiw-2.500
|
|
# SNDCFLAGS set from multisnd-pre.500
|
|
CFLAGS+= $(PKGCFLAGS) $(WINCFLAGS)
|
|
CFLAGS+= $(SNDCFLAGS)
|
|
CFLAGS+= $(NHCFLAGS)
|
|
CFLAGS+= $(LIBCFLAGS)
|
|
|
|
# WINCFLAGS set from multiw-2.500
|
|
# SNDCFLAGS set from multisnd-pre.500
|
|
CCXXFLAGS+= $(WINCFLAGS)
|
|
CCXXFLAGS+= $(SNDCFLAGS)
|
|
CCXXFLAGS+= $(NHCFLAGS)
|
|
CCXXFLAGS+= $(LIBCFLAGS)
|
|
|
|
VARDATND =
|
|
VARDATND0 =
|
|
|
|
ifdef WANT_WIN_CHAIN
|
|
HINTSRC=$(CHAINSRC)
|
|
HINTOBJ=$(CHAINOBJ)
|
|
endif # WANT_WIN_CHAIN
|
|
|
|
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 dodlb, 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 <X11/Xfuncproto.h>
|
|
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 += $(sort $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig \
|
|
pkg-config Qt6Gui Qt6Widgets Qt6Multimedia --cflags))
|
|
MOC = moc
|
|
MOCPATH = $(QTDIR)/share/qt/libexec/moc
|
|
WINLIB += $(shell PKG_CONFIG_PATH=$(QTDIR)/lib/pkgconfig \
|
|
pkg-config Qt6Gui Qt6Widgets Qt6Multimedia --libs)
|
|
endif # WANT_WIN_QT6
|
|
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 = $(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)
|
|
GIT_PREFIX := $(shell echo `git config nethack.substprefix` 2>&1)
|
|
|
|
ifdef GIT_HASH
|
|
GITHASH = -DNETHACK_GIT_SHA=\"$(GIT_HASH)\"
|
|
endif
|
|
ifdef GIT_BRANCH
|
|
GITBRANCH = -DNETHACK_GIT_BRANCH=\"$(GIT_BRANCH)\"
|
|
endif
|
|
ifdef GIT_PREFIX
|
|
GITPREFIX = -DNETHACK_GIT_PREFIX=\"$(GIT_PREFIX)\"
|
|
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 )
|
|
# With $(GAME) empty, the regular `recover: $(GAME)` chain no longer
|
|
# triggers lua_support, but recover.c still pulls in hack.h -> nhlua.h
|
|
# transitively. Make recover depend on lua_support explicitly.
|
|
ifdef MAKEFILE_TOP
|
|
recover: lua_support
|
|
endif
|
|
endif # WANT_LIBNH
|
|
|
|
# Lua
|
|
# 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
|
|
ifdef GITSUBMODULES
|
|
LUAFLAGS=CC='$(CC)' MYCFLAGS=' -DLUA_USE_MACOSX'
|
|
ifeq "$(CCISCLANG)" "1"
|
|
# clang
|
|
LUAFLAGS +=CWARNGCC=''
|
|
endif # clang
|
|
override LUAHEADERS = submodules/lua
|
|
override LUA2NHTOP = ../..
|
|
override LUAMAKEFLAGS=$(LUAFLAGS)
|
|
endif # GITSUBMODULES
|
|
|
|
ifdef WANT_SHARE_INSTALL
|
|
|
|
#ifdef MAKEFILE_SRC
|
|
#$(info WANT_SOURCE_INSTALL = $(WANT_SOURCE_INSTALL), WANT_SHARE_INSTALL = $(WANT_SHARE_INSTALL))
|
|
#endif
|
|
# 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) || true); chown $(GAMEUID) $(SHELLDIR)
|
|
#======= XXX can this go away?
|
|
#POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; \
|
|
# $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; \
|
|
# $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; \
|
|
# chmod $(VARFILEPERM) $(HACKDIR)/sysconf;
|
|
#>>>>>>> keni-wincw2
|
|
|
|
else ifdef WANT_SOURCE_INSTALL
|
|
|
|
#ifdef MAKEFILE_SRC
|
|
#$(info WANT_SOURCE_INSTALL = $(WANT_SOURCE_INSTALL), WANT_SHARE_INSTALL = $(WANT_SHARE_INSTALL))
|
|
#endif
|
|
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
|
|
|
|
#ifdef MAKEFILE_SRC
|
|
#$(info WANT_SOURCE_INSTALL = $(WANT_SOURCE_INSTALL), WANT_SHARE_INSTALL = $(WANT_SHARE_INSTALL))
|
|
#endif
|
|
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
|
|
|
|
PREINSTALL+= (mkdir $(SHELLDIR) || true);
|
|
POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; \
|
|
$(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; \
|
|
$(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; \
|
|
chmod $(VARFILEPERM) $(HACKDIR)/sysconf;
|
|
|
|
endif # !WANT_SHARE_INSTALL
|
|
|
|
INSTDIR=$(HACKDIR)
|
|
VARDIR=$(HACKDIR)
|
|
|
|
SYSCONFCREATE = sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf
|
|
SYSCONFINSTALL = $(SYSCONFCREATE) && \
|
|
$(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf && \
|
|
$(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf && \
|
|
chmod $(VARFILEPERM) $(INSTDIR)/sysconf;
|
|
SYSCONFENSURE = (if ! test -f $(INSTDIR)/sysconf ; then \
|
|
$(SYSCONFCREATE) && \
|
|
$(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf && \
|
|
$(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf && \
|
|
chmod $(VARFILEPERM) $(INSTDIR)/sysconf; fi );
|
|
|
|
# ~/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-pre2.500
|
|
#
|
|
#
|
|
#-INCLUDE gbdates-pre.500
|
|
#
|
|
#
|
|
#-INCLUDE multisnd2-pre.500
|
|
#
|
|
#
|
|
#-INCLUDE response.500
|
|
#
|
|
|
|
ifdef MAKEFILE_TOP
|
|
.PHONY: bundle
|
|
NHTOP=
|
|
endif
|
|
ifdef MAKEFILE_SRC
|
|
.PHONY: buildbundle bundledir updatescript
|
|
NHTOP=../
|
|
abspath := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
|
|
ABSBUNDLEPATH := $(dir $(abspath))
|
|
$(info ABSBUNDLEPATH=$(ABSBUNDLEPATH))
|
|
|
|
ifdef WANT_BUNDLE
|
|
#
|
|
# bundle
|
|
#
|
|
# $(HACKDIR)/$(GAME).app/
|
|
# Contents/
|
|
# Frameworks/
|
|
# Info.plist
|
|
# MacOS/
|
|
# $(GAME)
|
|
# PkgInfo/
|
|
# PlugIns/
|
|
# Resources/
|
|
# SharedFrameWorks/
|
|
#
|
|
BUNDLE_NAME = NetHackTerm
|
|
BUNDLE_GAMENAME = NetHack
|
|
BUNDLE_PARENTDIR = $(ABSBUNDLEPATH)bundle
|
|
BUNDLE_TOP = $(BUNDLE_PARENTDIR)/$(BUNDLE_NAME).app
|
|
BUNDLE_CONTENTSDIR = $(BUNDLE_TOP)/Contents
|
|
BUNDLE_FRAMEWORKSDIR = $(BUNDLE_CONTENTSDIR)/Frameworks
|
|
BUNDLE_MACOSDIR = $(BUNDLE_CONTENTSDIR)/MacOS
|
|
BUNDLE_PKGINFODIR = $(BUNDLE_CONTENTSDIR)/PkgInfo
|
|
BUNDLE_PLUGINSDIR = $(BUNDLE_CONTENTSDIR)/PlugIns
|
|
BUNDLE_RESOURCESDIR = $(BUNDLE_CONTENTSDIR)/Resources
|
|
BUNDLE_SHAREDFRAMEWORKSDIR = $(BUNDLE_CONTENTSDIR)/SharedFrameworks
|
|
BUNDLE_INFOPLIST = $(BUNDLE_CONTENTSDIR)/Info.plist
|
|
BUNDLE_GAME = $(BUNDLE_MACOSDIR)/$(BUNDLE_GAMENAME)
|
|
BUNDLE_LAUNCHER = $(BUNDLE_MACOSDIR)/$(BUNDLE_NAME)
|
|
ifdef NEEDS_WAV
|
|
BUNDLEWAVS = $(addsuffix .wav, $(SNDWAVS))
|
|
endif
|
|
|
|
IMAGESLIST = $(BUNDLE_NAME).icns
|
|
|
|
RESOURCES_LIST = $(BUNDLEWAVS) $(IMAGESLIST)
|
|
|
|
BUNDLE_ADD_TO_RESOURCES = $(addprefix $(BUNDLE_RESOURCESDIR)/, $(RESOURCES_LIST))
|
|
|
|
MACOS_LIST = $(BUNDLE_GAMENAME)
|
|
# NetHackGuidebook.applescript NetHackRecover.applescript NetHackTerm.applescript
|
|
|
|
BUNDLE_ADD_TO_MACOS = $(addprefix $(BUNDLE_MACOSDIR)/, $(MACOS_LIST))
|
|
|
|
endif # WANT_BUNDLE
|
|
#
|
|
# We include the bundle outside of a WANT_BUNDLE block because
|
|
# it is unlikely that anyone will use 'make WANT_BUNDLE=1 clean'
|
|
#
|
|
CLEANMORE += rm -rf ../bundle ;
|
|
endif # MAKEFILE_SRC
|
|
|
|
#
|
|
#-POST
|
|
|
|
#
|
|
#-INCLUDE gbdates-post.500
|
|
#
|
|
#
|
|
#-INCLUDE multisnd-post.500
|
|
#
|
|
|
|
ifdef MAKEFILE_TOP
|
|
ifeq ($(MAKELEVEL),0)
|
|
.PHONY: checkmakefiles
|
|
checkmakefiles:
|
|
@$(MAKE) -f sys/unix/Makefile.check \
|
|
HINTSFILE="$(HINTSFILE)" HINTSINCLFILES="$(HINTSINCLFILES)"
|
|
endif
|
|
endif
|
|
|
|
ifdef WANT_NHUUID
|
|
$(TARGETPFX)macuuid.o: ../sys/unix/macuuid.m
|
|
$(CC) $(CFLAGS) -c -o$@ $<
|
|
endif
|
|
|
|
ifdef WANT_LIBNH
|
|
# Build libnh.a by merging the engine objects, the shim windowport,
|
|
# date.o (separate from $(HOBJ) per Makefile.src), hacklib.a, and Lua's
|
|
# static archive. Use libtool -static rather than ar so hacklib.a and
|
|
# liblua-$(LUA_VERSION).a have their members merged in -- ar would archive
|
|
# them as opaque .a members and macOS ld can't dereference those.
|
|
# Depending on $(LUALIB) triggers the lua_support build (which generates
|
|
# include/nhlua.h); without it, $(HOBJ) won't compile.
|
|
# filter-out drops $(SYSOBJ) (which carries unixmain.o) and $(WINOBJ) (the
|
|
# tty windowport) from $(HOBJ); $(LIBNHSYSOBJ) supplies libnhmain.o and
|
|
# winshim.o in their place.
|
|
$(TARGETPFX)libnh.a: $(LUALIB) $(HOBJ) $(LIBNHSYSOBJ) $(DATE_O) $(TARGET_HACKLIB)
|
|
libtool -static -o $@ \
|
|
$(filter-out $(SYSOBJ) $(WINOBJ),$(HOBJ)) \
|
|
$(LIBNHSYSOBJ) $(DATE_O) $(TARGET_HACKLIB) $(LUALIB)
|
|
@echo "$@ built."
|
|
$(TARGETPFX)libnhmain.o : ../sys/libnh/libnhmain.c $(HACK_H)
|
|
$(CC) $(CFLAGS) -c -o$@ $<
|
|
# dependency tool added this to Makefile.src
|
|
#$(TARGETPFX)winshim.o : ../win/shim/winshim.c $(HACK_H)
|
|
# $(CC) $(CFLAGS) -c -o$@ $<
|
|
endif # WANT_LIBNH
|
|
|
|
ifdef MAKEFILE_DOC
|
|
checkmandir:
|
|
@( if test -d $(MANDIR) ; then true ; else mkdir -p $(MANDIR) ; fi )
|
|
endif # MAKEFILE_DOC
|
|
|
|
# -- bundle ---
|
|
#
|
|
ifdef MAKEFILE_TOP
|
|
bundle: update uudecode
|
|
( cd src ; $(MAKE) WANT_BUNDLE=1 buildbundle )
|
|
|
|
uudecode:
|
|
(cd util ; $(MAKE) WANT_BUNDLE=1 uudecode )
|
|
endif # MAKEFILE_TOP
|
|
ifdef WANT_BUNDLE
|
|
ifdef MAKEFILE_SRC
|
|
|
|
BUNDLEDIRS = $(BUNDLE_PARENTDIR) $(BUNDLE_TOP) $(BUNDLE_CONTENTSDIR) $(BUNDLE_FRAMEWORKSDIR) \
|
|
$(BUNDLE_MACOSDIR) $(BUNDLE_PKGINFODIR) $(BUNDLE_PLUGINSDIR) \
|
|
$(BUNDLE_RESOURCESDIR) $(BUNDLE_SHAREDFRAMEWORKSDIR)
|
|
|
|
BUNDLELIST = $(BUNDLE_INFOPLIST) $(BUNDLE_LAUNCHER) $(BUNDLE_ADD_TO_MACOS) $(BUNDLE_ADD_TO_RESOURCES)
|
|
|
|
buildbundle: bundledir $(BUNDLEDIRS) $(BUNDLELIST) updatescript
|
|
@echo $(GAME) bundle : $(BUNDLE_TOP)
|
|
@echo $(GAME) game : $(BUNDLE_GAME)
|
|
|
|
$(BUNDLE_RESOURCESDIR)/%: $(NHTOP)sound/wav/% | $(BUNDLE_RESOURCESDIR)
|
|
cp $< $@
|
|
|
|
#$(BUNDLE_MACOSDIR)/%: $(NHTOP)win/macosx/% | $(BUNDLE_MACOSDIR)
|
|
# cp $< $@
|
|
|
|
$(BUNDLE_MACOSDIR)/%: $(dir $(GAMEBIN))/% | $(BUNDLE_MACOSDIR)
|
|
cp $< $@
|
|
|
|
$(BUNDLE_PARENTDIR):
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_TOP): $(BUNDLE_PARENTDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_CONTENTSDIR): $(BUNDLE_TOP)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_FRAMEWORKSDIR): $(BUNDLE_CONTENTSDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_MACOSDIR): $(BUNDLE_CONTENTSDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_PKGINFODIR): $(BUNDLE_CONTENTSDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_PLUGINSDIR): $(BUNDLE_CONTENTSDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_RESOURCESDIR): $(BUNDLE_CONTENTSDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_SHAREDFRAMEWORKSDIR): $(BUNDLE_CONTENTSDIR)
|
|
mkdir -p $@
|
|
|
|
$(BUNDLE_GAME): nethack
|
|
cp nethack $@
|
|
|
|
#FIXME: replace hardcoded information with actual values derived from NetHack build
|
|
$(BUNDLE_INFOPLIST):
|
|
@echo '<?xml version="1.0" encoding="UTF-8"?>' >$@
|
|
@echo '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' >>$@
|
|
@echo '<plist version="1.0">' >>$@
|
|
@echo '<dict>' >>$@
|
|
@echo '<key>CFBundleInfoDictionaryVersion</key>' >>$@
|
|
@echo '<string>6.0</string>' >>$@
|
|
@echo '<key>CFBundleDevelopmentRegion</key>' >>$@
|
|
@echo '<string>en</string>' >>$@
|
|
@echo '<key>CFBundlePackageType</key>' >>$@
|
|
@echo '<string>APPL</string>' >>$@
|
|
@echo '<key>CFBundleGetInfoString</key>' >>$@
|
|
@echo '<string>$(BUNDLE_GAMENAME) 5.0 for MacOS</string>' >>$@
|
|
@echo '<key>CFBundleIdentifier</key>' >>$@
|
|
@echo '<string>org.nethack.macos</string>' >>$@
|
|
@echo '<key>CFBundleExecutable</key>' >>$@
|
|
@echo '<string>$(BUNDLE_NAME)</string>' >>$@
|
|
@echo '<key>CFBundleIconFile</key>' >>$@
|
|
@echo '<string>$(BUNDLE_NAME)</string>' >>$@
|
|
@echo '<key>CFBundleDisplayName</key>' >>$@
|
|
@echo '<string>$(BUNDLE_NAME)</string>' >>$@
|
|
@echo '<key>CFBundleName</key>' >>$@
|
|
@echo '<string>$(BUNDLE_NAME)</string>' >>$@
|
|
@echo '<key>CFBundleVersion</key>' >>$@
|
|
@echo '<string>NetHack 5.0.0b73</string>' >>$@
|
|
@echo '<key>CFBundleShortVersionString</key>' >>$@
|
|
@echo '<string>NetHack 5.0.0</string>' >>$@
|
|
@echo '<key>NSHumanReadableCopyright</key>' >>$@
|
|
@echo '<string>©By Stichting Mathematisch Centrum and M. Stephenson 1985-2026</string>' >>$@
|
|
@echo '<key>LSApplicationCategoryType</key>' >>$@
|
|
@echo '<string>public.app-category.adventure-games</string>' >>$@
|
|
@echo '</dict>' >>$@
|
|
@echo '</plist>' >>$@
|
|
# $(NHTOP)sys/unix/hints/macosx.sh infoplist >$@
|
|
|
|
$(BUNDLE_LAUNCHER):
|
|
@echo '#!/bin/sh' >$@
|
|
@echo 'dir=$$(dirname $$0)' >>$@
|
|
@echo 'open -a Terminal file://$${dir}/$(BUNDLE_GAMENAME)' >>$@
|
|
chmod +x $@
|
|
|
|
updatescript:
|
|
ifneq "$(SHELLDIR)" ""
|
|
if test -f $(SHELLDIR)/$(GAME); then \
|
|
cp $(SHELLDIR)/$(GAME) $(GAME).tmp; \
|
|
sed -i '' 's;\$$HACKDIR/$(GAME);$(BUNDLE_GAME);' $(SHELLDIR)/$(GAME) ; \
|
|
diff -u $(GAME).tmp $(SHELLDIR)/$(GAME) | grep "="; \
|
|
rm -f $(GAME).tmp; \
|
|
fi;
|
|
endif
|
|
|
|
# We can't use a general rule because the file name of the .uu does not match the
|
|
# uudecode target file name inside the .uu file, in this case (nhicns.uu to nethack.icns)
|
|
$(BUNDLE_RESOURCESDIR)/$(BUNDLE_NAME).icns: $(BUNDLE_RESOURCESDIR) $(NHTOP)util/uudecode \
|
|
$(NHTOP)win/share/nhicns.uu
|
|
$(NHTOP)util/uudecode $(NHTOP)win/share/nhicns.uu
|
|
mv nethack.icns $@
|
|
|
|
endif # MAKEFILE_SRC
|
|
endif # WANT_BUNDLE
|
|
|
|
#
|
|
# --- end of bundle ---
|
|
#
|
|
#
|
|
#-INCLUDE cross-post.500
|
|
#
|
|
|
|
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 appropriately.
|
|
# 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 $(PKGROOT_UGLN)/livelog
|
|
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)/livelog >> 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
|
|
#
|