#	NetHack Makefile.
#	SCCS Id: @(#)Makefile.top	3.3	95/01/05

# newer makes predefine $(MAKE) to 'make' and do smarter processing of
# recursive make calls if $(MAKE) is used
# these makes allow $(MAKE) to be overridden by the environment if someone
# wants to (or has to) use something other than the standard make, so we do
# not want to unconditionally set $(MAKE) here
#
# unfortunately, some older makes do not predefine $(MAKE); if you have one of
# these, uncomment the following line
# (you will know that you have one if you get complaints about unable to
# execute things like 'data' and 'rumors')
# MAKE = make

# make NetHack
#PREFIX	 = /usr
PREFIX = $(shell pwd)/compiled
GAME     = nethack
# GAME     = nethack.prg
GAMEUID  = games
GAMEGRP  = bin

# Permissions - some places use setgid instead of setuid, for instance
# See also the option "SECURE" in include/config.h
GAMEPERM = 04755
FILEPERM = 0644
EXEPERM  = 0755
DIRPERM  = 0755

# GAMEDIR also appears in config.h as "HACKDIR".
# VARDIR may also appear in unixconf.h as "VAR_PLAYGROUND" else GAMEDIR
#
# note that 'make install' believes in creating a nice tidy GAMEDIR for
# installation, free of debris from previous NetHack versions --
# therefore there should not be anything in GAMEDIR that you want to keep
# (if there is, you'll have to do the installation by hand or modify the
# instructions)
GAMEDIR  = $(PREFIX)/games/lib/$(GAME)dir
VARDIR  = $(GAMEDIR)
SHELLDIR = $(PREFIX)/games

# per discussion in Install.X11 and Install.Qt
VARDATND = 
# VARDATND = x11tiles pet_mark.xbm
# VARDATND = x11tiles pet_mark.xbm rip.xpm
# for Atari/Gem
# VARDATND = nh16.img title.img GEM_RSC.RSC
# for BeOS
# VARDATND = beostiles
# for Gnome
# VARDATND = x11tiles pet_mark.xbm rip.xpm mapbg.xpm

VARDATD = data oracles options quest.dat rumors
VARDAT = $(VARDATD) $(VARDATND)

# Some versions of make use the SHELL environment variable as the shell
# for running commands.  We need this to be a Bourne shell.
# SHELL = /bin/sh
# for Atari
# SHELL=E:/GEMINI2/MUPFEL.TTP

# Commands for setting the owner and group on files during installation.
# Some systems fail with one or the other when installing over NFS or for
# other permission-related reasons.  If that happens, you may want to set the
# command to "true", which is a no-op. Note that disabling chown or chgrp
# will only work if setuid (or setgid) behavior is not desired or required.
# CHOWN = chown
# CHGRP = chgrp
CHOWN = true
CHGRP = true

# ----------------------------------------------
# Extra configuration for NetHack - Falcon's Eye
# ----------------------------------------------

# The Falcon's Eye window port needs slightly more lenient permissions
# in order to e.g. access the Xlib server. In particular, we need to
# setgid instead of setuid. Therefore we must also allow group writing 
# for the files and directories.
GAMEPERM = 02755
FILEPERM = 0664
EXEPERM = 0755
DIRPERM = 0775

# Falcon's Eye directories. These also appear in jtp_win.h as
# defines JTP_MAIN_DIRECTORY, JTP_DATA_DIRECTORY, 
# JTP_GRAPHICS_DIRECTORY and JTP_SOUND_DIRECTORY.
# They are assumed to be subdirectories of the main game directory.
JTPMAINDIR = $(GAMEDIR)
JTPDATADIR = $(GAMEDIR)/config
JTPGRAPHICSDIR = $(GAMEDIR)/graphics
JTPSOUNDDIR = $(GAMEDIR)/sound
JTPMANUALDIR = $(GAMEDIR)/manual

#
# end of configuration
#

DATHELP = help hh cmdhelp history opthelp wizhelp

SPEC_LEVS = asmodeus.lev baalz.lev bigrm-?.lev castle.lev fakewiz?.lev \
	juiblex.lev knox.lev medusa-?.lev minend-?.lev minefill.lev \
	minetn-?.lev oracle.lev orcus.lev sanctum.lev soko?-?.lev \
	tower?.lev valley.lev wizard?.lev \
	astral.lev air.lev earth.lev fire.lev water.lev
QUEST_LEVS = ???-goal.lev ???-fil?.lev ???-loca.lev ???-strt.lev

DATNODLB = $(VARDATND) license
DATDLB = $(DATHELP) dungeon $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD)
DAT = $(DATNODLB) $(DATDLB)

JTPMAINFILES = nethack.ico defaults.nh
JTPDATAFILES = jtp_intr.txt jtp_keys.txt jtp_lit1.dat jtp_opts.txt jtp_snds.txt
JTPGRAPHICSFILES = *.pcx
JTPSOUNDFILES = *.mid *.raw
JTPMANUALFILES = *.jpg *.html *.css

