]> granicus.if.org Git - nethack/commitdiff
Add Makefile.mingw32 and Makefile.mingw32.depend
authorFeiyun Wang <feiyunw@yahoo.com>
Wed, 19 Jan 2022 19:23:06 +0000 (03:23 +0800)
committernhmall <nhmall@nethack.org>
Thu, 27 Jan 2022 23:33:52 +0000 (18:33 -0500)
sys/windows/Makefile.mingw32 [new file with mode: 0644]
sys/windows/Makefile.mingw32.depend [new file with mode: 0644]

diff --git a/sys/windows/Makefile.mingw32 b/sys/windows/Makefile.mingw32
new file mode 100644 (file)
index 0000000..fe015d3
--- /dev/null
@@ -0,0 +1,808 @@
+# NetHack 3.7  Makefile.mingw32
+# Copyright (c) 2022 by Michael Allison
+# NetHack may be freely redistributed.  See license for details.
+#
+#==============================================================================
+#
+#   Win32 Compilers Tested with this Makefile.mingw32:
+#       mingw-w64
+#   from:
+#       https://sourceforge.net/p/mingw-w64/wiki2/GeneralUsageInstructions/
+#           Toolchain for 32 and 64 bit Windows target
+#
+#==============================================================================
+#   This is used for building two versions of NetHack:
+#
+#   A tty port utilizing the Win32 Console I/O subsystem, Console
+#       NetHack.
+#
+#   A Win32 native port built on the Windows API, Graphical NetHack or
+#       NetHackW.
+#
+#   If you have any questions read the sys/windows/Install.windows file included
+#   with the distribution.
+#
+#==============================================================================
+# DECISIONS SECTION
+#
+# Build Options Decisions
+#
+#       There are currently 4 decisions that you can choose to make.
+#       None of the 4 decisions are absolutely required because defaults are in place:
+#      1. Do you have git commands in your path and NetHack in a git repository?
+#      2. Where do you want your build results to end up?
+#      3. Do you want debug information in the executable?
+#      4. Do you want to explicitly override auto-detection of a 32-bit or 64-bit target?
+#       5. Do you want to include any optional interfaces in the port?
+#          5a) console without or with pdcurses
+#          5b) Windows
+#
+# Mandatory LUA source Location
+#
+#       LUA source code or is required to build NetHack-3.7.
+#       LUATOP must point to the location of the LUA sources.
+#
+#-----------------------------------------------------------------------------------------
+#=========================================================================================
+
+#==============================================================================
+#
+# The default make target (so just typing 'mingw32-make').
+#
+
+default: install
+
+#---------------------------------------------------------------
+# 1. Where do you want the game to be built (which folder)?
+#    If not present prior to compilation it gets created.
+#
+
+GAMEDIR = ../binary
+
+#
+#---------------------------------------------------------------
+# 2. Do you want debug information in the executable?
+#
+
+DEBUGINFO = N
+
+#
+#---------------------------------------------------------------
+# 3. Do you want to explicitly override auto-detection of a 32-bit
+#    or 64-bit executable (save files do not interchange currently)?
+#
+# It depends on which MSYS2 MinGW shell you are using.
+#
+#---------------------------------------------------------------
+# 4. Do you want additional GUI interfaces in the executable?
+#    Make these Y to enable the GUIs. Win32 is always enabled,
+#    and is the default.
+#
+
+#4a Curses window port support
+#
+#
+# 4. Uncomment these and set them appropriately if you want to
+#    include curses port support alongside TTY support in your
+#    NetHack.exe binary.
+#
+#    You'll have to set PDCURSES_H to the correct location of the
+#    PDCurses header (.h) files and PDCURSES_C to the location
+#    of your PDCurses C files which must already be resident on
+#    your machine.
+#
+# ADD_CURSES=Y
+# PDCURSES_TOP=../submodules/pdcurses
+
+#---------------------------------------------------------------
+ifndef LUA_VERSION
+LUAVER=5.4.3
+else
+LUAVER=$(LUA_VERSION)
+endif
+#---------------------------------------------------------------
+# Location of LUA
+#
+# Original source needs to be obtained from:
+#    http://www.lua.org/ftp/lua-5.4.3.tar.gz
+#
+#    This build assumes that the LUA sources are located
+#    at the specified location. If they are actually elsewhere
+#    you'll need to specify the correct spot below in order to
+#    successfully build NetHack-3.7.
+#
+USE_LUADLL = Y
+WANT_LUAC = N
+LUATOP = ../submodules/lua
+#
+#==============================================================================
+# This marks the end of the BUILD DECISIONS section.
+#==============================================================================
+#
+#===============================================
+#======= End of Modification Section ===========
+#===============================================
+#
+################################################
+#                                              #
+# Nothing below here should have to be changed.#
+#                                              #
+################################################
+#
+#==============================================================================
+
+SKIP_NETHACKW = N
+
+#==============================================================================
+
+#  The version of the game this Makefile was designed for
+NETHACK_VERSION="3.7.0"
+
+# A brief version for use in macros
+NHV1=$(subst .,,$(NETHACK_VERSION))
+NHV=$(subst ",,$(NHV1))
+
+#
+#  Source directories.    Makedefs hardcodes these, don't change them.
+#
+
+# INCL    - NetHack include files
+# DAT     - NetHack data files
+# DOC     - NetHack documentation files
+# UTIL    - Utility source
+# SRC     - Main source
+# SSYS    - Shared system files
+# MSWSYS  - mswin specific files
+# TTY     - window port files (tty)
+# MSWIN   - window port files (win32)
+# WCURSES - window port files (curses)
+# WSHR    - Tile support files
+# QT      - QT window support files
+
+INCL    =../include
+DAT     =../dat
+DOC     =../doc
+UTIL    =../util
+SRC     =../src
+SSYS    =../sys/share
+MSWSYS  =../sys/windows
+TTY     =../win/tty
+MSWIN   =../win/win32
+WCURSES =../win/curses
+WSHR    =../win/share
+QT      =../win/Qt
+
+#
+#  Object directory.
+#
+
+OBJ = o
+
+#
+# Shorten up the location for some files
+#
+
+O  = $(OBJ)/
+
+U  = $(UTIL)/
+
+# To store all the level files,
+# help files, etc. in a single library file.
+# USE_DLB = Y is left uncommented
+
+USE_DLB = Y
+
+#==========================================
+#==========================================
+# Setting up the compiler and linker
+# macros. All builds include the base ones.
+#==========================================
+#==========================================
+
+ifdef TRAVIS_COMPILER
+cc = i686-w64-mingw32-gcc.exe
+ld = i686-w64-mingw32-gcc.exe
+rc = windres --target=pe-i386
+else
+cc = gcc -c
+ld = gcc
+ifeq "$(MSYSTEM)" "MINGW64"
+rc = windres --target=pe-x86-64
+else # MINGW32
+rc = windres --target=pe-i386
+endif
+endif
+
+#
+# Handle user settings
+#
+CFLAGS = -mms-bitfields -I../include -I../sys/windows
+LDFLAGS =
+ifeq "$(DEBUGINFO)" "Y"
+CFLAGS += -g -D_DEBUG
+else
+CFLAGS += -DNDEBUG
+LDFLAGS += -s
+endif
+
+ifeq "$(USE_DLB)" "Y"
+DLBFLG = -DDLB
+else
+DLBFLG =
+endif
+
+COMMONDEF = -DWIN32 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601
+DLLDEF = $(COMMONDEF) -DWIN32CON -D_WINDOWS -D_USRDLL -D_WINDLL
+CONSOLEDEF = $(COMMONDEF) -D_CONSOLE
+
+# To build util targets
+CFLAGSU = $(CFLAGS) $(CONSOLEDEF) $(DLBFLG) -DWIN32CON -DMSWIN_GRAPHICS
+
+LIBS = -lcomctl32 -lgdi32 -lole32 -lshell32 -luuid -lwinmm -lbcrypt
+
+$(GAMEDIR):
+       @mkdir -p $@
+
+$(OBJ):
+       @mkdir -p $@
+
+CLEAN_DIR = $(GAMEDIR) $(OBJ)
+
+#===============-=================================================
+# LUA library
+# Source from http://www.lua.org/ftp/lua-5.4.3.tar.gz
+#=================================================================
+
+OLUA = $(O)lua
+LUASRC = $(LUATOP)
+LUAOBJS = $(addprefix $(OLUA)/, $(addsuffix .o, 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))
+LUADLL = $(GAMEDIR)/lua-$(LUAVER).dll
+LUAIMP = $(OLUA)/lua-$(LUAVER).dll.a
+ULUADLL = $(U)$(notdir $(LUADLL))
+LUASTATIC = $(OLUA)/lua-$(LUAVER).a
+LUATARGETS = $(U)lua.exe
+
+ifeq "$(USE_LUADLL)" "Y"
+LUALIB = $(LUAIMP)
+LUATARGETS += $(LUADLL) $(ULUADLL) $(LUAIMP)
+else
+LUALIB = $(LUASTATIC)
+LUATARGETS += $(LUASTATIC)
+endif
+
+ifeq "$(WANT_LUAC)" "Y"
+LUATARGETS += $(U)luac.exe
+endif
+
+lua: $(LUATARGETS)
+
+$(U)lua.exe: $(OLUA)/lua.o $(LUALIB)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(LUADLL): $(ULUADLL)
+       cp $< $@
+
+$(ULUADLL) $(LUAIMP): $(LUAOBJS) | $(OLUA)
+       $(ld) $(LDFLAGS) -fPIC -shared -Wl,--export-all-symbols -Wl,--add-stdcall-alias \
+               -Wl,--out-implib=$(LUAIMP) $^ -o$(ULUADLL)
+
+$(LUASTATIC): $(LUAOBJS) | $(OLUA)
+       ar rcs $@ $^
+
+$(OLUA)/%.o: $(LUASRC)/%.c | $(OLUA)
+       $(cc) $(CFLAGS) $< -o$@
+
+$(U)luac.exe: $(OLUA)/luac.o $(LUALIB)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OLUA):
+       @mkdir -p $@
+
+CLEAN_DIR += $(OLUA)
+CLEAN_FILE += $(LUATARGETS) $(LUAOBJS) $(OLUA)/lua.o $(OLUA)/luac.o
+
+#==========================================
+# nhlua.h
+#==========================================
+NHLUAH = $(INCL)/nhlua.h
+
+$(NHLUAH):
+       echo "/* nhlua.h - generated by top Makefile */" > $@
+       @echo "#include \"$(LUASRC)/lua.h\"" >> $@
+       @echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@
+       @echo "#include \"$(LUASRC)/lualib.h\"" >> $@
+       @echo "#include \"$(LUASRC)/lauxlib.h\"" >> $@
+       @echo "/*nhlua.h*/" >> $@
+
+CLEAN_FILE += $(NHLUAH)
+
+#==========================================
+# Makedefs
+#==========================================
+OM = $(O)makedefs
+MOBJS = $(addprefix $(OM)/, alloc.o date.o makedefs.o monst.o objects.o panic.o)
+MTARGETS = $(U)makedefs.exe
+
+makedefs: $(MTARGETS)
+
+$(U)makedefs.exe: $(MOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OM)/%.o: $(SRC)/%.c $(NHLUAH) | $(OM)
+       $(cc) $(CFLAGSU) -DENUM_PM $< -o$@
+
+$(OM)/%.o: $(U)%.c $(NHLUAH) | $(OM)
+       $(cc) $(CFLAGSU) -DENUM_PM $< -o$@
+
+$(OM):
+       @mkdir -p $@
+
+CLEAN_DIR += $(OM)
+CLEAN_FILE += $(MTARGETS) $(MOBJS)
+
+#==========================================
+# Recover
+#==========================================
+OR = $(OBJ)
+ROBJS = $(OR)/recover.o
+RTARGETS = $(GAMEDIR)/recover.txt $(GAMEDIR)/recover.exe
+
+recover: $(RTARGETS)
+
+$(GAMEDIR)/recover.txt: $(DOC)/recover.txt | $(GAMEDIR)
+       cp $< $@
+
+$(GAMEDIR)/recover.exe: $(ROBJS) | $(GAMEDIR)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OR)/recover.o: $(U)recover.c | $(OR)
+       $(cc) $(CFLAGSU) $< -o$@
+
+# $(OR):
+#      @mkdir -p $@
+
+CLEAN_FILE += $(RTARGETS) $(ROBJS)
+
+#==========================================
+# PDCurses
+#==========================================
+ifeq "$(ADD_CURSES)" "Y"
+OP = $(O)pdcurses
+PDCOBJS = $(addprefix $(OP)/, addch.o addchstr.o addstr.o attr.o beep.o bkgd.o border.o \
+         clear.o color.o debug.o delch.o deleteln.o getch.o getstr.o getyx.o \
+         inch.o inchstr.o initscr.o inopts.o insch.o insstr.o \
+         kernel.o keyname.o mouse.o move.o outopts.o overlay.o \
+         pad.o panel.o pdcclip.o pdcdisp.o pdcgetsc.o pdckbd.o pdcscrn.o pdcsetsc.o pdcutil.o printw.o \
+         refresh.o scanw.o scr_dump.o scroll.o slk.o termattr.o touch.o util.o window.o)
+PDCSRC = $(PDCURSES_TOP)/pdcurses
+PDCWINCON = $(PDCURSES_TOP)/wincon
+PDCINCL = -I$(PDCURSES_TOP) -I$(PDCSRC) -I$(PDCWINCON)
+PDCLIB = $(O)pdcurses.a
+
+pdcurses: $(PDCLIB)
+
+$(PDCLIB): $(PDCOBJS)
+       ar rcs $@ $^
+
+$(OP)/%.o: $(PDCSRC)/%.c | $(OP)
+       $(cc) $(CFLAGS) $(PDCINCL) -D_LIB $< -o$@
+
+$(OP)/%.o: $(PDCWINCON)/%.c | $(OP)
+       $(cc) $(CFLAGS) $(PDCINCL) -D_LIB $< -o$@
+
+$(OP):
+       @mkdir -p $@
+
+CLEAN_DIR += $(OP)
+CLEAN_FILE += $(PDCLIB) $(PDCOBJS)
+endif
+
+#==========================================
+# tile2bmp
+#==========================================
+OT = $(O)tile2bmp
+TOBJS = $(addprefix $(OT)/, drawing.o monst.o objects.o tile2bmp.o tiletext.o tiletxt.o)
+TTARGETS = $(U)tile2bmp.exe
+
+tile2bmp: $(TTARGETS)
+
+$(U)tile2bmp.exe: $(TOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OT)/tiletxt.o: $(WSHR)/tilemap.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) -DTILETEXT $< -o$@
+
+$(OT)/%.o: $(WSHR)/%.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(OT)/%.o: $(SRC)/%.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(OT):
+       @mkdir -p $@
+
+CLEAN_DIR += $(OT)
+CLEAN_FILE += $(TTARGETS) $(TOBJS)
+
+#==========================================
+# Optional Tile Utilities
+#==========================================
+TEXT_IO = $(addprefix $(OT)/, drawing.o monst.o objects.o tiletext.o tiletxt.o)
+TUCOMMON = $(OT)/alloc.o $(OT)/panic.o
+TUOBJS = $(TUCOMMON) $(TEXT_IO)
+
+T32OBJS = $(OT)/tilete32.o $(OT)/tiletx32.o
+TEXT_IO32 = $(addprefix $(OT)/, drawing.o monst.o objects.o) $(T32OBJS)
+TU32OBJS = $(TUCOMMON) $(TEXT_IO32)
+
+GIFOBJ = $(OT)/gifread.o
+GIF32OBJ = $(OT)/gifrd32.o
+PPMOBJ = $(OT)/ppmwrite.o
+BMP32OBJ = $(OT)/til2bm32.o
+TILEFILES32 = $(addprefix $(WSHR)/, mon32.txt obj32.txt oth32.txt)
+TUTARGETS = $(U)gif2txt.exe $(U)gif2tx32.exe $(U)txt2ppm.exe $(U)til2bm32.exe
+
+tileutil: $(TUTARGETS)
+
+$(U)gif2txt.exe: $(GIFOBJ) $(TUOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(U)gif2tx32.exe: $(GIF32OBJ) $(TU32OBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(U)txt2ppm.exe: $(PPMOBJ) $(TUOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(U)til2bm32.exe: $(BMP32OBJ) $(TEXT_IO32)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OT)/tilete32.o: $(WSHR)/tiletext.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(OT)/tiletx32.o: $(WSHR)/tilemap.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) -DTILETEXT -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(GIF32OBJ): $(WSHR)/gifread.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(BMP32OBJ): $(WSHR)/tile2bmp.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(OT)/panic.o: $(UTIL)/panic.c $(NHLUAH) | $(OT)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(MSWIN)/tiles32.bmp: $(U)til2bm32.exe $(TILEFILES32)
+       $< $@
+
+CLEAN_FILE += $(TUTARGETS) $(GIFOBJ) $(GIF32OBJ) $(PPMOBJ) $(BMP32OBJ) \
+             $(T32OBJS) $(TUCOMMON)
+
+#==========================================
+# tilemap
+#==========================================
+OTM = $(OBJ)/tilemap
+TMOBJS = $(addprefix $(OTM)/, drawing.o monst.o objects.o tilemap.o)
+TMTARGETS = $(SRC)/tile.c $(U)tilemap.exe
+
+tilemap: $(SRC)/tile.c
+
+$(SRC)/tile.c: $(U)tilemap.exe
+       $<
+
+$(U)tilemap.exe: $(TMOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OTM)/tilemap.o: $(WSHR)/tilemap.c $(NHLUAH) | $(OTM)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(OTM)/%.o: $(SRC)/%.c $(NHLUAH) | $(OTM)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(OTM):
+       @mkdir -p $@
+
+CLEAN_DIR += $(OTM)
+# tilemap.exe will create tilemappings.lst
+CLEAN_FILE += $(TMTARGETS) $(TMOBJS) $(SRC)/tilemappings.lst
+
+#==========================================
+# uudecode
+#==========================================
+OU = $(OBJ)
+UOBJS = $(OU)/uudecode.o
+UTARGETS = $(U)uudecode.exe $(MSWIN)/NetHack.ico
+
+uudecode: $(UTARGETS)
+
+$(U)uudecode.exe: $(UOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(OU)/uudecode.o: $(SSYS)/uudecode.c | $(OU)
+       $(cc) $(CFLAGS) $(CONSOLEDEF) $< -o$@
+
+# $(OU):
+#      @mkdir -p $@
+
+$(MSWIN)/NetHack.ico: $(U)uudecode.exe $(MSWSYS)/nhico.uu
+       $^
+       mv nethack.ico $@
+
+CLEAN_FILE += $(UTARGETS) $(UOBJS)
+
+#==========================================
+# Data librarian
+#==========================================
+ODLB = $(O)dlb
+DLBOBJS = $(addprefix $(ODLB)/, alloc.o dlb.o dlb_main.o panic.o)
+DAT_CLEAN = $(addprefix $(DAT)/, data oracles options porthelp rumors engrave epitaph bogusmon)
+DAT_NOCLEAN = $(addprefix $(DAT)/, help hh cmdhelp keyhelp history opthelp optmenu \
+             wizhelp license engrave epitaph bogusmon tribute)
+DLBLST = $(DAT)/dlb.lst
+DLB = $(GAMEDIR)/nhdat$(NHV)
+DTARGETS = $(U)dlb.exe $(DAT_CLEAN) $(DLBLST) $(DLB)
+
+dlb: $(DTARGETS)
+
+$(U)dlb.exe: $(DLBOBJS)
+       $(ld) $(LDFLAGS) $^ -o$@
+
+$(ODLB)/%.o: $(SRC)/%.c $(NHLUAH) | $(ODLB)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(ODLB)/%.o: $(U)%.c $(NHLUAH) | $(ODLB)
+       $(cc) $(CFLAGSU) $< -o$@
+
+$(ODLB):
+       @mkdir -p $@
+
+$(DAT)/data: $(U)makedefs.exe $(DAT)/data.base
+       $< -d
+
+$(DAT)/oracles: $(U)makedefs.exe $(DAT)/oracles.txt
+       $< -h
+
+$(DAT)/options $(INCL)/date.h: $(U)makedefs.exe
+       $< -v
+
+$(DAT)/porthelp: $(MSWSYS)/porthelp
+       cp $< $@
+
+$(DAT)/rumors: $(U)makedefs.exe $(DAT)/rumors.tru $(DAT)/rumors.fal
+       $< -r
+
+$(DAT)/engrave: $(DAT)/bogusmon
+
+$(DAT)/epitaph: $(DAT)/bogusmon
+
+$(DAT)/bogusmon: $(U)makedefs.exe $(DAT)/bogusmon.txt $(DAT)/engrave.txt $(DAT)/epitaph.txt
+       $< -s
+
+$(DLBLST): | $(DAT_CLEAN) $(DAT_NOCLEAN)
+       echo data > $(DLBLST)
+       echo oracles >> $(DLBLST)
+       echo options >> $(DLBLST)
+       if [ -f $(DAT)/ttyoptions ] ; then echo ttyoptions >> $(DLBLST) ; fi
+       if [ -f $(DAT)/guioptions ] ; then echo guioptions >> $(DLBLST) ; fi
+       echo porthelp >> $(DLBLST)
+       echo rumors >> $(DLBLST)
+       echo help >> $(DLBLST)
+       echo hh >> $(DLBLST)
+       echo cmdhelp >> $(DLBLST)
+       echo keyhelp >> $(DLBLST)
+       echo history >> $(DLBLST)
+       echo opthelp >> $(DLBLST)
+       echo optmenu >> $(DLBLST)
+       echo wizhelp >> $(DLBLST)
+       echo license >> $(DLBLST)
+       echo engrave >> $(DLBLST)
+       echo epitaph >> $(DLBLST)
+       echo bogusmon >> $(DLBLST)
+       echo tribute >> $(DLBLST)
+       cd $(DAT) ; ls -1 *.lua >> $(DLBLST)
+
+$(DLB): $(U)dlb.exe $(DLBLST) | $(GAMEDIR)
+       $(U)dlb.exe CcIf $(dir $(DLBLST)) $(notdir $(DLBLST)) $(SRC)/nhdat
+       mv $(SRC)/nhdat$(NHV) $@
+
+CLEAN_DIR += $(ODLB)
+CLEAN_FILE += $(DTARGETS) $(DLBOBJS) $(INCL)/date.h
+
+#==========================================
+# nethackw
+#==========================================
+COREOBJS = $(addsuffix .o, allmain alloc apply artifact attrib ball bones botl cmd cppregex \
+          date 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 \
+          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 \
+          nhlan nhlobj nhlsel nhlua ntsound o_init objects objnam options \
+          pager pickup pline polyself potion pray priest quest questpgr \
+          random read rect region restore rip rnd role rumors \
+          safeproc save sfstruct shk shknam sit sounds sp_lev spell steal steed stubs symbols sys \
+          teleport timeout topten track trap u_init uhitm vault version vision \
+          weapon were wield windmain windows windsys wizard worm worn write zap)
+
+CFLAGSW = $(CFLAGS) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRPHICS
+
+ONHW = $(O)nethackw
+NHWONLY = $(addsuffix .o, mhaskyn mhdlg mhfont mhinput mhmain mhmap mhmenu \
+         mhmsgwnd mhrip mhsplash mhstatus mhtext mswproc tile NetHackW win10)
+NHWOBJS = $(addprefix $(ONHW)/, $(COREOBJS) $(NHWONLY))
+TILEFILES = $(addprefix $(WSHR)/, monsters.txt objects.txt other.txt)
+BMPS = $(addprefix $(MSWIN)/, $(addsuffix .bmp, mnsel mnselcnt mnunsel petmark pilemark rip splash tiles))
+NHWRES = $(ONHW)/winres.o
+NHWTARGETS = $(GAMEDIR)/NetHackW.exe
+
+nethackw: $(NHWTARGETS)
+
+$(GAMEDIR)/NetHackW.exe: $(NHWOBJS) $(NHWRES) $(LUALIB) | $(GAMEDIR)
+       $(ld) $(LDFLAGS) -mwindows $^ $(LIBS) -static -lstdc++ -o$@
+
+$(ONHW)/%.o: $(SRC)/%.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+
+$(ONHW)/cppregex.o: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+
+$(ONHW)/%.o: $(SSYS)/%.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+
+$(ONHW)/stubs.o: $(MSWSYS)/stubs.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) -DTTYSTUB $< -o$@
+
+$(ONHW)/%.o: $(MSWSYS)/%.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+
+$(ONHW)/%.o: $(MSWIN)/%.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+
+$(ONHW)/%.o: $(WSHR)/%.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+
+$(NHWRES): $(MSWIN)/NetHackW.rc $(BMPS) $(MSWIN)/NetHack.ico | $(ONHW)
+       $(rc) --include-dir=$(MSWIN) --input=$< -o$@
+
+$(MSWIN)/tiles.bmp: $(U)tile2bmp.exe $(TILEFILES)
+       $< $@
+
+$(MSWIN)/%.bmp: $(U)uudecode.exe $(MSWIN)/%.uu
+       $^
+       mv $(notdir $@) $@
+
+$(ONHW):
+       @mkdir -p $@
+
+CLEAN_DIR += $(ONHW)
+CLEAN_FILE += $(NHWTARGETS) $(NHWOBJS) $(NHWRES) $(BMPS)
+
+#==========================================
+# nethack
+#==========================================
+CFLAGSNH = $(CFLAGSU) -DNO_TILE_C -DSAFEPROCS -D_LIB
+
+ONH = $(O)nethack
+
+NHONLY = consoletty.o getline.o topl.o wintty.o
+ifeq "$(ADD_CURSES)" "Y"
+CFLAGSNH += -DCURSES_GRAPHICS -DCHTYPE_32 -DPDC_NCMOUSE
+NHONLY += $(addsuffix .o, cursdial cursinit cursinvt cursmain cursmesg cursmisc cursstat curswins)
+endif
+
+NHOBJS = $(addprefix $(ONH)/, $(COREOBJS) $(NHONLY))
+NHRES = $(ONH)/conres.o
+NHTARGET = $(GAMEDIR)/NetHack.exe
+
+nethack: $(NHTARGET)
+
+$(GAMEDIR)/NetHack.exe: $(NHOBJS) $(NHRES) $(LUALIB) $(PDCLIB) | $(GAMEDIR)
+       $(ld) $(LDFLAGS) -mconsole $^ $(LIBS) -static -lstdc++ -o$@
+
+$(ONH)/%.o: $(SRC)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/cppregex.o: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.o: $(SSYS)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/stubs.o: $(MSWSYS)/stubs.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) -DGUISTUB $< -o$@
+
+$(ONH)/%.o: $(MSWSYS)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.o: $(MSWIN)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.o: $(WSHR)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.o: $(TTY)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.o: $(WCURSES)/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $(PDCINCL) $< -o$@
+
+$(NHRES): $(MSWIN)/NetHack.rc $(MSWIN)/NetHack.ico | $(ONH)
+       $(rc) --include-dir=$(MSWIN) --input=$< -o$@
+
+$(ONH):
+       @mkdir -p $@
+
+CLEAN_DIR += $(ONH)
+CLEAN_FILE += $(NHTARGET) $(NHOBJS) $(NHRES)
+
+#==========================================
+#=============== TARGETS ==================
+#==========================================
+
+.PHONY: all clean default install lua makedefs recover pdcurses \
+       tile2bmp tilemap uudecode dlb nethackw nethack tileutil
+
+#
+#  Everything
+#
+
+all: install
+
+TO_INSTALL = $(GAMEDIR)/NetHack.exe $(RTARGETS) \
+            $(addprefix $(GAMEDIR)/, $(addsuffix .template, sysconf symbols .nethackrc) \
+            Guidebook.txt NetHack.txt license opthelp record)
+
+ifeq "$(USE_LUADLL)" "Y"
+TO_INSTALL += $(LUADLL)
+endif
+
+ifneq "$(SKIP_NETHACKW)" "Y"
+TO_INSTALL += $(GAMEDIR)/NetHackW.exe
+endif
+
+ifeq "$(USE_DLB)" "Y"
+TO_INSTALL += $(DLB)
+endif
+
+install: $(TO_INSTALL)
+ifdef TRAVIS_COMPILER
+       ls -l $(SRC)
+       ls -l $(DAT)
+       ls -l $(UTIL)
+endif
+ifneq "$(USE_DLB)" "Y"
+       cp $(DAT)/*.dat $(GAMEDIR)/
+endif
+       @echo NetHack is up to date.
+
+$(GAMEDIR)/symbols.template: $(DAT)/symbols
+       cp $< $@
+
+$(GAMEDIR)/NetHack.txt: $(DOC)/nethack.txt
+       cp $< $@
+
+$(GAMEDIR)/record:
+       touch $@
+
+$(GAMEDIR)/%: $(DAT)/%
+       cp $< $@
+
+$(GAMEDIR)/%: $(DOC)/%
+       cp $< $@
+
+$(GAMEDIR)/%: $(MSWSYS)/%
+       cp $< $@
+
+CLEAN_FILE += $(TO_INSTALL)
+
+clean:
+       @-rm -f $(CLEAN_FILE)
+       @$(foreach dir, $(CLEAN_DIR), \
+               if [ -d $(dir) ] ; then rmdir -p --ignore $(dir) ; fi ; )
+
+-include Makefile.mingw32.depend
+-include .depend
+# end of file
diff --git a/sys/windows/Makefile.mingw32.depend b/sys/windows/Makefile.mingw32.depend
new file mode 100644 (file)
index 0000000..0d426d1
--- /dev/null
@@ -0,0 +1,121 @@
+.PHONY: depend cleandep
+
+cce = gcc -E -MM -MT $(@:d=o)
+
+# Copy all $(cc) commands w/ their targets from Makefile.mingw32, 3rd party code unnecessary
+# Replace .o w/ .d, $(cc) w/ $(cce)
+# Check extraordinary "OBJ): " and handle them properly
+# Check all CLEAN_FILE lines, add obj files to $(OBJS4DEP)
+# Run
+#      mingw32-make depend
+
+$(OM)/%.d: $(SRC)/%.c $(NHLUAH) | $(OM)
+       $(cce) $(CFLAGSU) -DENUM_PM $< -o$@
+
+$(OM)/%.d: $(U)%.c $(NHLUAH) | $(OM)
+       $(cce) $(CFLAGSU) -DENUM_PM $< -o$@
+
+$(OR)/recover.d: $(U)recover.c | $(OR)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(OT)/tiletxt.d: $(WSHR)/tilemap.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) -DTILETEXT $< -o$@
+
+$(OT)/%.d: $(WSHR)/%.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(OT)/%.d: $(SRC)/%.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(OT)/tilete32.d: $(WSHR)/tiletext.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(OT)/tiletx32.d: $(WSHR)/tilemap.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) -DTILETEXT -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(GIF32OBJ:o=d): $(WSHR)/gifread.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(BMP32OBJ:o=d): $(WSHR)/tile2bmp.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) -DTILE_X=32 -DTILE_Y=32 $< -o$@
+
+$(OT)/panic.d: $(UTIL)/panic.c $(NHLUAH) | $(OT)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(OTM)/tilemap.d: $(WSHR)/tilemap.c $(NHLUAH) | $(OTM)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(OTM)/%.d: $(SRC)/%.c $(NHLUAH) | $(OTM)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(OU)/uudecode.d: $(SSYS)/uudecode.c | $(OU)
+       $(cce) $(CFLAGS) $(CONSOLEDEF) $< -o$@
+
+$(ODLB)/%.d: $(SRC)/%.c $(NHLUAH) | $(ODLB)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(ODLB)/%.d: $(U)%.c $(NHLUAH) | $(ODLB)
+       $(cce) $(CFLAGSU) $< -o$@
+
+$(ONHW)/%.d: $(SRC)/%.c $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) $< -o$@
+
+$(ONHW)/cppregex.d: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) $< -o$@
+
+$(ONHW)/%.d: $(SSYS)/%.c $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) $< -o$@
+
+$(ONHW)/stubs.d: $(MSWSYS)/stubs.c $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) -DTTYSTUB $< -o$@
+
+$(ONHW)/%.d: $(MSWSYS)/%.c $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) $< -o$@
+
+$(ONHW)/%.d: $(MSWIN)/%.c $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) $< -o$@
+
+$(ONHW)/%.d: $(WSHR)/%.c $(NHLUAH) | $(ONHW)
+       $(cce) $(CFLAGSW) $< -o$@
+
+$(ONH)/%.d: $(SRC)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/cppregex.d: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.d: $(SSYS)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/stubs.d: $(MSWSYS)/stubs.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) -DGUISTUB $< -o$@
+
+$(ONH)/%.d: $(MSWSYS)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.d: $(MSWIN)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.d: $(WSHR)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.d: $(TTY)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $< -o$@
+
+$(ONH)/%.d: $(WCURSES)/%.c $(NHLUAH) | $(ONH)
+       $(cce) $(CFLAGSNH) $(PDCINCL) $< -o$@
+
+OBJS4DEP = $(MOBJS) $(ROBJS) \
+          $(TOBJS) $(GIFOBJ) $(GIF32OBJ) $(PPMOBJ) $(BMP32OBJ) $(T32OBJS) $(TUCOMMON) \
+          $(TMOBJS) $(UOBJS) $(DLBOBJS) $(NHWOBJS) $(NHOBJS)
+DEP_TARGETS = $(OBJS4DEP:o=d)
+
+depend: $(DEP_TARGETS)
+       @cat $(DEP_TARGETS) > .depend
+
+cleandep:
+       @-rm -f $(DEP_TARGETS) .depend
+       @echo Done.
+
+CLEAN_FILE += .depend $(DEP_TARGETS)
+# end of file