# 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 GAME = falconseye # GAME = nethack.prg GAMEUID = root GAMEGRP = games # Permissions - some places use setgid instead of setuid, for instance # See also the option "SECURE" in include/config.h GAMEPERM = 02755 FILEPERM = 0664 EXEPERM = 0755 DIRPERM = 0775 # 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) REALGAMEDIR = $(PREFIX)/share/$(GAME)dir GAMEDIR = $(DESTDIR)${REALGAMEDIR} VARDIR = $(GAMEDIR) SHELLDIR = ${DESTDIR}$(PREFIX)/bin # 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 = chown CHGRP = chgrp # ---------------------------------------------- # 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 recover $(VARDAT) dungeon spec_levs check-dlb @echo "Done." Guidebook: ( cd doc ; $(MAKE) Guidebook ) recover: ( cd util ; $(MAKE) recover ) 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;$(REALGAMEDIR);' \ -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) ; \ 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 )