$(GAME):
	( cd src ; $(MAKE) )

all:	$(GAME) Guidebook $(VARDAT) dungeon spec_levs check-dlb
	@echo "Done."

Guidebook:
	( cd doc ; $(MAKE) Guidebook )

manpages:
	( cd doc ; $(MAKE) manpages )

data:
	( cd dat ; $(MAKE) data )

rumors:
	( cd dat ; $(MAKE) rumors )

oracles:
	( cd dat ; $(MAKE) oracles )

#	Note: options should have already been made with make, but...
options:
	( cd dat ; $(MAKE) options )

quest.dat:
	( cd dat ; $(MAKE) quest.dat )

spec_levs:
	( cd util ; $(MAKE) lev_comp )
	( cd dat ; $(MAKE) spec_levs )
	( cd dat ; $(MAKE) quest_levs )

dungeon:
	( cd util ; $(MAKE) dgn_comp )
	( cd dat ; $(MAKE) dungeon )

x11tiles:
	( cd util ; $(MAKE) tile2x11 )
	( cd dat ; $(MAKE) x11tiles )

beostiles:
	( cd util ; $(MAKE) tile2beos )
	( cd dat ; $(MAKE) beostiles )

pet_mark.xbm:
	( cd dat ; $(MAKE) pet_mark.xbm )

rip.xpm:
	( cd dat ; $(MAKE) rip.xpm )

mapbg.xpm:
	(cd dat ; $(MAKE) mapbg.xpm )

nh16.img:
	( cd util ; $(MAKE) tile2img.ttp )
	( cd dat ; $(MAKE) nh16.img )

GEM_RSC.RSC:
	( cd dat ; $(MAKE) GEM_RSC.RSC )

title.img:
	( cd dat ; $(MAKE) title.img )

check-dlb:
	( cd dat; $(MAKE) options )
	@if egrep -s librarian dat/options ; then $(MAKE) dlb ; else true ; fi

dlb:
	( cd util ; $(MAKE) dlb )
	( cd dat ; ../util/dlb cf nhdat $(DATDLB) )


dofiles:
	target=`sed -n					\
		-e '/librarian/{' 			\
		-e	's/.*/dlb/p' 			\
		-e	'q' 				\
		-e '}' 					\
	  	-e '$$s/.*/nodlb/p' < dat/options` ;	\
	$(MAKE) dofiles-$${target-nodlb}
#comment out the next line if you don't want the Falcon's Eye files
	$(MAKE) dofiles-jtp
	cp src/$(GAME) $(GAMEDIR)
	-rm -f $(SHELLDIR)/$(GAME)
	sed -e 's;/usr/games/lib/nethackdir;$(GAMEDIR);' \
		-e 's;HACKDIR/nethack;HACKDIR/$(GAME);' \
		< sys/unix/nethack.sh \
		> $(SHELLDIR)/$(GAME)
# set up their permissions
	-( cd $(GAMEDIR) ; $(CHOWN) $(GAMEUID) $(GAME) ; \
			$(CHGRP) $(GAMEGRP) $(GAME) )
	chmod $(GAMEPERM) $(GAMEDIR)/$(GAME)
	-$(CHOWN) $(GAMEUID) $(SHELLDIR)/$(GAME)
	$(CHGRP) $(GAMEGRP) $(SHELLDIR)/$(GAME)
	chmod $(EXEPERM) $(SHELLDIR)/$(GAME)

dofiles-dlb: check-dlb
	( cd dat ; cp nhdat $(DATNODLB) $(GAMEDIR) )
# set up their permissions
	-( cd $(GAMEDIR) ; $(CHOWN) $(GAMEUID) nhdat $(DATNODLB) ; \
			$(CHGRP) $(GAMEGRP) nhdat $(DATNODLB) ; \
			chmod $(FILEPERM) nhdat $(DATNODLB) ; \
	)

dofiles-nodlb:
# copy over the game files
	( cd dat ; cp $(DAT) $(GAMEDIR) )
# set up their permissions
	-( cd $(GAMEDIR) ; $(CHOWN) $(GAMEUID) $(DAT) ; \
			$(CHGRP) $(GAMEGRP) $(DAT) ; \
			chmod $(FILEPERM) $(DAT) )

dofiles-jtp:
# create the Falcon's Eye directories and set up their permissions
# not all mkdirs have -p; those that don't will create a -p directory
	-mkdir -p $(JTPMAINDIR) $(JTPDATADIR) $(JTPGRAPHICSDIR) $(JTPSOUNDDIR) $(JTPMANUALDIR)
	-rmdir ./-p
	-$(CHOWN) $(GAMEUID) $(JTPMAINDIR) $(JTPDATADIR) $(JTPGRAPHICSDIR) $(JTPSOUNDDIR) $(JTPMANUALDIR)
	$(CHGRP) $(GAMEGRP) $(JTPMAINDIR) $(JTPDATADIR) $(JTPGRAPHICSDIR) $(JTPSOUNDDIR) $(JTPMANUALDIR)
	chmod $(DIRPERM) $(JTPMAINDIR) $(JTPDATADIR) $(JTPGRAPHICSDIR) $(JTPSOUNDDIR) $(JTPMANUALDIR)
