diff --git a/sys/vms/Install370.vms b/sys/vms/Install370.vms new file mode 100644 index 000000000..12d020c82 --- /dev/null +++ b/sys/vms/Install370.vms @@ -0,0 +1,364 @@ + Instructions for Building and Installing NetHack 3.7.0 + on a VSI openVMS 9.2 system + ========================================= + +This contains a description of how to build NetHack-3.7.0 on VSI OpenVMS 9.2. +This process uses Gnu Make 4.1 (minimum) for VMS to carry out the build. +Last tested with VSI C x86-64 V7.5-009 (GEM 50XBR) on OpenVMS x86_64 V9.2-2. + +0. Please read this entire file before trying to build or install + NetHack, then read it again! + +1. Make sure all the NetHack files are in the appropriate directory + structure. You should set up a directory--referred to as "top" below + and in some of the assorted files, but which may be a subdirectory-- + that has these subdirectories + [.dat] -- data files + [.doc] -- documentation files + [.include] -- C header files + [.lib.lua546] -- Lua distribution from https://www.lua.org/ + [.src] -- primary source files + [.sys] -- parent for [.sys.*] + [.sys.share] -- files shared by several ports, including VMS + [.sys.vms] -- VMS-specific source and support files + [.util] -- sources for essential utility programs + [.win] -- parent for [.win.*] + [.win.tty] -- "window" routines for ordinary terminals + (including terminal windows on workstations) + +2. From the top of the NetHack 3.7 distribution, issue the following + pair of commands to distribute the GNU make Makefile.vms files to their + working locations for building NetHack: + $ set def [.sys.vms] + $ @vmssetup.com + $ set def [-.-] + That will place renamed copies of the following files like so, + relative to the top of the NetHack source tree: + [.sys.vms]Makefile_top.vms -> Makefile.vms + [.sys.vms]Makefile_dat.vms -> [.dat]Makefile.vms + [.sys.vms]Makefile_doc.vms -> [.doc]Makefile.vms + [.sys.vms]Makefile_src.vms -> [.src]Makefile.vms + [.sys.vms]Makefile_utl.vms -> [.util]Makefile.vms + +3. Prior to beginning compilation, go to the [.include] subdirectory and + edit vmsconf.h according to its comments. You should set Local_WIZARD + and Local_HACKDIR to appropriate values. + Other things which may be of interest are SECURE if you intend to + set up NetHack as an installed image which is granted privileges, and + SHELL which should be disabled if you intend to allow captive accounts + to run NetHack. You may also want to edit file config.h, but that's + only necessary if you want or need to disable some of the game options. + The distributed copy of config.h will work successfully on VMS; + vmsconf.h has conditional code to deal with the UNIX-specific items. + +4. After the above steps, issue the following command from the top of the + NetHack source tree to build the game from sources: + make + +5. [ FIXME: this step is not in the Makefile_top.vms yet 2024/03/08 ] + After compilation, it's time to perform installation. Issue the + following command from the top of the NetHack source tree: + make install + +6. To clean files left over from the build, issue the following command + from the top of the Nethack source tree: + make clean + +7. The file nethack.com which is copied to the playground directory can + be used to invoke NetHack, or nethack.exe can be run directly. Most + of the command-line options specified in the Unix man-page (file + [.doc]nethack.txt) are also applicable to VMS. Some comments at the + beginning of nethack.com illustrate several of the options. New + players should read the file "Guidebook.txt" which will be copied + into the playground directory as "Guidebook.doc". + + +Notes: + +1. Save files and bones files from 3.6.x and earlier versions will not + work with 3.7.0. The scoreboard file (RECORD) from 3.6.x or 3.4.x or + 3.3.x should work. + +2. To specify user-preference options in your environment, define the + logical name NETHACKOPTIONS to have the value of a quoted string + containing a comma separated list of option values. The option names + are case-insensitive. + $ define nethackoptions "noAutoPickup,Dog:Rover,Cat:Felix,DECgraphics" + One value you'll probably want to specify is "noLegacy" to turn off + the initial introductory passage. The "checkpoint" option controls + whether or not enough data is saved to disk so that the set of level + files left behind after a crash contains sufficient information for + recover.exe to be able to construct a save file after the fact. The + tradeoff for enabling checkpoint is that using it makes level changes + do more I/O and take longer. The "menustyle" option controls some + aspects of the user interface, and can be set to "menustyle:traditional" + to make nethack behave more like older versions. + + If logical name or DCL symbol NETHACKOPTIONS is not defined, NetHack + will try HACKOPTIONS instead. Regardless of whether or not either + is defined, it will also try to find a configuration file containing + additional option settings. If the value of the translation of + NETHACKOPTIONS--or HACKOPTIONS--begins with an "@" character then the + rest of the translation is assumed to be the name of the configuration + file. Otherwise, the following are tried: file specified by logical + name NETHACKINI, file SYS$LOGIN:NETHACK.INI, and file HOME:NETHACK.CNF + (note that the C run-time library sets up the value of HOME to match + sys$login). Syntax for the configuration file is similar to + NETHACKOPTIONS, but multiple lines can be used, each must start with + OPTIONS=, and comments can be included by placing '#' in the first + column. Several options which take more complex values (graphics + representation) can also be present; see the "Guidebook" for details. + (Guidebook.txt can be found in the [.doc] subdirectory; a copy gets + placed in the playground directory by install.com. Also, an example + configuration file can be found in [.win.X11]nethack.rc.) + +3. termcap is an ASCII data file containing descriptions of terminal + capabilities and the escape sequences that software must use to take + advantage of them. If you do not already have a termcap file in use + on your system there is a small one in file [.SYS.SHARE]TERMCAP. It + contains definitions for common Digital terminals, also suitable for + most clones and emulators. This file is copied into the playground + by install.com, and NetHack will use it if it can't find any other + one. NetHack uses the following sequence to attempt to locate the + termcap file: translation of the logical name TERMCAP (used as-is), + file NETHACKDIR:TERMCAP, similar file HACKDIR:TERMCAP, GNU-Emacs file + EMACS_LIBRARY:[ETC]TERMCAP.DAT, file []TERMCAP, and lastly file + $TERMCAP (which most likely would be a logical name). If NetHack + can't find the termcap file, or if the above search sequence finds a + different one than you'd prefer, then use the DCL ASSIGN or DEFINE + command to define a value for logical name TERMCAP. + + NetHack also tries fairly hard to figure out what kind of terminal + you're using. It checks for logical names (or symbols) NETHACK_TERM, + HACK_TERM, EMACS_TERM, and lastly TERM. The last is set up by the + C run-time library and you cannot use a logical name or symbol for + it. If all those fail, or if whichever one succeeds has a value of + "undefined" or "unknown" (which can happen under VMS V5.4-* and + V5.5-* for VT420 terminals), NetHack will query the VMS TERMTABLE + database used by the SMG library routines. Whatever value NetHack + eventually comes up with needs to be the name of an entry in the + termcap file, otherwise a message about "Unknown terminal type" will + be printed and NetHack will exit. + +4. Both vmsbuild.com and Makefile.src have provisions to build NetHack's + There is currently no working version of the 'curses' interface for + OpenVMS. The NetHack source code for it won't compile using + the implementation of curses which is supplied with VMS (either the + VMS-specific variant or the BSD-derived one). If someone manages + to port 'ncurses' or 'PDcurses' to OpenVMS, it may be possible to + use either of those, as ncurses works on Unix and PDcurses works + on Windows and MS-DOS. + +5. NetHack contains code which attempts to make it secure in case it's + installed with privileges (to allow the playground to be protected + against world write access). This has only undergone limited testing, + so install NetHack with privileges at your own risk. If you discover + any potential security holes, please let us know so that we can take + steps to correct the problem(s). NetHack always includes filename + punctuation when accessing files, so that it should never be affected + by inadvertent or malicious logical name definitions, and it always + deactivates installed privileges prior to spawning a subprocess. + + Note to end users: "installing with privileges" is an option for + system managers who set up system-wide access to the game. Since + CMKRNL privilege and modification of the system boot routines are + both required, it is not an option for ordinary users. There are + no explicit instructions on how to do such an installation, because + only system managers who are already familiar with the process and + its potential security ramifications should even consider it. + + The default setup by install.com assumes no privileges and uses + world-writable files to allow arbitrary users to play. This is + NOT secure and not advisable in any environment where there are + untrustworthy users, but works fine for many sites. If you allow + users to run NetHack from captive accounts (VMS 5.1-* or earlier) + or from restricted accounts (5.2 and later), you should either make + sure that they do not have TMPMBX privilege or else disable NetHack's + ability to spawn an interactive subprocess. To disable subprocesses, + disable the "!" (shell escape) command by commenting out the definition + of SHELL in vmsconf.h prior to building the program. This necessity + may be removed in some future release, where NetHack will check for + captive accounts instead of spawning unconditionally. Note that + disabling the SHELL command also prevents spawning MAIL when scrolls + of new mail are received. + + In order for installed privileges to be used at all, the value of + HACKDIR (via Local_HACKDIR in vmsconf.h) compiled into the program + must correspond to the actual playground directory. If logical name + HACKDIR (or NETHACKDIR) is used to override that value, installed + privileges will be deactivated unless its value corresponds to the + same device and directory as the internal value. If that internal + value contains a logical name, only an executive-mode translation + will be honored; if there is no such translation, installed privs + will be deactivated. + + To be able to install nethack.exe with privileges (SYSPRV or GRPPRV, + perhaps EXQUOTA, depending on site usage and needs), you'll need to + link it with debugging and tracebacks both disabled. You can do this + by specifying an argument to vmsbuild.com when performing step #6 + above; pass it "/noTrace/noDebug" as the 4th parameter. + $ @[.SYS.VMS]VMSBUILD "" "" "" "/noTrace/noDebug" + /Trace/noDebug is the linker's normal default. If you've already + built NetHack, you can relink with tracebacks disabled by doing + $ @[.SYS.VMS]VMSBUILD "LINK" "" "" "/noTrace/noDebug" + +6. If you can't or won't install nethack.exe with privileges and if you + don't have access to a privileged account yourself, then if you intend + to allow other users to access your copy of NetHack you should probably + place an ACL on the playground directory and its save subdirectory. + The access control list should contain a default protection ACE which + grants delete+control access to the playground owner (ie, your own + account if there's no special games account involved). install.com + does not attempt to do this automatically at the present time. After + executing install.com to create the playground directory, perform a + pair of commands similar to the following + $ SET ACL/ACL=(IDENT=your_id, OPTIONS=DEFAULT, ACCESS=R+W+E+D+C) - + $_ device:[playground's.parent.directory]playground.DIR + $ SET ACL/ACL=(IDENT=your_id, OPTIONS=DEFAULT, ACCESS=R+W+E+D+C) - + $_ device:[playground.directory]SAVE.DIR + The two commands use the same options, but SET ACL won't accept a + list of files to modify. (For recent versions of VMS, SET ACL was + made obsolete in favor of SET FILE/ACL, which in turn has been made + obsolete in favor of SET SECURITY/CLASS=FILE/ACL; however, the older + forms will still work.) 'your_id' should be the rights identifier + which corresponds to the account which should retain access to those + files; 'device:[playground's.parent.directory]' is the name of the + parent directory for the playground (ie, if your playground directory + is disk$foo:[me.games.nethack.play], then you want to specify + disk$foo:[me.games.nethack]play.dir on the SET ACL command), and + 'device:[playground.directory]' is the playground itself. Those ACLs + establish a default protection scheme such that every newly created + file in those directories will have an ACL attached to it, and the + attached ACL will grant 'your_id' full access to the corresponding + file. That should allow you to clear away level files from aborted + games, and to delete old save files if necessary. It will not enable + you to run recover.exe on behalf of other users, because you won't be + able to create files owned by them unless you have elevated privileges. + +7. Many NetHack commands can be aborted by sending it the + character when it wants input. This is displayed as ESC inside the + game. Digital VK201 keyboards (used by VT2xx and VT3xx and older + VAXstations) and VK401 keyboards (used by VT4xx, newer VAXstations, + and DEC's X Terminals) do not have an key. They may + transmit for the key if the terminal or emulator + window is set to operate in VT100 mode, or there may be a setup-type + option for making the <` | ~> key behave as . If your + terminal does not have that, or if it's set to a mode where that + won't work, then just use instead. (Press the "[" key while + holding down the "Ctrl" key, then release both; and + have the same ASCII code and are indistinguishable once they reach + the computer; note that VAXstations and X Terminals _can_ tell the + difference, but that won't matter for NetHack.) + + VMS NetHack is configured to use the SYS$QIOW system service for + reading characters from the keyboard. This allows ^C and ^Y (as well + as ^X and ^O for wizard mode debugging) to be used as commands without + being intercepted or interpreted by the terminal driver. The code + which parses arrow and function keys is not perfect, and it's possible + to get strange results if you hold such keys down or just type too + quickly, particularly on slow multiplexor lines. Those keys are + never needed in actual play, and most function keys are just treated + as for use in aborting partial commands. + + VMS NetHack also still has code to use SMG$READ_KEYSTROKE instead. + That can be activated by modifying vmsconf.h and recompiling, but + it should never be necessary. If you use it, you'll need to press + either or twice to abort partial commands, or else + press an arbitrary function key, such as , once. + + If SUSPEND is defined in vmsconf.h, is used for that command. + Since Unix-style job control is not available, it's used for connecting + to the parent process if NetHack is running in a subprocess. When not + in a subprocess, it doesn't do anything except give a message to the + effect that it's not doing anything.... The suspend command does not + save the current game; if you use ^Z to attach to your parent process, + be sure to remember to eventually reattach to the NetHack subprocess; + otherwise the game in progress won't get saved when you logout. + +8. NetHack optionally maintains a logfile which receives one line appended + to it whenever a game ends. This can be disabled entirely by adding + an "#undef LOGFILE" directive to vmsconf.h prior to building the + program, or it can be disabled later by removing the file(s) LOGFILE.;* + from the playground directory. If not disabled prior to compilation, + the logfile can be reinitialized by simply creating an empty file + named LOGFILE in the playground, but make sure that users are able + to write into it, or new entries will not be appended. A somewhat + more elaborate log file named XLOGFILE containing more information is + handled similarly. + +9. Some attempt at support for VMS versions earlier than V4.6 has been + included, but no such obsolete system was available for testing it. + vmsbuild.com detects the need for the extra support routines and + arranges automatically for them to be compiled. The reason that + special support is needed is that the C Run-Time Library (VAXCRTL) + underwent a major revision for VMS V4.6 and several routines which + NetHack utilizes were not available prior to that upgrade. + + [That was written many years ago and the chance of it still working + is very small.] + +10. To access "wizard mode"--intended for debugging purposes, not to + spoil the game with unlimited wishes--you must be running from the + username compiled into the game via Local_WIZARD in vmsconf.h, and + you must specify "-D" on the command line when invoking NetHack. + Note that -D must be uppercase, and it must be in quotes to prevent + the C run-time library's program startup code from converting it into + lowercase. + $ @hackdir:nethack "-D" + Any character name you specify will be ignored in favor of "wizard". + + [More out of date information. Rather than compile-time Local_WIZARD, + users(s) allowed to run in wizard mode are now controlled by the entry + WIZARDS in the file SYSCONF.] + +11. At program startup time, NetHack uses the empty file PERM to prevent + two different processes from using the same character name (under the + same UIC ownership) at the same time. It does this by temporarily + giving that file a second directory entry named PERM.LOCK, then + removing the alternate entry once started. If the PERM file is + missing or inaccessible, NetHack will give a message and then quit. + Several possible messages and their usual causes are: + Can't find file perm;1 to lock! + PERM.;1 is missing from the playground directory. Fix: reinstall + the playground directory using install.com, or use CREATE or an editor + to make an empty file named PERM. Version number must be 1. + Can't lock perm;1 due to directory protection. + The playground directory is not allowing write access. Fix: players + need to be able to write files for dungeon levels and "bones" into + the playground directory. Set the protection or ACL on the xxx.DIR;1 + file in the playground's parent directory to allow write access. + Can't unlink perm.lock;1. + The empty file PERM.;1 is protected against delete access; only matters + under some versions of VMS. Fix: set the protection or ACL on PERM.;1 + to allow delete access to players. Under VMS V5.5-2, delete access is + not necessary. PERM does not have to remain writable. + Waiting for access to perm;1. (# retries left). + If some other process is also starting up NetHack at about the same + time, you may have to wait a short period. NetHack will retry once + per second, counting down to 0. If 0 is reached, the message + Perhaps there is an old perm.lock;1 around? + will be displayed and then NetHack will give up. Fix: to forcibly + remove a stale PERM.LOCK entry, issue the following command + $ SET FILE/REMOVE PERM.LOCK;1 + from the playground directory. The file PERM should remain intact. + Do not use that command for real files, only alternate directory + entries. If output from a DIRECTORY command on the playground reports + PERM.LOCK;1 no such file + then someone has deleted PERM.;1 while the synonym entry was still + in place, and PERM.LOCK was left as a dangling name which no longer + points at any file. The SET FILE/REMOVE command above will fix the + dangling name; a new PERM.;1 will need to be created as mentioned above. + + In similar fashion, synchronized access to the scoreboard file RECORD + is accomplished using temporary entry RECORD.LOCK and LOGFILE using + entry LOGFILE.LOCK. + +12. If necessary, send problem reports via e-mail to + + Always include version information for NetHack, the operating system + version, and the C compiler and version used, and the version of GNU + make utility used. + +8-March-2024 +# NetHack 3.7 Install370.vms $NHDT-Date: 1575245132 2019/12/02 00:05:32 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.16 $ +# NetHack may be freely redistributed. See license for details. diff --git a/sys/vms/Makefile_dat.vms b/sys/vms/Makefile_dat.vms new file mode 100644 index 000000000..37dd5e2d3 --- /dev/null +++ b/sys/vms/Makefile_dat.vms @@ -0,0 +1,156 @@ +# NetHack Datafiles Makefile.dat $NHDT-Date: 1596486993 2020/08/03 20:36:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.32 $ +# Copyright (c) 2018 by Pasi Kallinen +# NetHack may be freely redistributed. See license for details. + +# Root of source tree: +NHSROOT=.. + +# relative directories to dat +DOC=[-.doc] +DAT=[-.dat] +INCL=[-.include] +SRC=[-.src] +UTIL=[-.util] +SYSVMS=[-.sys.vms] +SYSSHR=[-.sys.share] +SYSUNIX=[-.sys.unix] +WINTTY=[-.win.tty] +WINSHR=[-.win.share] +WINTTY=[-.win.tty] +WINCURS=[-.win.curses] +WINX11=[-.win.X11] +WINQT=[-.win.Qt] +WINSHIM=[-.win.shim] +WINCHAIN=[-.win.chain] + +# Lua location relative to src +LUAVER=546 +LUADOTVER=5.4.6 +LUAUNDERVER=5_4_6 +LUAINC=[-.lib.lua.lua$(LUAVER).src] +LUALIB=[-.lib.lua]lua$(LUAVER).olb +LUASRCDIR =[-.lib.lua.lua$(LUAVER).src] +LUASRCINCDIR=$(LUASRCDIR) +#LUASRCINCDIR=SYS$COMMON:[LUA.INCLUDE] + +# +# If your compiler needs an appropriate switch to accept C99 code. +# VSI C defaults to /STANDARD=relaxed which allows several C +# dialects including C99. +# +# CSTD=/STANDARD=C99 +# + +# Compiler flags +CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD) +CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS) + +# Link flags +LFLAGS = + +# external programs +# MAKE = make +CC = CC +#$(TOUCH) :=SET FILE/TRUNCATE +TOUCH = append/New _NLA0: # only one file per $($(TOUCH)) +LINK = link +RM = delete +#TRUE uses an actual helper true.exe +TRUE = true +#FALSE uses an actual helper false.exe +FALSE = false +#ECHO uses an actual helper echo.exe +ECHO = echo +CXX ?= CXX +MOC ?= moc +MOCPATH ?= $(QTDIR)/bin/$(MOC) +# The default is for the TARGET_* variables to match the defaults. +# If we're cross-compiling these will get overridden elsewhere, likely via + +VARDAT = bogusmon data engrave epitaph rumors oracles options + +all: $(VARDAT) spec_levs quest_levs + +$(UTIL)makedefs.exe: + pipe set def [-.util] && $(MAKE) makedefs && set def [-.dat] + +$(UTIL)tile2x11.exe: + pipe set def [-.util] && $(MAKE) tile2x11 && set def [-.dat] + +$(UTIL)tile2bmp.exe: + pipe set def [-.util] && $(MAKE) tile2bmp) && set def [-.dat] + +$(UTIL)x11tiles.exe : $(UTIL)tile2x11.exe ../win/share/monsters.txt \ + ../win/share/objects.txt ../win/share/other.txt \ + ../win/share/monsters.txt + mcr $(UTIL)tile2x11.exe ../win/share/monsters.txt \ + ../win/share/objects.txt ../win/share/other.txt \ + -grayscale ../win/share/monsters.txt + +nhtiles.bmp: $(UTIL)tile2bmp.exe ../win/share/monsters.txt \ + ../win/share/objects.txt \ + ../win/share/other.txt + mcr $(UTIL)tile2bmp.exe $@ + +NetHack.ad: ../win/X11/NetHack.ad +# handle "#define foo bar" -lines + grep ^#define ../win/X11/NetHack.ad | \ + sed -e 's/^#define/s/g' -e 's/ */ /g' \ + -e 's/$$/ g/g' > NetHack.ad.tmp + grep -v ^#define ../win/X11/NetHack.ad | \ + sed -f NetHack.ad.tmp > NetHack.ad + -rm -f NetHack.ad.tmp + +pet_mark.xbm: $(WINX11)pet_mark.xbm + copy $(WINX11)pet_mark.xbm pet_mark.xbm + +pilemark.xbm: $(WINX11)pilemark.xbm + copy $(WINX11)pilemark.xbm pilemark.xbm + +rip.xpm: $(WINX11)rip.xpm + copy $(WINX11)rip.xpm rip.xpm + +nhsplash.xpm: $(WINSHR)nhsplash.xpm + copy $(WINSHR)nhsplash.xpm nhsplash.xpm + +nethack.icns: $(WINSHR)nhicns.uu + mcr $(UUDECODE) $(WINSHR)nhicns.uu + +data: data.base $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -d + +rumors: rumors.tru rumors.fal $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -r + +oracles: oracles.txt $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -h + +engrave: engrave.txt $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -s + +epitaph: epitaph.txt $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -s + +bogusmon: bogusmon.txt $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -s + +# note: 'options' should have already been made when include/date.h was created +options: $(UTIL)makedefs.exe + mcr $(UTIL)makedefs.exe -v + +# these don't actually do anything useful now that levcomp and dngcomp are gone +spec_levs: + $(TOUCH) spec_levs +quest_levs: + $(TOUCH) quest_levs + +clean: + -delete/log spec_levs.;*,quest_levs.;*,gitinfo.txt;* + +spotless: clean + -delete/log nhdat,$(addsuffix ;*$(comma),$(VARDAT) \ + x11tiles, pet_mark.xbm, pilemark.xbm, rip.xpm, mapbg.xpm, \ + rip.img, GEM_RSC.RSC, title.img, nh16.img, NetHack.ad, \ + nhsplash.xpm, nhtiles.bmp) + +#eof# diff --git a/sys/vms/Makefile_doc.vms b/sys/vms/Makefile_doc.vms new file mode 100644 index 000000000..f797df0b7 --- /dev/null +++ b/sys/vms/Makefile_doc.vms @@ -0,0 +1,202 @@ +# NetHack Documentation Makefile. +# NetHack 3.7 Makefile.doc $NHDT-Date: 1596498290 2020/08/03 23:44:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.21 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# Root of source tree: +NHSROOT=[-] + +# relative directories from src +DOC=[-.doc] +DAT=[-.dat] +INCL=[-.include] +SRC=[-.src] +UTIL=[-.util] +SYSVMS=[-.sys.vms] +SYSSHR=[-.sys.share] +SYSUNIX=[-.sys.unix] +WINTTY=[-.win.tty] +WINSHR=[-.win.share] +WINTTY=[-.win.tty] +WINCURS=[-.win.curses] +WINX11=[-.win.X11] +WINQT=[-.win.Qt] +WINSHIM=[-.win.shim] +WINCHAIN=[-.win.chain] + +# Lua location relative to src +LUAVER=546 +LUADOTVER=5.4.6 +LUAUNDERVER=5_4_6 +LUAINC=[-.lib.lua.lua$(LUAVER).src] +LUALIB=[-.lib.lua]lua$(LUAVER).olb +LUASRCDIR =[-.lib.lua.lua$(LUAVER).src] +LUASRCINCDIR=$(LUASRCDIR) +#LUASRCINCDIR=SYS$COMMON:[LUA.INCLUDE] + +# +# If your compiler needs an appropriate switch to accept C99 code. +# VSI C defaults to /STANDARD=relaxed which allows several C +# dialects including C99. +# +# CSTD=/STANDARD=C99 +# + +# Compiler flags +CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD) +CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS) + +# Link flags +LFLAGS = + +# external programs +# MAKE = make +CC = CC +#touch :=SET FILE/TRUNCATE +touch = append/New _NLA0: +LINK = link +RM = delete +#TRUE uses an actual helper true.exe +TRUE = true +#FALSE uses an actual helper false.exe +FALSE = false +#ECHO uses an actual helper echo.exe +ECHO = echo +CXX ?= CXX +MOC ?= moc +MOCPATH ?= $(QTDIR)/bin/$(MOC) +# The default is for the TARGET_* variables to match the defaults. +# If we're cross-compiling these will get overridden elsewhere, likely via + +MAKEDEFS = $(UTIL)makedefs + +# Which version do we want to build? (XXX These are not used anywhere.) +GUIDEBOOK = Guidebook # regular ASCII file +#GUIDEBOOK = Guidebook.ps # PostScript file +#GUIDEBOOK = Guidebook.dvi # TeX device-independent file + +# Some versions of col need -x to keep them from converting spaces to tabs; +# some versions of col don't do the conversion by default and don't +# recognize the option. Sigh. +COLCMD = col -bx +#COLCMD = col -b + +# The command to use to generate a PostScript file +# PSCMD = ditroff | psdit +PSCMD = groff + +# Use the "cat" GUIDECMD if nroff and/or tbl and/or col are not installed +# Not appropriate for creating Guidebook.txt. +# GUIDECMD = cat Guidebook.txt +# +# Single page. Might need adjustment to .pl value +# GUIDECMD= $(GUIDE_PREFORMAT) | perl -pe 's/^(.mt)$$/.pl 4720v\n.in 0\n.po 8\n.ll 64m\n$$1/' | nroff -c -Tascii | $(COLCMD) +# +GUIDECMD = $(GUIDE_PREFORMAT) | nroff -c -Tascii | $(COLCMD) +ONEPAGECMD = $(ONEPAGE_PREFORMAT) | nroff -c -Tascii | $(COLCMD) \ + | sed -e '/EOF--EOF/,12345D' + +# Only generate output for the current configuration: +NHGREP = mcr $(MAKEDEFS) --grep --input - --output - +NEEDMAKEDEFS = $(MAKEDEFS) +# Generate output for all configurations: +#NHGREP = mcr $(MAKEDEFS) --grep --input - --output - --grep-define ALLDOCS +#NEEDMAKEDEFS = $(MAKEDEFS) +# Fallback: +#NHGREP = cat +#NEEDMAKEDEFS = + +GUIDEBOOK_MN_SRC = Guidebook.mn +GUIDEBOOK_MN = $(GUIDEBOOK_MN_SRC) +GUIDEBOOK_TEX_SRC = Guidebook.tex +GUIDEBOOK_TEX = $(GUIDEBOOK_TEX_SRC) + +GUIDE_PREFORMAT = cat $(GUIDEBOOK_MN) | $(NHGREP) | tbl tmac.n - +# for Guidebook.dat, unpaginated version of Guidebook.txt +ONEPAGE_PREFORMAT = cat Gbk-1pg-pfx.mn $(GUIDEBOOK_MN) Gbk-1pg-sfx.mn \ + | $(NHGREP) | tbl tmac.n - + +# the basic guidebook +Guidebook : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS) + @echo disabled $@ on vms +# $(GUIDECMD) > Guidebook + +# Fancier output for those with ditroff, psdit and a PostScript printer. +Guidebook.ps : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS) + @echo disabled $@ on vms +# $(GUIDE_PREFORMAT) | $(PSCMD) > Guidebook.ps + +# Guidebook.tex is the same as Guidebook.mn but formatted with LaTeX. +# - The invocation command for LaTeX may vary in different installations. +# - To print Guidebook.dvi you need to use a suitable dvi-driver. +# - LaTeX needs to be run twice; second pass uses Guidebook.aux made by first. +Guidebook.dvi : $(GUIDEBOOK_TEX) + @echo disabled $@ on vms +# latex $(GUIDEBOOK_TEX) +# latex $(GUIDEBOOK_TEX) + +# makedefs has more dependencies than these; this is mainly to cope with the +# case where it hasn't been built yet since it is usually needed for $(NHGREP) +# (note: 'make makedefs', not 'make $(MAKEDEFS)') +$(MAKEDEFS) : ../util/makedefs.c ../include/config.h ../src/mdlib.c \ + ../util/mdgrep.h + pipe set def $(UTIL) && make makedefs && set def [-.doc] + +GAME = nethack +MANDIR = /usr/man/man6 +MANEXT = 6 + +# manual installation for most BSD-style systems +GAMEMANCREATE = cat nethack.6 | $(NHGREP) > +RCVRMANCREATE = cat recover.6 | $(NHGREP) > +DLBMANCREATE = cat dlb.6 | $(NHGREP) > +MDMANCREATE = cat makedefs.6 | $(NHGREP) > +# manual installation for most SYSV-style systems +# GAMEMANCREATE = cat nethack.6 | $(NHGREP) | nroff -man - > +# RCVRMANCREATE = cat recover.6 | $(NHGREP) | nroff -man - > +# DLBMANCREATE = cat dlb.6 | $(NHGREP) | nroff -man - > +# MDMANCREATE = cat makedefs.6 | $(NHGREP) | nroff -man - > + +manpages: + echo $@ disabled on VMS +# -$(GAMEMANCREATE) $(MANDIR)/$(GAME).$(MANEXT) +# -$(RCVRMANCREATE) $(MANDIR)/recover.$(MANEXT) +# -$(DLBMANCREATE) $(MANDIR)/dlb.$(MANEXT) +# -$(MDMANCREATE) $(MANDIR)/makedefs.$(MANEXT) + +# manual creation for distribution +DISTRIB = Guidebook.txt nethack.txt recover.txt \ + dlb.txt makedefs.txt + +distrib: $(DISTRIB) + echo $@ disabled on VMS +# @echo "Plain text documentation is up to date." + +Guidebook.txt : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS) + echo $@ disabled on VMS +# $(GUIDECMD) > $@ +Guidebook.dat : Gbk-1pg-pfx.mn Gbk-1pg-sfx.mn $(GUIDEBOOK_MN) tmac.n tmac.nh \ + $(NEEDMAKEDEFS) + echo $@ disabled on VMS +# $(ONEPAGECMD) > $@ + +MAN2TXT = $(NHGREP) | nroff -man - | $(COLCMD) +nethack.txt : nethack.6 + echo $@ disabled on VMS +# cat nethack.6 | $(MAN2TXT) > nethack.txt +recover.txt : recover.6 + echo $@ disabled on VMS +# cat recover.6 | $(MAN2TXT) > recover.txt +dlb.txt : dlb.6 + echo $@ disabled on VMS +# cat dlb.6 | $(MAN2TXT) > dlb.txt +makedefs.txt : makedefs.6 + echo $@ disabled on VMS +# cat makedefs.6 | $(MAN2TXT) > makedefs.txt + +clean: + -delete/log Guidebook.aux;*, Guidebook.log;* + +spotless: clean + -delete/log Guidebook.;*, Guidebook.dat;*, Guidebook.ps;*, \ + Guidebook.dvi;* diff --git a/sys/vms/Makefile_src.vms b/sys/vms/Makefile_src.vms new file mode 100644 index 000000000..1dac50b89 --- /dev/null +++ b/sys/vms/Makefile_src.vms @@ -0,0 +1,832 @@ +# NetHack 3.7 Makefile.src $NHDT-Date: 1654287121 2022/06/03 20:12:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.145 $ +# Copyright (c) 2024 by Michael Allison +# NetHack may be freely redistributed. See license for details. +# +# OpenVMS GNU Makefile for OpenVMS 9.x and VSI C +# with GNU Make V4.1 (or greater). +# +# Tested on x86_64 version of OpenVMS V9.2-1. +# + +# Root of source tree: +NHSROOT=.. + +# If we're cross-compiling, a hints file will override this +# to a unique target directory, but otherwise the obj files just go +# into [-.src] +TARGETPFX= + +# relative directories from src +DOC=[-.doc] +DAT=[-.dat] +INCL=[-.include] +SRC=[-.src] +UTIL=[-.util] +SYSVMS=[-.sys.vms] +SYSSHR=[-.sys.share] +SYSUNIX=[-.sys.unix] +WINTTY=[-.win.tty] +WINSHR=[-.win.share] +WINTTY=[-.win.tty] +WINCURS=[-.win.curses] +WINX11=[-.win.X11] +WINQT=[-.win.Qt] +WINSHIM=[-.win.shim] +WINCHAIN=[-.win.chain] + +# Lua +LUAVER=546 +LUADOTVER=5.4.6 +LUAUNDERVER=5_4_6 +# Lua location relative to src +LUAINC=[-.lib.lua.lua$(LUAVER).src] +LUALIB=[-.lib.lua]lua$(LUAVER).olb +LUASRCDIR =[-.lib.lua.lua$(LUAVER).src] +LUASRCINCDIR=$(LUASRCDIR) + +# +# If your compiler needs an appropriate switch to accept C99 code. +# VSI C defaults to /STANDARD=relaxed which allows several C +# dialects including C99. +# +# CSTD=/STANDARD=C99 +# + +# Compiler flags +CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD) +CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS) + +# Link flags +LFLAGS = + +# external programs +# MAKE = make +CC = CC +#touch :=SET FILE/TRUNCATE +touch = append/New _NLA0: +LINK = link +RM = delete +#TRUE uses an actual helper true.exe +TRUE = true +#FALSE uses an actual helper false.exe +FALSE = false +#ECHO uses an actual helper echo.exe +ECHO = echo +CXX ?= CXX +MOC ?= moc +MOCPATH ?= $(QTDIR)/bin/$(MOC) +# The default is for the TARGET_* variables to match the defaults. +# If we're cross-compiling these will get overridden elsewhere, likely via +# a hints file. TARGETPFX was set above earlier. +TARGET_CC = $(CC) +TARGET_CFLAGS = $(CFLAGS) +TARGET_LINK = $(LINK) +TARGET_LFLAGS = $(LFLAGS) +TARGET_CXX = $(CXX) +TARGET_CXXFLAGS = $(CXXFLAGS) +TARGET_LIBS = $(LIBS) + +HACKLIB=hacklib.olb +HACKLIBOBJLIST=hacklib.obj,[-.util]panic.obj + +# Set SYSTEM target +SYSTEM = SysVMS + +comma:=, + +# all .h files +CONFIGBASEH := color config config1 patchlevel tradstdc hacklib integer \ + global coord vmsconf cstd nhlua unixconf \ + pcconf micro windconf warnings fnamesiz + +HACKBASEH := hack lint align dungeon wintype sym defsym \ + mkroom artilist objclass objects youprop \ + prop permonst monattk monflag monsters \ + mondata context rm botl rect region trap \ + display vision seffects selvar sndprocs stairs decl \ + quest spell obj engrave you attrib monst \ + mextra skills timeout flag winprocs sys + +CONFIG_H = $(addsuffix .h, $(addprefix $(INCL), $(CONFIGBASEH))) +HACK_H = $(addsuffix .h, $(addprefix $(INCL), $(CONFIGBASEH) $(HACKBASEH))) + +#QTn_H = +# all .c that are part of the main NetHack program and are not +# operating-system or windowing-system specific. +# Do not include date.c in this list. +HACKFILES := allmain alloc apply artifact attrib ball bones \ + botl calendar cmd coloratt dbridge decl detect dig display dlb do \ + do_name do_wear dog dogmove dokick dothrow drawing \ + dungeon eat end engrave exper explode extralev \ + files fountain getpos hack hacklib insight invent isaac64 light \ + lock mail makemon mcastu mdlib mhitm mhitu minion mklev \ + mkmap mkmaze mkobj mkroom mon \ + mondata monmove monst mplayer mthrowu muse music \ + nhlua nhlsel nhlobj objnam o_init objects \ + options pager pickup pline polyself potion pray \ + priest quest questpgr read rect region report restore \ + rip rnd role rumors save selvar sfstruct \ + shk shknam sit sounds \ + sp_lev spell stairs steal steed strutil symbols sys teleport \ + timeout topten track trap u_init utf8map \ + uhitm vault version vision weapon were wield \ + windows wizard wizcmds worm worn write zap + +# the date file +DATEFILES = date + +# --------------- +# platforms / OS +# --------------- + +# Files for sys.vms +OPENVMSFILES = vmsfiles vmsmail vmsmisc vmstty vmsunix +OPENVMSMAIN = vmsmain + +# --------------- +# window ports +# --------------- + +# files for a straight tty interface +WINTTYFILES = getline termcap topl wintty + +# Files for curses interface +WINCURSESFILES = cursmain curswins cursmisc cursdial cursstat cursinit \ + cursmesg cursinvt + +# Files for X11 interface +WINX11FILES = Window dialogs winX winmap winmenu winmesg winmisc \ + winstat wintext winval + +# Files for Qt interface +WINQTFILES = qt_bind qt_click qt_clust qt_delay qt_glyph qt_icon qt_inv \ + qt_key qt_line qt_main qt_map qt_menu qt_msg qt_plsel qt_rip qt_set \ + qt_stat qt_str qt_streq qt_svsel qt_win qt_xcmd qt_yndlg + +# shared win files +#WINSHAREFILES = ioctl + +# +# Files for a Qt 4, Qt 5, or Qt 6 interface +# +# generated source files made by Qt's 'moc' program from $(WINQT)qt_*.h; +# appended to WINQTSRC for use by 'make depend' +# WINQTMOC = qt_kde0.moc qt_main.moc qt_map.moc qt_menu.moc qt_msg.moc \ +# qt_plsel.moc qt_set.moc qt_stat.moc qt_xcmd.moc qt_yndlg.moc +# WINQTSRC = $(WINQT)qt_bind.cpp $(WINQT)qt_click.cpp \ +# $(WINQT)qt_clust.cpp $(WINQT)qt_delay.cpp \ +# $(WINQT)qt_glyph.cpp $(WINQT)qt_icon.cpp $(WINQT)qt_inv.cpp \ +# $(WINQT)qt_key.cpp $(WINQT)qt_line.cpp $(WINQT)qt_main.cpp \ +# $(WINQT)qt_map.cpp $(WINQT)qt_menu.cpp $(WINQT)qt_msg.cpp \ +# $(WINQT)qt_plsel.cpp $(WINQT)qt_rip.cpp $(WINQT)qt_set.cpp \ +# $(WINQT)qt_stat.cpp $(WINQT)qt_str.cpp $(WINQT)qt_streq.cpp \ +# $(WINQT)qt_svsel.cpp $(WINQT)qt_win.cpp $(WINQT)qt_xcmd.cpp \ +# $(WINQT)qt_yndlg.cpp $(WINQTMOC) tile.c +# WINQTOBJ = $(TARGETPFX)qt_bind.o $(TARGETPFX)qt_click.o \ +# $(TARGETPFX)qt_clust.o $(TARGETPFX)qt_delay.o \ +# $(TARGETPFX)qt_glyph.o $(TARGETPFX)qt_icon.o \ +# $(TARGETPFX)qt_inv.o $(TARGETPFX)qt_key.o $(TARGETPFX)qt_line.o \ +# $(TARGETPFX)qt_main.o $(TARGETPFX)qt_map.o $(TARGETPFX)qt_menu.o \ +# $(TARGETPFX)qt_msg.o $(TARGETPFX)qt_plsel.o $(TARGETPFX)qt_rip.o \ +# $(TARGETPFX)qt_set.o $(TARGETPFX)qt_stat.o $(TARGETPFX)qt_str.o \ +# $(TARGETPFX)qt_streq.o $(TARGETPFX)qt_svsel.o $(TARGETPFX)qt_win.o \ +# $(TARGETPFX)qt_xcmd.o $(TARGETPFX)qt_yndlg.o #$(TARGETPFX)tile.o +# + +# ----------------- +# derived variables +# ----------------- + +HACKSRC = $(addsuffix .c, $(addprefix $(SRC), $(HACKFILES))) +DATESRC = $(addsuffix .c, $(addprefix $(SRC), $(DATEFILES))) +VMSSRC = $(addsuffix .c, $(addprefix $(SYSVMS), $(OPENVMSFILES))) +WINTTYSRC = $(addsuffix .c, $(addprefix $(WINTTY), $(WINTTYFILES))) +WINCURSESSRC = $(addsuffix .c, $(addprefix $(WINCURS), $(WINCURSESFILES))) +WINX11SRC = $(addsuffix .c, $(addprefix $(WINX11), $(WINX11FILES))) +WINQTSRC = $(addsuffix .cpp, $(addprefix $(WINQT), $(WINQTFILES))) +#WINSHARESRC = $(addsuffix .c, $(addprefix $(WINSHR), $(WINSHAREFILES))) +MAINSRC = $(addsuffix .c, $(addprefix $(SYSVMS), $(OPENVMSMAIN))) + +HACKOBJS = $(addsuffix .obj, $(HACKFILES)) +DATEOBJ = $(addsuffix .obj, $(DATEFILES)) +VMSOBJS = $(addsuffix .obj, $(OPENVMSFILES)) +WINTTYOBJS = $(addsuffix .obj, $(WINTTYFILES)) +#WINCURSESOBJS = $(addsuffix .obj, $(WINCURSESFILES)) +#WINX11OBJS = $(addsuffix .obj, $(WINX11FILES)) +#WINQTOBJS = $(addsuffix .obj, $(WINQTFILES)) +#WINSHAREOBJS = $(addsuffix .obj, $(WINSHAREFILES)) +MAINOBJ = $(addsuffix .obj, $(OPENVMSMAIN)) + +# file for regular expression matching +#REGEXFILE ?= posixregex +#REGEXOBJ ?= pmatchregex +REGEXFILE ?= cppregex +ifeq "$(REGEXFILE)" "cppregex" +REGEXSRC = $(addsuffix .cpp, $(addprefix $(SYSSHR), $(REGEXFILE))) +else +REGEXSRC = $(addsuffix .c, $(addprefix $(SYSSHR), $(REGEXFILE))) +endif +REGEXOBJ = $(addsuffix .obj, $(REGEXFILE)) + +# file for termcap +TERMCAPFILE ?= tclib +TERMCAPSRC = $(addsuffix .c, $(addprefix $(SYSSHR), $(TERMCAPFILE))) +TERMCAPOBJ = $(addsuffix .obj, $(TERMCAPFILE)) + +# if you defined RANDOM in unixconf.h since your system did not come +# with a reasonable random number generator +# RANDOBJ = $(TARGETPFX)random.obj +#RANDOBJ = + +LUABASESRC = lapi lauxlib lbaselib lcode lcorolib lctype ldblib \ + ldebug ldo ldump lfunc lgc linit liolib llex \ + lmathlib lmem loadlib lobject lopcodes loslib \ + lparser lstate lstring lstrlib ltable ltablib \ + ltm lundump lutf8lib lvm lzio +#LUASRC = $(addsuffix .c, $(addprefix $(LUASRCDIR), $(LUABASESRC))) +LUAOBJS = $(addsuffix .obj, $(LUABASESRC)) +LUALIBOBJS = $(addsuffix .obj$(comma), $(LUABASESRC)) +LUASPOTLESSOBJS = $(addsuffix .obj;*$(comma), $(LUABASESRC)) + +ALLSRC = $(HACKSRC) $(VMSSRC) $(WINTTYSRC) $(WINCURSESSRC) \ + $(WINX11SRC) $(WINQTSRC) $(WINSHARESRC) \ + $(REGEXSRC) $(TERMCAPSRC) +# +# $(TARGETPFX)date.o is not included in this list +ALLOBJS = $(HACKOBJS) $(VMSOBJS) $(WINTTYOBJS) $(RANDOBJ) \ + $(WINCURSESOBJS) $(WINX11OBJS) $(WINQTOBJS) \ + $(WINSHAREOBJS) $(REGEXOBJ) $(TERMCAPOBJ) + +GAME = nethack +# GAME = nethack.prg +GAMEBIN = $(GAME).exe + +LINKOBJLIST = $(addsuffix $(comma), $(ALLOBJS)) +CLEANFILES = $(addsuffix ;*$(comma), $(ALLOBJS) $(MAINOBJ) \ + $(GAMEBIN)) \ + $(DATEOBJ);* +SPOTLESSFILES = $(addsuffix ;*$(comma), $(LUASPOTLESSOBJS) \ + luaplaceholder.obj) + +# rules +%.obj: $(SRC)%.c + $(CC) $(CFLAGS) $< /OBJECT=$@ + +%.obj: $(SYSVMS)%.c + $(CC) $(CFLAGS) $< /OBJECT=$@ + +%.obj: $(SYSSHR)%.c + $(CC) $(CFLAGS) $< /OBJECT=$@ + +%.obj: $(SYSSHR)%.cpp + $(CXX) $(CXXFLAGS) $< -o $@ + +%.obj: $(LUASRCDIR)%.c + $(CC) $(CFLAGS) /define=(LUA_USE_C89) $< /OBJECT=$@ + +# targets +.PHONY: SysVMS all pregame $(GAME) clean spotless package +.PHONY: tell-fetch-lua fetch-lua + +# first target is also the default target for 'make' without any arguments +all: $(GAME) + @echo "" + +pregame: + $(PREGAME) + +$(GAME): pregame $(HACKLIB) $(MAKEDEFS) $(LUALIB) $(WAVS) $(GAMEBIN) + @echo "$(GAME) is up to date." + +$(GAMEBIN): $(LUALIB) $(MAINOBJ) $(ALLOBJS) $(DATEOBJ) + @echo "Linking $(GAME)." +# @echo $(TARGET_LINK) $(TARGET_LFLAGS) $(MAINOBJ), \ +# $(LINKOBJLIST) $(DATEOBJ) \ +# /EXECUTABLE=$@ \ +# +sys$$common:[lua.lib]liblua.olb/library + $(AT)$(TARGET_LINK) $(TARGET_LFLAGS) $(MAINOBJ), \ + $(LINKOBJLIST) $(DATEOBJ) \ + /EXECUTABLE=$@\ + +$(LUALIB)/library + +hacklib.olb: $(HACKLIBOBJLIST) + if f$$search("hacklib.olb").eqs."" then - + library/create hacklib.olb/object + library/insert/replace hacklib.olb $(HACKLIBOBJLIST) + +#$(WINLIB) $(TARGET_LIBS) $(LUALIB) + +$(INCL)nhlua.h: + echo "/* nhlua.h - generated by Makefile.vms */" > $@ + @echo \#"include ""$(LUASRCINCDIR)lua.h""" >> $@ + @echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@ + @echo \#"include ""$(LUASRCINCDIR)lualib.h""" >> $@ + @echo \#"include ""$(LUASRCINCDIR)lauxlib.h""" >> $@ + @echo "/*nhlua.h*/" >> $@ + +#$(INCL)nhlua.h: +# echo "/* nhlua.h - generated by -vms9 */" > $@ +# @echo \#"include ""sys$$common:[lua.include]lua.h""" >> $@ +# @echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@ +# @echo \#"include ""sys$$common:[lua.include]lualib.h""" >> $@ +# @echo \#"include ""sys$$common:[lua.include]lauxlib.h""" >> $@ +# @echo "/*nhlua.h*/" >> $@ + +$(LUALIB): [-.lib.lua]lua$(LUAVER).dir $(LUAOBJS) luaplaceholder.obj + if f$$search("$(LUALIB)").eqs."" then library/create/obj $(LUALIB) + library/insert/replace $(LUALIB) $(LUALIBOBJS) luaplaceholder.obj + + +lapi.obj: $(LUASRCDIR)lapi.c +lauxlib.obj: $(LUASRCDIR)lauxlib.c +lbaselib.obj: $(LUASRCDIR)lbaselib.c +lcode.obj: $(LUASRCDIR)lcode.c +lcorolib.obj: $(LUASRCDIR)lcorolib.c +lctype.obj: $(LUASRCDIR)lctype.c +ldblib.obj: $(LUASRCDIR)ldblib.c +ldebug.obj: $(LUASRCDIR)ldebug.c +ldo.obj: $(LUASRCDIR)ldo.c +ldump.obj: $(LUASRCDIR)ldump.c +lfunc.obj: $(LUASRCDIR)lfunc.c +lgc.obj: $(LUASRCDIR)lgc.c +linit.obj: $(LUASRCDIR)linit.c +liolib.obj: $(LUASRCDIR)liolib.c +llex.obj: $(LUASRCDIR)llex.c +lmathlib.obj: $(LUASRCDIR)lmathlib.c +lmem.obj: $(LUASRCDIR)lmem.c +loadlib.obj: $(LUASRCDIR)loadlib.c +lobject.obj: $(LUASRCDIR)lobject.c +lopcodes.obj: $(LUASRCDIR)lopcodes.c +loslib.obj: $(LUASRCDIR)loslib.c +lparser.obj: $(LUASRCDIR)lparser.c +lstate.obj: $(LUASRCDIR)lstate.c +lstring.obj: $(LUASRCDIR)lstring.c +lstrlib.obj: $(LUASRCDIR)lstrlib.c +ltable.obj: $(LUASRCDIR)ltable.c +ltablib.obj: $(LUASRCDIR)ltablib.c +ltm.obj: $(LUASRCDIR)ltm.c +lundump.obj: $(LUASRCDIR)lundump.c +lutf8lib.obj: $(LUASRCDIR)lutf8lib.c +lvm.obj: $(LUASRCDIR)lvm.c +lzio.obj: $(LUASRCDIR)lzio.c + +#LUABASESRC = lapi lauxlib lbaselib lcode lcorolib lctype ldblib \ +# ldebug ldo ldump lfunc lgc linit liolib llex \ +# lmathlib lmem loadlib lobject lopcodes loslib \ +# lparser lstate lstring lstrlib ltable ltablib \ +# ltm lundump lutf8lib lvm lzio + + +luaplaceholder.obj: luaplaceholder.c + $(CC) $(CFLAGS) luaplaceholder.c /OBJECT=$@ +luaplaceholder.c: + @echo int placeholder = 1; >luaplaceholder.c + +[-.lib]lua.dir: + create/directory [-.lib.lua] + +[-]lib.dir: + create/directory [-.lib] + +[-.lib.lua]lua$(LUAVER).dir: + @echo You need to make fetch-lua + false + +fetch-lua: [-]lib.dir [-.lib]lua.dir + if f$$search("[-.lib.lua]lua$(LUAVER).tgz").eqs."" then \ + curl http://www.lua.org/ftp/lua-$(LUADOTVER).tar.gz \ + --output [-.lib.lua]lua$(LUAVER).tgz + if f$$search("[-.lib.lua]lua$(LUAVER).tgz").nes."" then \ + gzip --force -d [-.lib.lua]lua$(LUAVER).tgz + if f$$search("[-.lib.lua]lua$(LUAVER).tar").nes."" then \ + pipe set def [-.lib.lua] && \ + tar -xf lua$(LUAVER).tar && \ + set def [--.src] + if (f$$search("[-.lib.lua]lua-$(LUAUNDERVER).DIR;1").nes."" \ + .AND. f$$search("[-.lib.lua]lua$(LUAVER).dir;1").eqs."") then \ + rename [-.lib.lua]lua-$(LUAUNDERVER).DIR;1 \ + [-.lib.lua]lua$(LUAVER).dir;1 + +tile.c: $(WINSHR)tilemap.c $(HACK_H) + @( cd $(UTIL) ; $(MAKE) $(SRC)tile.c ) + +# date.c should be recompiled any time any of the source or include code +# is modified. +$(DATEOBJ): $(DATESRC) $(HACK_H) $(HACKCSRC) $(ALLOBJS) + $(TARGET_CC) $(TARGET_CFLAGS) $(GITHASH) $(GITBRANCH) \ + /OBJECT=$@ $(DATESRC) + +tags: $(CSOURCES) + @echo ctags -tw ... + @ctags -tw $(CSOURCES) + @( cd $(INCL) ; ctags -tw $(HSOURCES) ) + @( cd $(UTIL) ; $(MAKE) tags ) + +clean: + -delete/log $(CLEANFILES) + +spotless: clean + -delete/log $(SPOTLESSFILES) $(INCL)nhlua.h;* +# -$(RM) $(GAMEBIN);* + +package: + @echo packaging complete (nothing to do). + +# VMS-specific code +vmsmain.obj: $(SYSVMS)vmsmain.c $(HACK_H) $(INCL)dlb.h +vmstty.obj: $(SYSVMS)vmstty.c $(HACK_H) $(INCL)wintty.h \ + $(INCL)tcap.h +vmsunix.obj: $(SYSVMS)vmsunix.c $(HACK_H) +vmsmisc.obj: $(SYSVMS)vmsmisc.c $(SYSVMS)oldcrtl.c $(CONFIG_H) +vmsfiles.obj: $(SYSVMS)vmsfiles.c $(CONFIG_H) +vmsmail.obj: $(SYSVMS)vmsmail.c $(CONFIG_H) $(INCL)mail.h \ + $(INCL)wintype.h $(INCL)winprocs.h $(INCL)color.h + +# DO NOT DELETE THIS LINE OR CHANGE ANYTHING BEYOND IT +# +$(TARGETPFX)pcmain.obj: $(SYSSHR)pcmain.c $(HACK_H) $(INCL)dlb.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pcmain.c +$(TARGETPFX)pcsys.obj: $(SYSSHR)pcsys.c $(HACK_H) $(INCL)wintty.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pcsys.c +$(TARGETPFX)pctty.obj: $(SYSSHR)pctty.c $(HACK_H) $(INCL)wintty.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pctty.c +$(TARGETPFX)pcunix.obj: $(SYSSHR)pcunix.c $(HACK_H) $(INCL)wintty.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pcunix.c +$(TARGETPFX)pmatchregex.obj: $(SYSSHR)pmatchregex.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pmatchregex.c +$(TARGETPFX)posixregex.obj: $(SYSSHR)posixregex.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)posixregex.c +$(TARGETPFX)random.obj: $(SYSSHR)random.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)random.c +$(TARGETPFX)ioctl.obj: $(SYSSHR)ioctl.c $(HACK_H) $(INCL)tcap.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)ioctl.c +$(TARGETPFX)unixtty.obj: $(SYSSHR)unixtty.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)unixtty.c +$(TARGETPFX)unixmain.obj: $(SYSUNIX)unixmain.c $(HACK_H) $(INCL)dlb.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSUNIX)unixmain.c +$(TARGETPFX)unixunix.obj: $(SYSUNIX)unixunix.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSUNIX)unixunix.c +$(TARGETPFX)unixres.obj: $(SYSUNIX)unixres.c $(CONFIG_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSUNIX)unixres.c +$(TARGETPFX)getline.obj: $(WINTTY)getline.c $(HACK_H) $(INCL)wintty.h \ + $(INCL)func_tab.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)getline.c +$(TARGETPFX)termcap.obj: $(WINTTY)termcap.c $(HACK_H) $(INCL)wintty.h \ + $(INCL)tcap.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)termcap.c +$(TARGETPFX)topl.obj: $(WINTTY)topl.c $(HACK_H) $(INCL)tcap.h \ + $(INCL)wintty.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)topl.c +$(TARGETPFX)wintty.obj: $(WINTTY)wintty.c $(HACK_H) $(INCL)dlb.h \ + $(INCL)tcap.h $(INCL)wintty.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)wintty.c +$(TARGETPFX)cursmain.obj: $(WINCURS)cursmain.c $(HACK_H) $(INCL)wincurs.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursmain.c +$(TARGETPFX)curswins.obj: $(WINCURS)curswins.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)curswins.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)curswins.c +$(TARGETPFX)cursmisc.obj: $(WINCURS)cursmisc.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)cursmisc.h \ + $(INCL)func_tab.h $(INCL)dlb.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursmisc.c +$(TARGETPFX)cursdial.obj: $(WINCURS)cursdial.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)cursdial.h \ + $(INCL)func_tab.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursdial.c +$(TARGETPFX)cursstat.obj: $(WINCURS)cursstat.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)cursstat.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursstat.c +$(TARGETPFX)cursinit.obj: $(WINCURS)cursinit.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)cursinit.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursinit.c +$(TARGETPFX)cursmesg.obj: $(WINCURS)cursmesg.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)cursmesg.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursmesg.c +$(TARGETPFX)cursinvt.obj: $(WINCURS)cursinvt.c $(HACK_H) \ + $(INCL)wincurs.h $(WINCURS)cursinvt.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursinvt.c +$(TARGETPFX)Window.obj: $(WINX11)Window.c $(INCL)xwindowp.h \ + $(INCL)xwindow.h $(CONFIG_H) $(INCL)lint.h \ + $(INCL)winX.h $(INCL)color.h $(INCL)wintype.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)Window.c +$(TARGETPFX)dialogs.obj: $(WINX11)dialogs.c $(CONFIG_H) $(INCL)lint.h \ + $(INCL)winX.h $(INCL)color.h $(INCL)wintype.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)dialogs.c +$(TARGETPFX)winX.obj: $(WINX11)winX.c $(HACK_H) $(INCL)winX.h \ + $(INCL)dlb.h $(INCL)xwindow.h $(WINX11)nh72icon \ + $(WINX11)nh56icon $(WINX11)nh32icon + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winX.c +$(TARGETPFX)winmap.obj: $(WINX11)winmap.c $(INCL)xwindow.h $(HACK_H) \ + $(INCL)dlb.h $(INCL)winX.h $(INCL)tile2x11.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmap.c +$(TARGETPFX)winmenu.obj: $(WINX11)winmenu.c $(HACK_H) $(INCL)winX.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmenu.c +$(TARGETPFX)winmesg.obj: $(WINX11)winmesg.c $(INCL)xwindow.h $(HACK_H) \ + $(INCL)winX.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmesg.c +$(TARGETPFX)winmisc.obj: $(WINX11)winmisc.c $(HACK_H) $(INCL)func_tab.h \ + $(INCL)winX.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmisc.c +$(TARGETPFX)winstat.obj: $(WINX11)winstat.c $(HACK_H) $(INCL)winX.h \ + $(INCL)xwindow.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winstat.c +$(TARGETPFX)wintext.obj: $(WINX11)wintext.c $(HACK_H) $(INCL)winX.h \ + $(INCL)xwindow.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)wintext.c +$(TARGETPFX)winval.obj: $(WINX11)winval.c $(HACK_H) $(INCL)winX.h + $(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winval.c +$(TARGETPFX)tile.obj: tile.c $(HACK_H) +$(TARGETPFX)winshim.obj: $(WINSHIM)winshim.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINSHIM)winshim.c +$(TARGETPFX)cppregex.obj: $(SYSSHR)cppregex.cpp $(CONFIG_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(SYSSHR)cppregex.cpp +$(TARGETPFX)qt_bind.obj: $(WINQT)qt_bind.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \ + $(WINQT)qt_kde0.h $(WINQT)qt_click.h $(WINQT)qt_delay.h \ + $(WINQT)qt_xcmd.h $(WINQT)qt_key.h $(WINQT)qt_map.h \ + $(WINQT)qt_win.h $(WINQT)qt_clust.h $(WINQT)qt_menu.h \ + $(WINQT)qt_rip.h $(WINQT)qt_msg.h $(WINQT)qt_plsel.h \ + $(WINQT)qt_svsel.h $(WINQT)qt_set.h $(WINQT)qt_stat.h \ + $(WINQT)qt_icon.h $(WINQT)qt_streq.h $(WINQT)qt_line.h \ + $(WINQT)qt_yndlg.h $(WINQT)qt_str.h $(INCL)dlb.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_bind.cpp +$(TARGETPFX)qt_click.obj: $(WINQT)qt_click.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_click.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_click.cpp +$(TARGETPFX)qt_clust.obj: $(WINQT)qt_clust.cpp $(WINQT)qt_clust.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_clust.cpp +$(TARGETPFX)qt_delay.obj: $(WINQT)qt_delay.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_delay.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_delay.cpp +$(TARGETPFX)qt_glyph.obj: $(WINQT)qt_glyph.cpp $(HACK_H) \ + $(INCL)tile2x11.h $(WINQT)qt_pre.h $(WINQT)qt_post.h \ + $(WINQT)qt_glyph.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \ + $(WINQT)qt_kde0.h $(WINQT)qt_set.h $(WINQT)qt_inv.h \ + $(WINQT)qt_map.h $(WINQT)qt_win.h $(WINQT)qt_clust.h \ + $(WINQT)qt_str.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_glyph.cpp +$(TARGETPFX)qt_icon.obj: $(WINQT)qt_icon.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_icon.h $(WINQT)qt_str.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_icon.cpp +$(TARGETPFX)qt_inv.obj: $(WINQT)qt_inv.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_inv.h $(WINQT)qt_glyph.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_set.h \ + $(WINQT)qt_bind.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_inv.cpp +$(TARGETPFX)qt_key.obj: $(WINQT)qt_key.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_key.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_key.cpp +$(TARGETPFX)qt_line.obj: $(WINQT)qt_line.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_line.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_line.cpp +$(TARGETPFX)qt_main.obj: $(WINQT)qt_main.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_main.h $(WINQT)qt_kde0.h \ + qt_main.moc $(WINQT)qt_bind.h $(WINQT)qt_glyph.h \ + $(WINQT)qt_inv.h $(WINQT)qt_key.h $(WINQT)qt_map.h \ + $(WINQT)qt_win.h $(WINQT)qt_clust.h $(WINQT)qt_msg.h \ + $(WINQT)qt_set.h $(WINQT)qt_stat.h $(WINQT)qt_icon.h \ + $(WINQT)qt_str.h qt_kde0.moc $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_main.cpp +$(TARGETPFX)qt_map.obj: $(WINQT)qt_map.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_map.h $(WINQT)qt_win.h \ + $(WINQT)qt_clust.h qt_map.moc $(WINQT)qt_click.h \ + $(WINQT)qt_glyph.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_str.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_map.cpp +$(TARGETPFX)qt_menu.obj: $(WINQT)qt_menu.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_menu.h $(WINQT)qt_win.h \ + $(WINQT)qt_rip.h qt_menu.moc $(WINQT)qt_key.h \ + $(WINQT)qt_glyph.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_streq.h \ + $(WINQT)qt_line.h $(WINQT)qt_str.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_menu.cpp +$(TARGETPFX)qt_msg.obj: $(WINQT)qt_msg.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_msg.h $(WINQT)qt_win.h \ + qt_msg.moc $(WINQT)qt_map.h $(WINQT)qt_clust.h \ + $(WINQT)qt_set.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \ + $(WINQT)qt_kde0.h $(WINQT)qt_str.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_msg.cpp +$(TARGETPFX)qt_plsel.obj: $(WINQT)qt_plsel.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_plsel.h qt_plsel.moc \ + $(WINQT)qt_bind.h $(WINQT)qt_main.h $(WINQT)qt_kde0.h \ + $(WINQT)qt_glyph.h $(WINQT)qt_set.h $(WINQT)qt_str.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_plsel.cpp +$(TARGETPFX)qt_rip.obj: $(WINQT)qt_rip.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_rip.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_str.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_rip.cpp +$(TARGETPFX)qt_set.obj: $(WINQT)qt_set.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h qt_set.moc \ + $(WINQT)qt_glyph.h $(WINQT)qt_xcmd.h $(WINQT)qt_str.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_set.cpp +$(TARGETPFX)qt_stat.obj: $(WINQT)qt_stat.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_stat.h $(WINQT)qt_win.h \ + $(WINQT)qt_icon.h qt_stat.moc $(WINQT)qt_set.h \ + $(WINQT)qt_bind.h $(WINQT)qt_main.h $(WINQT)qt_kde0.h \ + $(WINQT)qt_str.h $(WINQT)qt_xpms.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_stat.cpp +$(TARGETPFX)qt_str.obj: $(WINQT)qt_str.cpp $(WINQT)qt_str.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_str.cpp +$(TARGETPFX)qt_streq.obj: $(WINQT)qt_streq.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_streq.h $(WINQT)qt_line.h \ + $(WINQT)qt_str.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_streq.cpp +$(TARGETPFX)qt_svsel.obj: $(WINQT)qt_svsel.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_svsel.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_str.h \ + $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_svsel.cpp +$(TARGETPFX)qt_win.obj: $(WINQT)qt_win.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_win.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_click.h \ + $(WINQT)qt_glyph.h $(WINQT)qt_inv.h $(WINQT)qt_key.h \ + $(WINQT)qt_icon.h $(WINQT)qt_map.h $(WINQT)qt_clust.h \ + $(WINQT)qt_menu.h $(WINQT)qt_rip.h $(WINQT)qt_msg.h \ + $(WINQT)qt_set.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_win.cpp +$(TARGETPFX)qt_xcmd.obj: $(WINQT)qt_xcmd.cpp $(HACK_H) $(INCL)func_tab.h \ + $(WINQT)qt_pre.h $(WINQT)qt_post.h $(WINQT)qt_xcmd.h \ + qt_xcmd.moc $(WINQT)qt_key.h $(WINQT)qt_bind.h \ + $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_set.h \ + $(WINQT)qt_str.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_xcmd.cpp +$(TARGETPFX)qt_yndlg.obj: $(WINQT)qt_yndlg.cpp $(HACK_H) $(WINQT)qt_pre.h \ + $(WINQT)qt_post.h $(WINQT)qt_yndlg.h qt_yndlg.moc \ + $(WINQT)qt_key.h $(WINQT)qt_str.h $(QTn_H) + $(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_yndlg.cpp +qt_kde0.moc: $(WINQT)qt_kde0.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_kde0.h +qt_main.moc: $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_main.h +qt_map.moc: $(WINQT)qt_map.h $(WINQT)qt_win.h $(WINQT)qt_clust.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_map.h +qt_menu.moc: $(WINQT)qt_menu.h $(WINQT)qt_win.h $(WINQT)qt_rip.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_menu.h +qt_msg.moc: $(WINQT)qt_msg.h $(WINQT)qt_win.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_msg.h +qt_plsel.moc: $(WINQT)qt_plsel.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_plsel.h +qt_set.moc: $(WINQT)qt_set.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \ + $(WINQT)qt_kde0.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_set.h +qt_stat.moc: $(WINQT)qt_stat.h $(WINQT)qt_win.h $(WINQT)qt_icon.h \ + $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_stat.h +qt_xcmd.moc: $(WINQT)qt_xcmd.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_xcmd.h +qt_yndlg.moc: $(WINQT)qt_yndlg.h $(QTn_H) + $(MOCPATH) /OBJECT=$@ $(WINQT)qt_yndlg.h +$(TARGETPFX)tile.obj: tile.c $(HACK_H) +$(TARGETPFX)wc_chainin.obj: $(WINCHAIN)wc_chainin.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCHAIN)wc_chainin.c +$(TARGETPFX)wc_chainout.obj: $(WINCHAIN)wc_chainout.c $(HACK_H) + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCHAIN)wc_chainout.c +$(TARGETPFX)wc_trace.obj: $(WINCHAIN)wc_trace.c $(HACK_H) $(INCL)wintty.h \ + $(INCL)func_tab.h + $(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCHAIN)wc_trace.c +$(TARGETPFX)allmain.obj: allmain.c $(HACK_H) +$(TARGETPFX)alloc.obj: alloc.c $(CONFIG_H) +$(TARGETPFX)apply.obj: apply.c $(HACK_H) +$(TARGETPFX)artifact.obj: artifact.c $(HACK_H) $(INCL)artifact.h +$(TARGETPFX)attrib.obj: attrib.c $(HACK_H) +$(TARGETPFX)ball.obj: ball.c $(HACK_H) +$(TARGETPFX)bones.obj: bones.c $(HACK_H) +$(TARGETPFX)botl.obj: botl.c $(HACK_H) +$(TARGETPFX)cmd.obj: cmd.c $(HACK_H) $(INCL)func_tab.h +$(TARGETPFX)dbridge.obj: dbridge.c $(HACK_H) +$(TARGETPFX)decl.obj: decl.c $(HACK_H) +$(TARGETPFX)detect.obj: detect.c $(HACK_H) $(INCL)artifact.h +$(TARGETPFX)dig.obj: dig.c $(HACK_H) +$(TARGETPFX)display.obj: display.c $(HACK_H) +$(TARGETPFX)dlb.obj: dlb.c $(CONFIG_H) $(INCL)dlb.h +$(TARGETPFX)do.obj: do.c $(HACK_H) +$(TARGETPFX)do_name.obj: do_name.c $(HACK_H) +$(TARGETPFX)do_wear.obj: do_wear.c $(HACK_H) +$(TARGETPFX)dog.obj: dog.c $(HACK_H) +$(TARGETPFX)dogmove.obj: dogmove.c $(HACK_H) $(INCL)mfndpos.h +$(TARGETPFX)dokick.obj: dokick.c $(HACK_H) +$(TARGETPFX)dothrow.obj: dothrow.c $(HACK_H) +$(TARGETPFX)drawing.obj: drawing.c $(CONFIG_H) $(INCL)color.h \ + $(INCL)rm.h $(INCL)objclass.h $(INCL)defsym.h \ + $(INCL)objects.h $(INCL)wintype.h $(INCL)sym.h +$(TARGETPFX)dungeon.obj: dungeon.c $(HACK_H) $(INCL)dgn_file.h \ + $(INCL)dlb.h +$(TARGETPFX)eat.obj: eat.c $(HACK_H) +$(TARGETPFX)end.obj: end.c $(HACK_H) $(INCL)dlb.h +$(TARGETPFX)engrave.obj: engrave.c $(HACK_H) +$(TARGETPFX)exper.obj: exper.c $(HACK_H) +$(TARGETPFX)explode.obj: explode.c $(HACK_H) +$(TARGETPFX)extralev.obj: extralev.c $(HACK_H) +$(TARGETPFX)files.obj: files.c $(HACK_H) $(INCL)dlb.h $(INCL)wintty.h \ + #zlib.h +$(TARGETPFX)fountain.obj: fountain.c $(HACK_H) +$(TARGETPFX)hack.obj: hack.c $(HACK_H) +$(TARGETPFX)hacklib.obj: hacklib.c $(HACK_H) +$(TARGETPFX)insight.obj: insight.c $(HACK_H) +$(TARGETPFX)invent.obj: invent.c $(HACK_H) +$(TARGETPFX)isaac64.obj: isaac64.c $(CONFIG_H) $(INCL)isaac64.h +$(TARGETPFX)light.obj: light.c $(HACK_H) +$(TARGETPFX)lock.obj: lock.c $(HACK_H) +$(TARGETPFX)mail.obj: mail.c $(HACK_H) $(INCL)mail.h +$(TARGETPFX)makemon.obj: makemon.c $(HACK_H) +$(TARGETPFX)mcastu.obj: mcastu.c $(HACK_H) +$(TARGETPFX)mdlib.obj: mdlib.c $(CONFIG_H) $(INCL)permonst.h \ + $(INCL)align.h $(INCL)monattk.h $(INCL)monflag.h \ + $(INCL)monsters.h $(INCL)objclass.h \ + $(INCL)defsym.h $(INCL)objects.h $(INCL)wintype.h \ + $(INCL)sym.h $(INCL)artilist.h $(INCL)dungeon.h \ + $(INCL)sndprocs.h $(INCL)seffects.h $(INCL)obj.h \ + $(INCL)monst.h $(INCL)mextra.h $(INCL)you.h \ + $(INCL)attrib.h $(INCL)prop.h $(INCL)skills.h \ + $(INCL)context.h $(INCL)flag.h $(INCL)dlb.h +$(TARGETPFX)mhitm.obj: mhitm.c $(HACK_H) $(INCL)artifact.h +$(TARGETPFX)mhitu.obj: mhitu.c $(HACK_H) $(INCL)artifact.h +$(TARGETPFX)minion.obj: minion.c $(HACK_H) +$(TARGETPFX)mklev.obj: mklev.c $(HACK_H) +$(TARGETPFX)mkmap.obj: mkmap.c $(HACK_H) $(INCL)sp_lev.h +$(TARGETPFX)mkmaze.obj: mkmaze.c $(HACK_H) $(INCL)sp_lev.h +$(TARGETPFX)mkobj.obj: mkobj.c $(HACK_H) +$(TARGETPFX)mkroom.obj: mkroom.c $(HACK_H) +$(TARGETPFX)mon.obj: mon.c $(HACK_H) $(INCL)mfndpos.h +$(TARGETPFX)mondata.obj: mondata.c $(HACK_H) +$(TARGETPFX)monmove.obj: monmove.c $(HACK_H) $(INCL)mfndpos.h \ + $(INCL)artifact.h +$(TARGETPFX)monst.obj: monst.c $(CONFIG_H) $(INCL)permonst.h \ + $(INCL)align.h $(INCL)monattk.h $(INCL)monflag.h \ + $(INCL)monsters.h $(INCL)wintype.h $(INCL)sym.h \ + $(INCL)defsym.h $(INCL)color.h +$(TARGETPFX)mplayer.obj: mplayer.c $(HACK_H) +$(TARGETPFX)mthrowu.obj: mthrowu.c $(HACK_H) +$(TARGETPFX)muse.obj: muse.c $(HACK_H) +$(TARGETPFX)music.obj: music.c $(HACK_H) +$(TARGETPFX)nhlua.obj: nhlua.c $(HACK_H) $(INCL)dlb.h +$(TARGETPFX)nhlsel.obj: nhlsel.c $(HACK_H) $(INCL)sp_lev.h +$(TARGETPFX)nhlobj.obj: nhlobj.c $(HACK_H) $(INCL)sp_lev.h +$(TARGETPFX)o_init.obj: o_init.c $(HACK_H) +$(TARGETPFX)objects.obj: objects.c $(CONFIG_H) $(INCL)obj.h \ + $(INCL)prop.h $(INCL)skills.h $(INCL)color.h \ + $(INCL)objclass.h $(INCL)defsym.h $(INCL)objects.h +$(TARGETPFX)objnam.obj: objnam.c $(HACK_H) +$(TARGETPFX)options.obj: options.c $(CONFIG_H) $(INCL)objclass.h \ + $(INCL)defsym.h $(INCL)objects.h $(INCL)flag.h \ + $(HACK_H) $(INCL)tcap.h $(INCL)optlist.h +$(TARGETPFX)pager.obj: pager.c $(HACK_H) $(INCL)dlb.h +$(TARGETPFX)pickup.obj: pickup.c $(HACK_H) +$(TARGETPFX)pline.obj: pline.c $(HACK_H) +$(TARGETPFX)polyself.obj: polyself.c $(HACK_H) +$(TARGETPFX)potion.obj: potion.c $(HACK_H) +$(TARGETPFX)pray.obj: pray.c $(HACK_H) +$(TARGETPFX)priest.obj: priest.c $(HACK_H) $(INCL)mfndpos.h +$(TARGETPFX)quest.obj: quest.c $(HACK_H) +$(TARGETPFX)questpgr.obj: questpgr.c $(HACK_H) $(INCL)dlb.h \ + $(INCL)wintty.h +$(TARGETPFX)read.obj: read.c $(HACK_H) +$(TARGETPFX)rect.obj: rect.c $(HACK_H) +$(TARGETPFX)region.obj: region.c $(HACK_H) +$(TARGETPFX)restore.obj: restore.c $(HACK_H) $(INCL)tcap.h +$(TARGETPFX)rip.obj: rip.c $(HACK_H) +$(TARGETPFX)rnd.obj: rnd.c $(HACK_H) $(INCL)isaac64.h +$(TARGETPFX)role.obj: role.c $(HACK_H) +$(TARGETPFX)rumors.obj: rumors.c $(HACK_H) $(INCL)dlb.h +$(TARGETPFX)save.obj: save.c $(HACK_H) +$(TARGETPFX)sfstruct.obj: sfstruct.c $(HACK_H) +$(TARGETPFX)shk.obj: shk.c $(HACK_H) +$(TARGETPFX)shknam.obj: shknam.c $(HACK_H) +$(TARGETPFX)sit.obj: sit.c $(HACK_H) $(INCL)artifact.h +$(TARGETPFX)sounds.obj: sounds.c $(HACK_H) +$(TARGETPFX)sp_lev.obj: sp_lev.c $(HACK_H) $(INCL)sp_lev.h +$(TARGETPFX)spell.obj: spell.c $(HACK_H) +$(TARGETPFX)steal.obj: steal.c $(HACK_H) +$(TARGETPFX)steed.obj: steed.c $(HACK_H) +$(TARGETPFX)symbols.obj: symbols.c $(HACK_H) $(INCL)tcap.h +$(TARGETPFX)sys.obj: sys.c $(HACK_H) +$(TARGETPFX)teleport.obj: teleport.c $(HACK_H) +$(TARGETPFX)timeout.obj: timeout.c $(HACK_H) +$(TARGETPFX)topten.obj: topten.c $(HACK_H) $(INCL)dlb.h +$(TARGETPFX)track.obj: track.c $(HACK_H) +$(TARGETPFX)trap.obj: trap.c $(HACK_H) +$(TARGETPFX)u_init.obj: u_init.c $(HACK_H) +$(TARGETPFX)utf8map.obj: utf8map.c $(HACK_H) +$(TARGETPFX)uhitm.obj: uhitm.c $(HACK_H) +$(TARGETPFX)vault.obj: vault.c $(HACK_H) +$(TARGETPFX)version.obj: version.c $(HACK_H) $(INCL)dlb.h +$(TARGETPFX)vision.obj: vision.c $(HACK_H) +$(TARGETPFX)weapon.obj: weapon.c $(HACK_H) +$(TARGETPFX)were.obj: were.c $(HACK_H) +$(TARGETPFX)wield.obj: wield.c $(HACK_H) +$(TARGETPFX)windows.obj: windows.c $(HACK_H) $(INCL)dlb.h $(INCL)wintty.h +$(TARGETPFX)wizard.obj: wizard.c $(HACK_H) +$(TARGETPFX)worm.obj: worm.c $(HACK_H) +$(TARGETPFX)worn.obj: worn.c $(HACK_H) +$(TARGETPFX)write.obj: write.c $(HACK_H) +$(TARGETPFX)zap.obj: zap.c $(HACK_H) +# DEPENDENCIES MUST END AT END OF FILE +# IF YOU PUT STUFF HERE IT WILL GO AWAY diff --git a/sys/vms/Makefile_top.vms b/sys/vms/Makefile_top.vms new file mode 100644 index 000000000..802c6e2fb --- /dev/null +++ b/sys/vms/Makefile_top.vms @@ -0,0 +1,438 @@ +# NetHack Top-level Makefile. +# NetHack 3.7 Makefile.vms $NHDT-Date: 1642630921 2022/01/19 22:22:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.72 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# Root of source tree: (Note: dot is after setup.sh has been used +# to create the active Makefiles from sys/unix/Makefile.*. +# It isn't sys/unix/ where you might happen to be reading this.) +NHSROOT=[] + +# 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 + + +# NetHack 3.7 Makefile.vms $NHDT-Date: 1654287121 2022/06/03 20:12:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.145 $ +# Copyright (c) 2023 by Michael Allison +# NetHack may be freely redistributed. See license for details. +# +# OpenVMS GNU Makefile for OpenVMS 9.x and VSI C +# with GNU Make V4.1 (or greater). +# +# Tested on x86_64 version of OpenVMS V9.2-1. +# + +# Root of source tree: +NHSROOT= + +# relative directories from top +DOC=[.doc] +DAT=[.dat] +INCL=[.include] +SRC=[.src] +UTIL=[.util] +LIB=[.lib] +SYSVMS=[.sys.vms] +SYSSHR=[.sys.share] +SYSUNIX=[.sys.unix] +WINTTY=[.win.tty] +WINSHR=[.win.share] +WINTTY=[.win.tty] +WINCURS=[.win.curses] +WINX11=[.win.X11] +WINQT=[.win.Qt] +WINSHIM=[.win.shim] +WINCHAIN=[.win.chain] + +# Lua macros +LUAVER=546 +LUADOTVER=5.4.6 +LUAUNDERVER=5_4_6 +LUAINC=[.lib.lua.lua$(LUAVER).src] +LUALIB=[.lib.lua]lua$(LUAVER).olb +LUASRCDIR =[.lib.lua.lua$(LUAVER).src] +LUASRCINCDIR=$(LUASRCDIR) +LUATESTTARGET = $(LUAINC)lua.h +LUABASELIB = liblua-$(LUADOTVER).olb + +# make NetHack (as opposite to variants or such) +#PREFIX = /usr +GAME = nethack +# GAME = nethack.exe +# 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 +# VARFILEPERM = 0644 +EXEPERM = 0755 +DIRPERM = 0755 +# VARDIRPERM = 0755 + +# VARDIR may also appear in unixconf.h as "VAR_PLAYGROUND" else HACKDIR +# +# Note well! 'make install' believes in creating a nice tidy HACKDIR +# for installation, free of debris from previous NetHack versions -- +# therefore there should not be anything in HACKDIR that you want to +# keep (if there is, you'll have to do the installation by hand or +# modify the install commands below). +#HACKDIR = $(PREFIX)/games/lib/$(GAME)dir +#VARDIR = $(HACKDIR) +# Where nethack.sh is installed (as 'nethack'). +# If this is not defined, the shell wrapper script is not used. +#SHELLDIR = $(PREFIX)/games + +# Extra data files depending upon the interface(s) built into nethack. +# per discussion in Install.X11 and Install.Qt +# Qt prefers nhtiles.bmp but can use x11tiles, and it ignores NetHack.ad. +# X11 uses those last two. +# Both can display a convential text map instead of tiles. +# tty and/or curses (no extra data files outside of the dlb container): +#VARDATND = +# All X11 and/or Qt variations may also include tty or curses or both): +# X11 without Qt: +# VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm +# X11 with GRAPHIC_TOMBSTONE (requires 'xpm'): +# VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm +# both X11 and Qt: +# VARDATND = x11tiles nhtiles.bmp NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm +# Qt without X11; assumes GRAPHIC_TOMBSTONE: +# VARDATND = nhtiles.bmp pet_mark.xbm pilemark.xbm rip.xpm + +VARDATD = bogusmon data engrave epitaph oracles options quest.lua 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 (obsolete) +# 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 + +# +# end of configuration +# + +DATHELP = help hh cmdhelp keyhelp history opthelp optmenu usagehlp wizhelp + +SPEC_LEVS = asmodeus.lua baalz.lua bigrm-*.lua castle.lua fakewiz?.lua \ + juiblex.lua knox.lua medusa-?.lua minend-?.lua minefill.lua \ + minetn-?.lua oracle.lua orcus.lua sanctum.lua soko?-?.lua \ + tower?.lua valley.lua wizard?.lua nhcore.lua nhlib.lua themerms.lua \ + astral.lua air.lua earth.lua fire.lua water.lua hellfill.lua tut-?.lua +QUEST_LEVS = ???-goal.lua ???-fil?.lua ???-loca.lua ???-strt.lua + +DATNODLB = $(VARDATND) license symbols +DATDLB = $(DATHELP) dungeon.lua tribute $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD) +DODAT = $(DATNODLB) $(DATDLB) + +ALLDEP = $(GAME) recover Guidebook $(VARDAT) spec_levs check-dlb + +# first target is also the default target for 'make' without any arguments +all: $(ALLDEP) + pipe true + @echo "Done." + +$(GAME): lua_support + pipe set default $(SRC) && $(MAKE) LUA_VERSION=$(LUADOTVER) $(GAME) \ + && set def [-] + +lua_support: [.include]nhlua.h + @true + +# Note: many of the dependencies below are here to allow parallel make +# to generate valid output + +Guidebook: + pipe set def $(DOC) && $(MAKE) Guidebook && set def [-] + +Guidebook.txt: + pipe set def $(DOC) && $(MAKE) Guidebook.txt && set def [-] + +Guidebook.pdf: + pipe set def $(DOC) && $(MAKE) Guidebook.pdf && set def [-] + +manpages: + pipe set def $(DOC) && $(MAKE) manpages && set def [-] + +data: $(GAME) + pipe set def $(DAT) && $(MAKE) data && set def [-] + +engrave: $(GAME) + pipe set def $(DAT) && $(MAKE) engrave && set def [-] + +bogusmon: $(GAME) + pipe set def $(DAT) && $(MAKE) bogusmon && set def [-] + +epitaph: $(GAME) + pipe set def $(DAT) && $(MAKE) epitaph && set def [-] + +rumors: $(GAME) + pipe set def $(DAT) && $(MAKE) rumors && set def [-] + +oracles: $(GAME) + pipe set def $(DAT) && $(MAKE) oracles && set def [-] + +# Note: options should have already been made with make, but... +options: $(GAME) + pipe set def $(DAT) && $(MAKE) options && set def [-] + +quest.lua: $(GAME) + +spec_levs: + pipe set def $(DAT) && $(MAKE) spec_levs && set def [-] + pipe set def $(DAT) && $(MAKE) quest_levs && set def [-] + +nhtiles.bmp: $(GAME) + pipe set def $(UTIL) && $(MAKE) tile2bmp && set def [-] + pipe set def $(DAT) && $(MAKE) nhtiles.bmp && set def [-] + +x11tiles: $(GAME) + pipe set def $(UTIL) && $(MAKE) tile2x11 && set def [-] + pipe set def $(DAT) && $(MAKE) x11tiles && set def [-] + +NetHack.ad: $(GAME) + pipe set def $(DAT) && $(MAKE) NetHack.ad && set def [-] + +pet_mark.xbm: + pipe set def $(DAT) && $(MAKE) pet_mark.xbm && set def [-] + +pilemark.xbm: + pipe set def $(DAT) && $(MAKE) pilemark.xbm && set def [-] + +rip.xpm: + pipe set def $(DAT) && $(MAKE) rip.xpm && set def [-] + +mapbg.xpm: + pipe set def $(DAT) && $(MAKE) mapbg.xpm && set def [-] + +nhsplash.xpm: + pipe set def $(DAT) && $(MAKE) nhsplash.xpm && set def [-] + +nh16.img: $(GAME) + pipe set def $(UTIL) && $(MAKE) tile2img.ttp && set def [-] + pipe set def $(DAT) && $(MAKE) nh16.img && set def [-] + +rip.img: + pip set def $(UTIL) && $(MAKE) xpm2img.ttp && set def [-] + pipe set def $(DAT) && $(MAKE) rip.img && set def [-] +GEM_RSC.RSC: + pipe set def $(DAT) && $(MAKE) GEM_RSC.RSC && set def [-] + +title.img: + pipe set def $(DAT) && $(MAKE) title.img && set def [-] + +check-dlb: options + echo disabled $@ +# @if egrep -s librarian dat/options ; then $(MAKE) dlb ; else true ; fi + +dlb: + pipe set def $(UTIL) && $(MAKE) dlb && set def [-] + pipe set def $(DAT) && LC_ALL=C && mcr [-.util]dlb cf nhdat $(DATDLB) \ + && set def [-] + +wasm: + pipe set def $(SRC) && \ + $(MAKE) CROSS_TO_WASM=1 [-.targets.wasm]nethack.js && \ + set def [-] + +package: $(GAME) recover $(VARDAT) spec_levs + pipe set def $(SRC) && $(MAKE) $(PACKAGE) && set def [-] + +# recover can be used when INSURANCE is defined in include/config.h +# and the checkpoint option is true +recover: $(GAME) + pipe set def $(UTIL) && $(MAKE) recover && set def [-] + +dofiles: + echo disabled $@ +# target=`sed -n \ +# -e '/librarian/{' \ +# -e 's/.*/dlb/p' \ +# -e 'q' \ +# -e '}' \ +# -e '$$s/.*/nodlb/p' < dat/options` ; \ +# $(MAKE) dofiles-$${target-nodlb} +# cp src/$(GAME) $(INSTDIR) +# cp util/recover $(INSTDIR) +# -if test -n '$(SHELLDIR)'; then rm -f $(SHELLDIR)/$(GAME); fi +# if test -n '$(SHELLDIR)'; then \ +# sed -e 's;/usr/games/lib/nethackdir;$(HACKDIR);' \ +# -e 's;HACKDIR/nethack;HACKDIR/$(GAME);' \ +# < sys/unix/nethack.sh \ +# > $(SHELLDIR)/$(GAME) ; fi +# set up their permissions +# -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) $(GAME) recover ; \ +# $(CHGRP) $(GAMEGRP) $(GAME) recover ) +# chmod $(GAMEPERM) $(INSTDIR)/$(GAME) +# chmod $(EXEPERM) $(INSTDIR)/recover +# -if test -n '$(SHELLDIR)'; then \ +# $(CHOWN) $(GAMEUID) $(SHELLDIR)/$(GAME); fi +# if test -n '$(SHELLDIR)'; then \ +# $(CHGRP) $(GAMEGRP) $(SHELLDIR)/$(GAME); \ +# chmod $(EXEPERM) $(SHELLDIR)/$(GAME); fi + +dofiles-dlb: check-dlb + pipe set def $(DAT) && copy nhdat $(DATNODLB) $(INSTDIR) && \ + set def [-] +# set up their permissions +# -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) nhdat $(DATNODLB) ; \ +# $(CHGRP) $(GAMEGRP) nhdat $(DATNODLB) ; \ +# chmod $(FILEPERM) nhdat $(DATNODLB) ) + +dofiles-nodlb: +# copy over the game files + pipe set def $(DAT) && copy $(DAT) $(INSTDIR) && \ + set def [-] +# set up their permissions +# -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) $(DAT) ; \ +# $(CHGRP) $(GAMEGRP) $(DAT) ; \ +# chmod $(FILEPERM) $(DAT) ) +# +# This is not part of the dependency build hierarchy. +# It requires an explicit "make fetch-Lua". + +$(INCL)nhlua.h: + echo "/* nhlua.h - generated by top-level Makefile.vms */" > $@ + @echo \#"include ""lua.h""" >> $@ + @echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@ + @echo \#"include ""lualib.h""" >> $@ + @echo \#"include ""lauxlib.h""" >> $@ + @echo "/*nhlua.h*/" >> $@ + +[.lib]lua.dir: + create/directory [.lib.lua] + +[]lib.dir: + create/directory [.lib] + +[.lib.lua]lua$(LUAVER).dir: + @echo You need to make fetch-lua + false + +fetch-lua: []lib.dir [.lib]lua.dir + if f$$search("[.lib.lua]lua$(LUAVER).tgz").eqs."" then \ + curl http://www.lua.org/ftp/lua-$(LUADOTVER).tar.gz \ + --output [.lib.lua]lua$(LUAVER).tgz + if f$$search("[.lib.lua]lua$(LUAVER).tgz").nes."" then \ + gzip --force -d [.lib.lua]lua$(LUAVER).tgz + if f$$search("[.lib.lua]lua$(LUAVER).tar").nes."" then \ + pipe set def [.lib.lua] && \ + tar -xf lua$(LUAVER).tar && \ + set def [--] + if (f$$search("[.lib.lua]lua-$(LUAUNDERVER).DIR;1").nes."" \ + .AND. f$$search("[.lib.lua]lua$(LUAVER).dir;1").eqs."") then \ + rename [.lib.lua]lua-$(LUAUNDERVER).DIR;1 \ + [.lib.lua]lua$(LUAVER).dir;1 +# remove [.include]nhlua.h in case it was created for some other Lua version + @pipe if f$$search("[.include]nhlua.h").nes."" then \ + delete [.include]nhlua.h;* && echo 'delete [.include]nhlua.h;*' + +# 'make update' can be used to install a revised version after making +# customizations or such. Unlike 'make install', it doesn't delete everything +# from the target directory to have a clean start. +update: $(GAME) recover $(VARDAT) spec_levs + echo disabled $@ +# (don't yank the old version out from under people who're playing it) +# -mv $(INSTDIR)/$(GAME) $(INSTDIR)/$(GAME).old +# -mv $(INSTDIR)/nhdat $(INSTDIR)/nhdat.old +# set up new versions of the game files +# ( $(MAKE) dofiles ) +# should already be present, but make sure +# touch $(VARDIR)/perm $(VARDIR)/record +# and a reminder +# @echo You may also want to install the man pages via the doc Makefile. + +rootcheck: + @true; $(ROOTCHECK) + +install: rootcheck $(GAME) recover $(VARDAT) spec_levs + true; $(PREINSTALL) + echo disabled $@ +# set up the directories +# not all mkdirs have -p; those that don't will create a -p directory +# -if test -n '$(SHELLDIR)'; then \ +# mkdir -p $(SHELLDIR); fi +# rm -rf $(INSTDIR) $(VARDIR) +# -mkdir -p $(INSTDIR) $(VARDIR) $(VARDIR)/save +# if test -d ./-p; then rmdir ./-p; fi +# -$(CHOWN) $(GAMEUID) $(INSTDIR) $(VARDIR) $(VARDIR)/save +# $(CHGRP) $(GAMEGRP) $(INSTDIR) $(VARDIR) $(VARDIR)/save +# order counts here: +# chmod $(DIRPERM) $(INSTDIR) +# chmod $(VARDIRPERM) $(VARDIR) $(VARDIR)/save +# set up the game files +# ( $(MAKE) dofiles ) +# set up some additional files +# touch $(VARDIR)/perm $(VARDIR)/record $(VARDIR)/logfile $(VARDIR)/xlogfile \ +# $(VARDIR)/livelog +# -( cd $(VARDIR) ; $(CHOWN) $(GAMEUID) perm record logfile xlogfile livelog ; \ +# $(CHGRP) $(GAMEGRP) perm record logfile xlogfile livelog ; \ +# chmod $(VARFILEPERM) perm record logfile xlogfile livelog ) +# true; $(POSTINSTALL) +# 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: clean-lib clean-keep-lib +# @true + +clean-lib: +# -pipe set def $(LUASRCDIR) && $(MAKE) clean && set def [--.util] + +clean-keep-lib: +# ( cd src ; $(MAKE) clean ) +# ( cd util ; $(MAKE) clean ) +# pipe set def $(DAT) $(MAKE) clean && set def [-.util] +# ( cd doc ; $(MAKE) clean ) + +spotless-lib:: clean-lib + -( cd lib/lua && rm $(LUABASELIB) ) + +spotless-keep-lib: clean-keep-lib +# ( cd src ; $(MAKE) spotless ) +# ( cd util ; $(MAKE) spotless ) +# pipe set def $(DAT) && $(MAKE) spotless && set def [-] +# ( cd doc ; $(MAKE) spotless ) +spotless-clean-submodule: + @( if test -f submodules/lua/lua.h ; then \ + git submodule deinit submodules/lua ; fi ) + +clean: + pipe set def $(DAT) && $(MAKE) clean && set def [-] + pipe set def $(SRC) && $(MAKE) clean && set def [-] + pipe set def $(UTIL) && $(MAKE) clean && set def [-] + pipe set def $(DOC) && $(MAKE) clean && set def [-] + +# -delete/log $(CLEANFILES) + +spotless: clean + pipe set def $(DAT) && $(MAKE) spotless && set def [-] + pipe set def $(SRC) && $(MAKE) spotless && set def [-] + pipe set def $(UTIL) && $(MAKE) spotless && set def [-] + pipe set def $(DOC) && $(MAKE) spotless && set def [-] + -delete/log $(SPOTLESSFILES) $(INCL)nhlua.h;* + +# pipe set def $(DAT) && $(MAKE) spotless && set def [-] +# -$(RM) $(GAMEBIN);* diff --git a/sys/vms/Makefile_utl.vms b/sys/vms/Makefile_utl.vms new file mode 100644 index 000000000..2585b1bb4 --- /dev/null +++ b/sys/vms/Makefile_utl.vms @@ -0,0 +1,325 @@ +# Makefile for NetHack's utility programs. +# NetHack 3.7 util Makefile.vms $NHDT-Date: 1602258295 2020/10/09 15:44:55 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.53 $ +# Copyright (c) 2018 by Robert Patrick Rankin +# NetHack may be freely redistributed. See license for details. + +# Root of source tree relative to here: +NHSROOT=[-] + +# NetHack 3.7 began introducing C99 code. +# +# If your compiler needs an appropriate switch to accept C99 code. +# CSTD = -std=c99 + +# directories relative to here (util) +DOC=[-.doc] +DAT=[-.dat] +INCL=[-.include] +SRC=[-.src] +UTIL=[-.util] +SYSVMS=[-.sys.vms] +SYSSHR=[-.sys.share] +SYSUNIX=[-.sys.unix] +WINTTY=[-.win.tty] +WINSHR=[-.win.share] +WINTTY=[-.win.tty] +WINCURS=[-.win.curses] +WINX11=[-.win.X11] +WINQT=[-.win.Qt] +WINSHIM=[-.win.shim] +WINCHAIN=[-.win.chain] + +# Lua location relative to here +LUAVER=546 +LUADOTVER=5.4.6 +LUAUNDERVER=5_4_6 +LUAINC=[-.lib.lua.lua$(LUAVER).src] +LUALIB=[-.lib.lua]lua$(LUAVER).olb +LUASRCDIR =[-.lib.lua.lua$(LUAVER).src] +LUASRCINCDIR=$(LUASRCDIR) +#LUASRCINCDIR=SYS$COMMON:[LUA.INCLUDE] + +# hacklib +HACKLIB=hacklib.olb +HACKLIBOBJS=[-.src]hacklib.obj,[-.util]panic.obj + +comma:=, +LIBS = +OBJDIR = [-.src] + +# Compiler flags +CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD) +CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS) + +# Link flags +LFLAGS = + +# external programs +# MAKE = make +CC = CC +#touch :=SET FILE/TRUNCATE +touch = append/New _NLA0: +LINK = link +RM = delete +#TRUE uses an actual helper true.exe +TRUE = true +#FALSE uses an actual helper false.exe +FALSE = false +#ECHO uses an actual helper echo.exe +ECHO = echo +CXX ?= CXX +MOC ?= moc +MOCPATH ?= $(QTDIR)/bin/$(MOC) +# The default is for the TARGET_* variables to match the defaults. +# If we're cross-compiling these will get overridden elsewhere, likely via +# a hints file. TARGETPFX was set above earlier. +TARGET_CC = $(CC) +TARGET_CFLAGS = $(CFLAGS) $(CSTD) +TARGET_LINK = $(LINK) +TARGET_LFLAGS = $(LFLAGS) +TARGET_CXX = $(CXX) +TARGET_CXXFLAGS = $(CXXFLAGS) +TARGET_LIBS = $(LIBS) +# [LINK might be defined to use $(CXX); we don't want that here.] +CLINK=$(TARGET_LINK) +CXXLINK=$(TARGET_LINK) + +# timestamps for primary header files, matching src/Makefile +#CONFIG_H = $(SRC)config.h-t +#HACK_H = $(SRC)hack.h-t + +# utility .c files +MAKESRC = makedefs.c $(SRC)mdlib.c +RECOVSRC = recover.c +DLBSRC = dlb_main.c +UTILSRCS = $(MAKESRC) panic.c $(RECOVSRC) $(DLBSRC) + +# files that define all monsters and objects +CMONOBJ = $(SRC)monst.c $(SRC)objects.c +OMONOBJ = $(OBJDIR)monst.obj $(OBJDIR)objects.obj +# files that provide access to NetHack's names +CNAMING = $(SRC)drawing.c $(CMONOBJ) +ONAMING = $(OBJDIR)drawing.obj $(OMONOBJ) +# dynamic memory allocation +CALLOC = $(SRC)alloc.c +OALLOC = $(OBJDIR)alloc.obj +CPANIC = panic.c +OPANIC = []panic.obj +# build time info +CDATE = $(SRC)date.c +ODATE = $(OBJDIR)date.obj + +# object files for makedefs +MAKEOBJS = []makedefs.obj $(OMONOBJ) $(ODATE) $(OALLOC) $(OPANIC) + +# object files for recovery utility +RECOVOBJS = $(TARGETPFX)recover.obj + +# object files for the data librarian +DLBOBJS = dlb_main.obj $(OBJDIR)dlb.obj $(OALLOC) $(OPANIC) + +# Distinguish between the build tools for the native host +# and the build tools for the target environment in commands. +# This allows the same set of Makefiles to be used for native +# builds and for cross-compiles by overriding these in hints +# files or on the command line. + +TARGETPFX= +TARGET_CC = $(CC) +TARGET_CFLAGS = $(CFLAGS) $(CSTD) +TARGET_CLINK = $(CLINK) +TARGET_LFLAGS = $(LFLAGS) +TARGET_CXX = $(CXX) +TARGET_CXXFLAGS = $(CXXFLAGS) + +# hacklib +# +$(HACKLIB): $(HACKLIBOBJS) [-.util]panic.obj + LIBRARY/CREATE $(HACKLIB)/object + LIBRARY/INSERT $(HACKLIB) $(HACKLIBOBJS) +# dependencies for makedefs +# + +makedefs.exe: $(HACKLIB) $(MAKEOBJS) placeholder.obj mdgrep.h + $(CLINK) $(LFLAGS) /EXE=$@ \ + $(addsuffix $(comma),$(MAKEOBJS)) placeholder.obj, \ + $(HACKLIB)/lib + +# note: the headers listed here are maintained manually rather than via +# 'make depend'; only the ones which are directly included by +# makedefs.c are listed, without various nested ones that they include; +# for makedefs (but not for nethack's core), mdlib.c gets included +# rather than be compiled separately +makedefs.obj: makedefs.c $(SRC)mdlib.c $(CONFIG_H) \ + $(INCL)permonst.h $(INCL)objclass.h \ + $(INCL)artilist.h $(INCL)dungeon.h $(INCL)obj.h \ + $(INCL)monst.h $(INCL)monsters.h $(INCL)objects.h \ + $(INCL)you.h $(INCL)context.h $(INCL)flag.h \ + $(INCL)dlb.h $(INCL)patchlevel.h mdgrep.h + $(CC) $(CFLAGS) $(CSTD) makedefs.c /OBJ=$@ + +placeholder.c: + echo int makedefs_placeholder = 1; >$@ + +placeholder.obj: placeholder.c + + +# Don't require perl to build; that is why mdgrep.h is spelled wrong below. +mdgreph: mdgrep.pl + perl mdgrep.pl + +# These are for reference purposes only. They aren't required in the build. +$(INCL)onames.h: makedefs $(INCL)objects.h + mcr []makedefs -o +$(INCL)pm.h: makedefs $(INCL)monsters.h + mcr []makedefs -p + +# we defer this makedefs call to the src Makefile, since it knows all about +# the main src and include files date.h is a timestamp for +$(INCL)date.h:: + @pipe set def $(SRC) && $(MAKE) $(INCL)date.h && set def [-] + +# support code used by several of the utility programs (but not makedefs) +panic.obj: panic.c $(CONFIG_H) + $(CC) $(CFLAGS) $(CSTD) panic.c /OBJ=$@ + + +# with all of extern.h's functions to complain about, we drown in +# 'defined but not used' without -u +#lintdgn: +# @lint -axhu -I.include -DLINT $(UTILSRCS) $(CALLOC) \ +# | sed '/_flsbuf/d' +# +# +# dependencies for recover +# +$(TARGETPFX)recover.exe: $(RECOVOBJS) + $(TARGET_CLINK) $(TARGET_LFLAGS) /EXE=$@ $(RECOVOBJS) $(LIBS) + +$(TARGETPFX)recover.obj: recover.c $(CONFIG_H) + $(TARGET_CC) $(TARGET_CFLAGS) $(CSTD) recover.c /OBJ=$@ + + +# dependencies for dlb +# +dlb: $(DLBOBJS) + $(CLINK) $(LFLAGS) /EXE=dlb $(DLBOBJS) $(LIBS) + +dlb_main.obj: dlb_main.c $(CONFIG_H) $(INCL)dlb.h + $(CC) $(CFLAGS) $(CSTD) dlb_main.c /OBJ=$@ + + +# dependencies for tile utilities +# +TEXT_IO = tiletext.obj tiletxt.obj $(OALLOC) $(ONAMING) +GIFREADERS = gifread.obj +PPMWRITERS = ppmwrite.obj + +tileutils: tilemap gif2txt txt2ppm tile2x11 + +gif2txt.exe: $(GIFREADERS) $(TEXT_IO) + $(CLINK) $(LFLAGS) /EXE=$@ $(GIFREADERS) $(TEXT_IO) $(LIBS) +txt2ppm.exe: $(PPMWRITERS) $(TEXT_IO) + $(CLINK) $(LFLAGS) /EXE=$@ $(PPMWRITERS) $(TEXT_IO) $(LIBS) + +tile2x11.exe: tile2x11.obj $(TEXT_IO) + $(CLINK) $(LFLAGS) /EXE=$@ tile2x11.obj $(TEXT_IO) $(LIBS) + +tile2bmp.exe: tile2bmp.obj $(TEXT_IO) + $(CLINK) $(LFLAGS) /EXE=$@ tile2bmp.obj $(TEXT_IO) + +tile2beos.exe: tile2beos.obj $(TEXT_IO) + $(CXXLINK) $(LFLAGS) /EXE=$@ tile2beos.obj $(TEXT_IO) + +#--compiling and linking in one step leaves extra debugging files (in their +# own subdirectories!) on OSX; compile and link separately to suppress +# that without mucking about with extra OS-specific CFLAGS and/or LFLAGS +#tilemap: .win/share/tilemap.c $(HACK_H) +# $(CC) $(CFLAGS) $(LFLAGS) -o tilemap .win/share/tilemap.c $(LIBS) +tilemap.exe: tilemap.obj $(OBJDIR)objects.obj $(OBJDIR)monst.obj \ + $(OBJDIR)drawing.obj + $(CLINK) $(LFLAGS) /EXE=$@ tilemap.obj $(OBJDIR)objects.obj \ + $(OBJDIR)monst.obj $(OBJDIR)drawing.obj $(LIBS) +$(SRC)tile.c: tilemap + mcr []tilemap + +tiletext.obj: $(WINSHR)tiletext.c $(CONFIG_H) $(WINSHR)tile.h + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tiletext.c /OBJ=$@ +tiletxt.obj: $(WINSHR)tiletxt.c $(WINSHR)tilemap.c $(HACK_H) + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tiletxt.c /OBJ=$@ +tilemap.obj: $(WINSHR)tilemap.c $(HACK_H) + $(CC) $(CFLAGS) $(CSTD) $(WINSHR)tilemap.c /OBJ=$@ + +gifread.obj: $(WINSHR)gifread.c $(CONFIG_H) $(WINSHR)tile.h + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)gifread.c /OBJ=$@ +ppmwrite.obj: $(WINSHR)ppmwrite.c $(CONFIG_H) $(WINSHR)tile.h + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)ppmwrite.c /OBJ=$@ + +tile2bmp.obj: $(WINSHR)tile2bmp.c $(HACK_H) $(WINSHR)tile.h + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tile2bmp.c /OBJ=$@ + +tile2x11.obj: .win/X11/tile2x11.c $(HACK_H) .win/share/tile.h \ + $(INCL)tile2x11.h + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tile2x11.c /OBJ=$@ + +tile2img.obj: [-.win.gem]tile2img.c $(HACK_H) $(WINSHR)tile.h \ + $(INCL)bitmfile.h + $(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) [-.win.gem]tile2img.c /OBJ=$@ +xpm2img.obj: [-.win.gem]xpm2img.c $(HACK_H) $(INCL)bitmfile.h + $(CC) $(CFLAGS) $(CSTD) -c .win/gem/xpm2img.c /obj=$@ +bitmfile.obj: [-.win.gem]bitmfile.c $(INCL)bitmfile.h + $(CC) $(CFLAGS) $(CSTD) [-.win.gem]bitmfile.c /obj=$@ + +uudecode.exe: uudecode.obj + $(CLINK) $(LFLAGS) /EXE=$@ uudecode.obj $(LIBS) +uudecode.obj: $(SYSSHR)uudecode.c + $(CC) $(CFLAGS) $(CSTD) /obj=$@ $(SYSSHR)uudecode.c + +# make sure host object files from src are available when needed +# (note: these dependencies have been copied from Makefile.src so only come +# indirectly from 'make depend', hence are subject to bit rot as src changes) +$(OBJDIR)alloc.obj: $(SRC)alloc.c $(CONFIG_H) + $(CC) $(CFLAGS) $(CSTD) $(SRC)alloc.c /obj=$@ +$(OBJDIR)drawing.obj: $(SRC)drawing.c $(CONFIG_H) $(INCL)color.h \ + $(INCL)rm.h $(INCL)objclass.h $(INCL)defsym.h \ + $(INCL)objects.h $(INCL)sym.h + $(CC) $(CFLAGS) $(CSTD) $(SRC)drawing.c /obj=$@ +$(OBJDIR)decl.obj: $(SRC)decl.c $(HACK_H) + $(CC) $(CFLAGS) $(CSTD) $(SRC)decl.c /obj=$@ +$(OBJDIR)monst.obj: $(SRC)monst.c $(CONFIG_H) $(INCL)permonst.h \ + $(INCL)align.h $(INCL)monattk.h $(INCL)monflag.h \ + $(INCL)monsters.h $(INCL)sym.h $(INCL)defsym.h \ + $(INCL)color.h + $(CC) $(CFLAGS) $(CSTD) $(SRC)monst.c /obj=$@ +$(OBJDIR)objects.obj: $(SRC)objects.c $(CONFIG_H) $(INCL)obj.h \ + $(INCL)prop.h $(INCL)skills.h $(INCL)color.h \ + $(INCL)objclass.h $(INCL)defsym.h $(INCL)objects.h + $(CC) $(CFLAGS) $(CSTD) $(SRC)objects.c /obj=$@ +$(OBJDIR)dlb.obj: $(SRC)dlb.c $(CONFIG_H) $(INCL)dlb.h + $(CC) $(CFLAGS) $(CSTD) $(SRC)dlb.c /obj=$@ +# this differs substantially from what Makefile.src specifies +$(OBJDIR)date.obj: $(SRC)date.c $(CONFIG_H) + $(CC) $(CFLAGS) $(CSTD) $(SRC)date.c /obj=$@ + +# make sure hack.h dependencies get transitive information +$(HACK_H): $(CONFIG_H) + @pipe set def $(SRC) && $(MAKE) $(HACK_H) && set def $(UTIL) +$(CONFIG_H): $(INCL)config.h + @pipe set def $(SRC) && $(MAKE) $(CONFIG_H) && set def $(UTIL) + +clean-fixup: + -delete/log $(INCL)tile.h;* + +clean: clean-fixup + -delete/log *.obj;* + +spotless: clean + -delete/log makedefs.exe;*,recover.exe;*,dlb.exe;* + -delete/log gif2txt.exe;*,txt2ppm.exe;*,tile2x11.exe;* \ + ,tile2img.ttp;*,xpm2img.ttp;*, \ + tilemap.exe;*,tileedit.exe;*,tile2bmp.exe;*,uudecode.exe; +.PHONY: recover makedefs + +recover: recover.exe +makedefs: makedefs.exe + diff --git a/sys/vms/vmssetup.com b/sys/vms/vmssetup.com new file mode 100644 index 000000000..b841bb882 --- /dev/null +++ b/sys/vms/vmssetup.com @@ -0,0 +1,25 @@ +$ ! vmssetup.com -- place GNU Makefiles in their target directories +$ version_number = "3.7.0" +$ ! $NHDT-Date: 1687541093 2024/03/08 17:24:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.39 $ +$ ! NetHack may be freely redistributed. See license for details. +$ ! +$ relsrc = "" +$ reldst = "-.-" +$ if (f$search("[]dat.dir") .nes. "") .AND. - + (f$search("[]src.dir") .nes. "") .AND. - + (f$search("[]include.dir") .nes. "") .AND. - + (f$search("[]sys.dir") .nes. "") then - + relsrc = ".sys.vms" +$ if (f$search("[]dat.dir") .nes. "") .AND. - + (f$search("[]src.dir") .nes. "") .AND. - + (f$search("[]include.dir") .nes. "") .AND. - + (f$search("[]sys.dir") .nes. "") then - + reldst = "" +$ copy ['relsrc']Makefile_top.vms ['reldst']Makefile.vms +$ copy ['relsrc']Makefile_dat.vms ['reldst'.dat]Makefile.vms +$ copy ['relsrc']Makefile_doc.vms ['reldst'.doc]Makefile.vms +$ copy ['relsrc']Makefile_src.vms ['reldst'.src]Makefile.vms +$ copy ['relsrc']Makefile_utl.vms ['reldst'.util]Makefile.vms +$! +$done: +$ exit