# copy over the Falcon's Eye files
	( cd  win/jtp/gamedata; cp $(JTPMAINFILES) $(JTPMAINDIR) ; \
	mv $(JTPMAINDIR)/defaults.nh $(JTPMAINDIR)/"NetHack Defaults" ; \
	cd config; cp $(JTPDATAFILES) $(JTPDATADIR) ; \
	cd ../graphics; cp $(JTPGRAPHICSFILES) $(JTPGRAPHICSDIR) ; \
	cd ../sound; cp $(JTPSOUNDFILES) $(JTPSOUNDDIR) ; \
	cd ../manual; cp $(JTPMANUALFILES) $(JTPMANUALDIR) )
# set up their permissions
	-( cd $(JTPMAINDIR) ; $(CHOWN) $(GAMEUID) $(JTPMAINFILES) ; \
	$(CHGRP) $(GAMEGRP) $(JTPMAINFILES) ; \
	chmod $(FILEPERM) $(JTPMAINFILES) ; \
	cd $(JTPDATADIR) ; $(CHOWN) $(GAMEUID) $(JTPDATAFILES) ; \
	$(CHGRP) $(GAMEGRP) $(JTPDATAFILES) ; \
	chmod $(FILEPERM) $(JTPDATAFILES) ; \
	cd $(JTPGRAPHICSDIR) ; $(CHOWN) $(GAMEUID) $(JTPGRAPHICSFILES) ; \
	$(CHGRP) $(GAMEGRP) $(JTPGRAPHICSFILES) ; \
	chmod $(FILEPERM) $(JTPGRAPHICSFILES) ; \
	cd $(JTPSOUNDDIR) ; $(CHOWN) $(GAMEUID) $(JTPSOUNDFILES) ; \
	$(CHGRP) $(GAMEGRP) $(JTPSOUNDFILES) ; \
	chmod $(FILEPERM) $(JTPSOUNDFILES) ; \
	cd $(JTPMANUALDIR) ; $(CHOWN) $(GAMEUID) $(JTPMANUALFILES) ; \
	$(CHGRP) $(GAMEGRP) $(JTPMANUALFILES) ; \
	chmod $(FILEPERM) $(JTPMANUALFILES) )

update: $(GAME) $(VARDAT) dungeon spec_levs
#	(don't yank the old version out from under people who're playing it)
	-mv $(GAMEDIR)/$(GAME) $(GAMEDIR)/$(GAME).old
#	quest.dat is also kept open and has the same problems over NFS
#	(quest.dat may be inside nhdat if dlb is in use)
	-mv $(GAMEDIR)/quest.dat $(GAMEDIR)/quest.dat.old
	-mv $(GAMEDIR)/nhdat $(GAMEDIR)/nhdat.old
# set up new versions of the game files
	( $(MAKE) dofiles )
# touch time-sensitive files
	-touch -c $(VARDIR)/bones* $(VARDIR)/?lock* $(VARDIR)/wizard*
	-touch -c $(VARDIR)/save/*
	touch $(VARDIR)/perm $(VARDIR)/record
# and a reminder
	@echo You may also want to install the man pages via the doc Makefile.

install: $(GAME) $(VARDAT) dungeon spec_levs
# set up the directories
# not all mkdirs have -p; those that don't will create a -p directory
	-mkdir -p $(SHELLDIR)
	-rm -rf $(GAMEDIR) $(VARDIR)
	-mkdir -p $(GAMEDIR) $(VARDIR) $(VARDIR)/save
	-rmdir ./-p
	-$(CHOWN) $(GAMEUID) $(GAMEDIR) $(VARDIR) $(VARDIR)/save
	$(CHGRP) $(GAMEGRP) $(GAMEDIR) $(VARDIR) $(VARDIR)/save
	chmod $(DIRPERM) $(GAMEDIR) $(VARDIR) $(VARDIR)/save
# set up the game files
	( $(MAKE) dofiles )
# set up some additional files
	touch $(VARDIR)/perm $(VARDIR)/record $(VARDIR)/logfile
	-( cd $(VARDIR) ; $(CHOWN) $(GAMEUID) perm record logfile ; \
			$(CHGRP) $(GAMEGRP) perm record logfile ; \
			chmod $(FILEPERM) perm record logfile )
# and a reminder
	@echo You may also want to reinstall the man pages via the doc Makefile.


# 'make clean' removes all the .o files, but leaves around all the executables
# and compiled data files
clean:
	( cd src ; $(MAKE) clean )
	( cd util ; $(MAKE) clean )

# 'make spotless' returns the source tree to near-distribution condition.
# it removes .o files, executables, and compiled data files
spotless:
	( cd src ; $(MAKE) spotless )
	( cd util ; $(MAKE) spotless )
	( cd dat ; $(MAKE) spotless )
	( cd doc ; $(MAKE) spotless )
