Lots of major build changes here:
Signed-off-by: Steven Noonan <steven@uplinklabs.net>
GL5T36G3A2LUTTYSL7ZQVUYONUCXL5DK36532FM6XRAQCLYDWW2QC BDO6SJOEEVREHN3VB2VA6BB5AIL3IHIX2OZ3KMGG4ZYZ3UFB55PQC 24NJTUIRQWCZJGRMCEP6NAVN6H5QYLOBLQC7Q3TGARY3ZGIK6DDQC COVZYBVKEG4JGPFOWPC56ZQNE2AV7CXB4YMRGILCWP7UGVJLJ6OAC UVKOBD5ABJCD4WLZSAWNSGN35VXTJIBBQUV3S7JWDAYE74ZK7VTAC HLUK5PTCV2DXDPRGTIFQOVGQGXAJJY6SFRXE72IBLACO74NTULEAC WDPD4AXSBTRQTCAQH6T63ZY7LCR3WOHZAMRQ7OHWG3IYTDLOCT4AC IIDUZBVBKRX2IUCBQXUVEXFPWNQGMF257OQLMWDGJV52DLRVA4YQC LSMI37MKELA6OIYENRW73VOLH3XVZQEC5GWCDKLFM2WHQISLU76AC X5GLORIBKYA6FBLJLOCXPEBJCMLH3U2ASJGFRHTBT742YVHVOIBAC VKDFSMFEX27MB52A3IWK6VBOSQ4NBMW6O5X5ULVCAH7QSCLTCX7QC YGK52WU752U3THU3FOEGX2WYJIJBWXXDCUAWVU63DEXTWNXLFDHQC E3NIQ5J4A4NEHED5IG7AG2AX5BV7F7ANVBS53RXBO3EJ5U5CSMEAC QJSVN6CHOX7HBKPADNK4DJEN2FLGT7IFT7EWUWGFCHU65O5JKQRQC 4RNX37THHYSRVHADJRXJCEAVFDY43ZBBAS3LFTWOWLY22RN4HQFAC MKL266H3SU2ZFMSDTPBYELWHFKA6VH2CRCRP7PIHE5LXOT4N4ROAC VJNOAT646TRVBR44TNKO4WHBO54I2U5GLRWTIVDVWHHQ6CNYQ5ZAC ORBVTLWSVTJYVSCO2QXUKEXEF3GU2YUUNUP67EWFXRUIMFJ5VQJQC C25ULNTKMNOXT72ERWSFQZQW5E2OIM3TOGAAA33Z7EZQMZHRS2MAC 4VPFI4QI3ZKC2JISFUWFS4PWOJBHZFBLYGWOUZGRUANS4TI4OQPQC I7F3ARBYSHD2DGOSMJJKV3FEXJ6WVWKL5PJ3NRM3Q7HZD74QZ3CQC I2HL3DGBDA4UEHJGGOVGZ5QWUP2YRPWU6CW5BZF76KG25DYTGBZQC IBW33XSII77ZYMC4UXCODCEMIQTJHYQKFGD4KWSQEIRIIGLBTP3QC UL7XFKMUX3WIU4O2LZANK4ECJ654UZPDBFGNXUEYZYOLKBYBCG6AC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC L2BH25YQXSIQ7B66SXO7Q3IWUFVX7HTERRJZ5ZJJZS54ZETVFP6AC GJRMKM6IUTABRCU7T4MMFLZ3DDNUB6CHMA2DSD3WYKBES3VUI4XQC D4SVSJGLI3SXM376WITGOB5VHEAPKYJ3YYC46LBT5HHR6XURFN4QC 3A537UMVZSYIFVKVO3SVK5JRSRLDN3YJKK3RKELHR2D4U6CMKM4QC 2D77G7XIIDVS2RUE33YH2NAPSXNLXKXXN3RP2TKPLWRXTEAVSZ3QC DSEHSGOZ75YFYOVHTBE7JKA26A6ZFRSF7CYVBBPNGE7SZEZPSDJAC NCDWWDJQLAU5ORSAQGZKJJ5E22VTDGGPJMVVBWQFHQ2B3U3UFHDQC TRAWFIOUMHDLCRD56HPFEMPYWO4MZKZMIZODQ7Z2VJUPED5GWUFQC HNXKX6ZDQJV33E7UKZOLBYWJMRZ4QLEMXVXJZNRCTOIG2KVRTIEAC 5GYEHDYGDBJ7IQN7FND3G4UJNXINRS5B37MWRMIH3ZBIGF7XLETAC PCV44ADMK3UM2ANBGUCU4A6Q63MN5JY57SFE7LBFUCONWVS7DKKAC ADDKHU5M4FZVGBWGSWZGXYAIGIUBIIYWBVNELDLLIPL6QY5Z3F6QC IWFPY33RKYC6R54OBK5ZEMVSFBPYYYILOOCAA3NY6MDSNE73JP3AC SXTWWMONWAVOGIYRQP6ALJLLNCDNT4NNDTE2HXCUOVP6HZ7XNXFQC UB73UGG2GEG6AL4T76UILFLTELH4Z5WN54UROLJD6RDR3JG77CXAC FL42U7W4FLFPPSBTLDNPCIRFJG6SU2X3GWWQBQPPE2EHZ72WOSOQC DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC 4QYXUNAH54YJPAHB42Z3PPG7MGWGZ3G6Q5V2GTVOAB4MWECG52IAC FXY6BRPHZCE4PU4NFUVXYXF3BIOO4XVHOLRZELMJQL5EGYXD3HUAC OIAQU4VDTZ3EHBNC7FZIOW2QEQLTDHZ7O46XW2YWM6JRVBC66UPQC 22RFWMSJGG26Z2MQEEXGKVTFSTLREHQIG46WYOTMDRKI5YVMRNVAC MOT3YZFRY3JG2MH3GN2VD6IY3IJSAXJUXMXS222TXWKRFCENOCDQC 6NX75EOPSR6TBJ3NOR34ASWLIS3GU7O6J54S57VGDOS7Z4J55VTAC MTVWMQ5HV5LGDRU53GJV45GTANABRJLNIECWT7ZH2MCLO53XLFXAC S5TL2JAUMXGUGXV7HTDY7GUVOT4NTMJ6HZUMKTCFA2Z3NTYBZWQAC Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC MADTICUXDKQB7EKTXG7J2OIJGUM7A437FRWIBRA3BIVEKXEXHO6AC 3SQQ4MM6YO4I37CQ6GIBIX6BXAEVHNVNHPVMR3PPBBNO454D6XWQC V4TAUG2RU7M3IBHQCGH3BUQQLYSFNBU3AS66IPDLZ4GJ3M37YYMAC I4M3O5UA4UOV35WFD435G3GP6RT3EZ5NPRZ645X22A2Z7CR2E2AAC SXQ32Z7ZILMUYSDTK3WE6OOEBYZURCJIUDHT3PXVPV44CBZTPGJQC AEPGJLX47SNMG4B25UWQXXIQTN4N7TCIVSENYVYAJEQFPTT2OP6AC ODXSZBNRJW7RT2SQQLG4HFDMXVQFXQ4UXO4XRLB6POMI34N6QI5QC V46VVQZTXI2RGSXA7GLBFUQ37WFNPAR6E4WO4Q277EX7ZQCXYN6AC HBXWZNXAJ7LUX7FYUIHQYBTRMWVJC6CAQQL3NNZHK5ETLIFEZJ7QC JXFWRLWT7H34YXSOP2QYA422N2K3REDHBBDGTUSFR2TIQ4ZBNGAQC NIBZLTD56AH3S4E6RNBSZFTLPPLB2CUC5CKAEUHTL3HEFODMBHYQC ZIWGOQJ73QVKKG7UDUKHJ5BSCUFHWYNXUF342OO4CROUX6XPBVOAC EOGCYAOXAXL6KFP6VIJ62CEUAU5OHC2RR45BEW35S4NWIS3ZZ3JQC PHZTAI6CW7JHKFW77MKDK75UCNWBXFK7VDD3D5ORVXUFWV3C3EVQC BV4BW243OWMFTCP24H7QDAJLESNTDSR2A6KFLC7M36LZOAF44EKAC LV5VQHTUP5OPVIV6FGDX5EJTHT6UJYU7MDPNYSEWQRK3GTDIJ6MAC KOMZPTDEZP3P6EWBUECWDY7OWELOUTMAUKNEOJ7PWX5LJBTMRVQAC PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC KR655YT3I3U5DMN5NS3FPUGMDNT4BI56K3SFF2FNJ77C45NFKL5AC ADH3ZALVXLNZ3Q7L3CDCZOZFXHVWOVDM2RJLEMUCS4ROWCU676VAC WIJI6Q5CWCIYSKCCSIZJDJHXV7MFATDKDSH6WOQ7CB7FFDPXZYSQC 3JPTKQ6Z5GW7ZBUWQCLOUJSUN2CDLN4JL7BMKSHV4MA3BSXRTWYQC LVP5I5DHJGY3DG3DLIYBDVNULBCM7CD3HF4E5DW5QHCM6P2UZEJQC 22OOKSGMKOTQZNN7SDZOWC7WBKUWSIULH4GFSO45OSHCB3LK53TQC TJISAZK5RWKXIIC5UTQNY4KT3UX3ASGBUQQNWZ7ZDULPRYFRZXQQC 3DMAYDA3C6SBPOEOLKV33FNEUTXV43BHQFXBZIJ6CT5P4QFZJT5QC 6QJC4NUZIHK6QHDMIFBBOO3K2VF5TZ5BDN5NXJKOK6S5FPW3XBXQC KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC 4EWXDZSMYTEINQRUL4OHRUZVWMKCWEPYVJVGENQPBWUYU37SP63QC IOVEJGOB3UPGG7YZLZC7VZGAPASFQ4GBIPFFRDBWHAO66NV6UE6AC QXQE7C5XDYNF4JSHGDAVMS7HYLOC6YEZFOVFJ3RD7RB6U4AJSFIQC 5HVR2EAVL7HMHVZXGGUWIGSWERR5VKZWWKZXLQZFYZ2XNASMEGEQC 23GPKC7HCKVIPRMF4HPUROSVFVL4NQMRQQD5FUAFRLNZPYLZ4EEAC DOZORMA366M4HB5JKSS27BMCR6ET7QNZNND2B7KV3NVEEPR5H7EAC ZGM2JSUXIFZJOHJSZA2RT6RFP6AVY3UVSIXFFIUDAMWHT3ONNHGQC C3PLBBUOOQCXSVFKBWVMO2P3HA6Q2TQIDYAP67PILYOEKQMMPTYAC 5HRXXWHM5JHDZBCSUD65GYSQIFRD77DYV5PDAJZU4JTE4ZPH3LQAC BGPUXHZ2FDUKA6LAFNBDQJOT3XQGTZQDYBPU7Z6H5HTXZK2EG2BAC AGHYY44SI6QZHIMOCFTA6CN7NQGHQFJFZ32VJQGM3DMUQLTBGYRQC MWS346AS2OCQYDQ64HRT3U47NJCRGEYBLMT5K7DWSWT7ULMA4WLAC 5DAB7SLLJSAFRFYYSBGOUVCPSCTITT6L4V433HT5MTLSQ2LSUXFAC include makefile.objifeq ($(DEBUG_CRAWL),)OPATH := relelseOPATH := dbgendif# need .exe so make will find the right fileCXX = g++COPY = copyOS_TYPE = WIN32CONSOLE#LIB = -lcurso -lpano# Do the levcomp stuff first because that's the most likely to fail.OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))##########################################################################GAME_DEPENDS := prepare $(LUASRC)\$(LUALIBA) $(FSQLLIBA) $(PCRESRC)\$(PCRELIBA) $(OBJECTS)OBJECTS := levcomp.tab.o levcomp.lex.o \$(OBJECTS) $(RESOURCEOBJ)all: $(APPNAME)prepare:if not exist $(OPATH) mkdir $(OPATH)########################################################################### The level compiler#ifeq ($(DOYACC),y)# [ds] A plague on the broken copy command on Windoze.prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h$(subst /,\,for %%f in ($^) do $(COPY) %%f prebuilt)$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp$(subst /,\, cd $(UTIL)) && $(YACC) -d -b levcomp levcomp.ypp$(subst /,\, cd $(UTIL)) && move $(YTABC) levcomp.tab.cc$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp$(subst /,\, cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp)else$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(subst /,\,$(COPY) prebuilt/*.h $(UTIL))$(subst /,\,$(COPY) $< $@)$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc$(subst /,\,$(COPY) $< $@)endif##########################################################################DEPENDENCY_MKF := makefile.dep-include $(DEPENDENCY_MKF)install: $(APPNAME)ifneq ($(OPATH),$(INSTALLDIR))$(COPY) $(APPNAME) ${INSTALLDIR}endifmkdir $(INSTALLDIR)\dat 2>nul || echo "" >nulmkdir $(INSTALLDIR)\dat\lua 2>null || echo "">nulmkdir $(INSTALLDIR)\dat\clua 2>null || echo "">nulmkdir $(INSTALLDIR)\dat\descript 2>null || echo "">nulmkdir $(INSTALLDIR)\dat\database 2>null || echo "">nulmkdir $(INSTALLDIR)\settings 2>null || echo "">nulmkdir $(INSTALLDIR)\docs 2>null || echo "">nulcopy /y dat\*.des $(INSTALLDIR)\datcopy /y dat\clua\*.lua $(INSTALLDIR)\dat\cluacopy /y dat\descript\*.txt $(INSTALLDIR)\dat\descriptcopy /y dat\database\*.txt $(INSTALLDIR)\dat\databasecopy /y ..\settings\* $(INSTALLDIR)\settingscopy /y ..\docs\* $(INSTALLDIR)\docscopy /y ..\* $(INSTALLDIR)$(DELETE) $(INSTALLDIR)\*.shcopy /y dat\lua\*.lua $(INSTALLDIR)\dat\luaclean:$(DELETE) *.o$(DELETE) bones.*$(DELETE) $(OPATH)\bones.*$(DELETE) morgue.txt$(DELETE) crawl.exe$(DELETE) $(subst /,\,$(APPNAME))$(DELETE) *.sav$(DELETE) $(OPATH)\*.sav$(DELETE) core$(DELETE) $(OPATH)\core$(DELETE) *.0*$(DELETE) $(OPATH)\*.0*$(DELETE) *.lab$(DELETE) $(OPATH)\*.labstrip $(APPNAME)$(OPATH)/%.o: %.cc$(OPATH)/%.o: $(UTIL)%.cc$(CXX) $(YCFLAGS) -o $@ -c $<############################################################################## Build Lua@echo Building Lua...@cd $(LUASRC) && $(MAKE) crawl_mingw############################################################################## Build SQLite$(FSQLLIBA):@echo Building SQLitecd $(SQLSRC) && $(MAKE)############################################################################## Build PCRE$(PCRESRC)\$(PCRELIBA):@echo Building PCRE...@cd $(PCRESRC) && $(MAKE)########################################################################### Resources#$(OPATH)/$(RESOURCEOBJ): $(RESOURCE)$(WINDRES) $< $@############################################################################## Build unrandart datautil/art-data.plart-data.h: art-data.txt util/art-data.pl art-func.h$(LUASRC)\$(LUALIBA):${CXX} ${CFLAGS} -o $@ -c $<profile: $(GAME_DEPENDS)${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)debug: $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)$(APPNAME): $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)$(DELETE) $(OPATH)\morgue.txt$(DELETE) scores$(DELETE) $(OPATH)\scoresclean-lua:cd $(LUASRC) && $(MAKE) clean_winclean-sql:cd $(SQLSRC) && $(MAKE) "RM_F=del /f" clean$(DELETE) $(OPATH)\*.oclean-pcre:cd $(PCRESRC) && $(MAKE) cleandistclean: clean clean-lua clean-sql clean-pcre$(DELETE) $(OPATH)\*.o$(subst /,\,$(DELETE) $(UTIL)*.o)$(subst /,\,$(DELETE) $(UTIL)*.exe)$(subst /,\,$(DELETE) $(UTIL)*.lex.cc)$(subst /,\,$(DELETE) $(UTIL)*.tab.cc)$(subst /,\,$(DELETE) $(UTIL)*.tab.h)$(subst /,\,$(DELETE) $(UTIL)*.tab.c)$(subst /,\,$(DELETE) *.ixx)UTIL = util/YTABC := levcomp.tab.cYTABH := levcomp.tab.hifeq ($(LEX),)DOYACC :=endififeq ($(YACC),)DOYACC :=endifRESOURCE := $(UTIL)crawl.rcRESOURCEOBJ := crawlres.oWINDRES := windres.exeINSTALLDIR := $(OPATH)CFOTHERS := -fsigned-char \-fstrict-aliasing \-pedantic \-D$(OS_TYPE) $(EXTRA_FLAGS) \CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)YCFLAGS := $(INCLUDES) $(CFOTHERS)LDFLAGS =OBJECTS := $(OBJECTS) libw32c.o crash-w.o-DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS-O2 \CFWARN := -Wall -Wwrite-strings -Wshadow -pedantic# If you don't have flex or bison, set DOYACC to N or empty.DOYACC := nLEX := flexYACC := bison -yifeq ($(LUASRC),)endifLUALIB = luaLUALIBA = lib$(LUALIB).aSQLSRC := util\sqliteSQLLIB := sqlite3SQLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLLIB)\$(SQLIBA)PCRESRC := util\pcrePCRELIB := pcrePCRELIBA := lib$(PCRELIB).aLIB = -static -lwinmm -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -lpcreINCLUDES := -Iutil -I. -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC)LUASRC := util\lua\srcDELETE = delAPPNAME = $(OPATH)\crawl.exe# makefile.obj includes a list of object files needed to build Crawl.# -*- Makefile -*- for Dungeon Crawl (Win32, MinGW)
all: $(GAME)devclean:xcodebuild -project $(PROJECT) -target $(GAME) -configuration Development cleandevel:xcodebuild -project $(PROJECT) -target $(GAME) -configuration Development buildwizard:xcodebuild -project $(PROJECT) -target $(GAME) -configuration Wizard buildxcodebuild -project $(PROJECT) -target $(GAME) -configuration Debug builddebug:$(GAME):xcodebuild -project $(PROJECT) -target $(GAME) -configuration Release builddistclean: cleanrm -f bones.*rm -f morgue.txtrm -f scoresrm -f $(GAME)rm -f *.savrm -f corerm -f *.0*rm -f *.labxcodebuild -project $(PROJECT) -target $(GAME) -configuration Release cleanxcodebuild -project $(PROJECT) -target $(GAME) -configuration Debug cleanxcodebuild -project $(PROJECT) -target $(GAME) -configuration Wizard cleanclean:# Xcode handles dependencies, so install does _not_ have to depend on building.install:xcodebuild -project $(PROJECT) -target $(GAME) -configuration Release installPROJECT = Crawl.xcodeprojGAME = Crawl# -*- Makefile -*- for Dungeon Crawl
# -*- Makefile -*- for Dungeon Crawl (Cross-compiling MinGW for crawl.develz.org)# makefile.obj includes a list of object files needed to build Crawl.include makefile.objOPATH := build# need .exe so make will find the right fileAPPNAME = $(OPATH)/crawl.exeCXX = i586-mingw32msvc-g++DELETE = rm -fCOPY = cpOS_TYPE = WIN32TILESEXTRA_DEFINES = -DUSE_TILE -DCLUA_BINDINGS -DWIZARDSDL_PREFIX ?= $(HOME)/source/mingw32SDL_CFLAGS := -D_GNU_SOURCE=1 -Dmain=SDL_main -I$(SDL_PREFIX)/include/SDLSDL_LDFLAGS := -lmingw32 -lSDLmain -lSDL.dll -lSDL_image -lopengl32 -lglu32ifeq ($(INSTALLDIR),)INSTALLDIR := crawl-mingw32endif# If you don't have flex or bison, set DOYACC to N or empty.DOYACC := nLEX := flexYACC := bison -yifeq ($(LUASRC),)LUASRC := util/lua/srcendifLUALIB = luaLUALIBA = lib$(LUALIB).aSQLSRC := util/sqliteSQLLIB := sqlite3SQLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLLIB)/$(SQLIBA)PCRESRC := util/pcrePCRELIB := pcrePCRELIBA := lib$(PCRELIB).aRLTILES = rltilesEXTRA_INCLUDES += -I$(RLTILES)TILEDEFS = dngn main player unrandTILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)TILEDEFOBJS = $(TILEDEFPRES:%=%.o)TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)TILEDEFHDRS = $(TILEDEFPRES:%=%.h)OBJECTS += $(TILEDEFOBJS)TILEFILES = \main.png \player.png \dngn.pngDESTTILEFILES = $(TILEFILES:%=dat/tiles/%)LIB = -static -L$(HOME)/source/mingw32/lib -lwinmm -mwindows -lcomctl32 -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -l$(PCRELIB) $(SDL_LDFLAGS) -lfreetypeINCLUDES := -Iutil -I. -I$(HOME)/source/mingw32/include -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC) $(EXTRA_INCLUDES)CFWARN := -Wwrite-stringsCFOTHERS := -fsigned-char \-fstrict-aliasing \-pedantic \-O2 \-D$(OS_TYPE) $(EXTRA_FLAGS) \-DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS \-DWINVER=0x0400 -D_WIN32_IE=0x0400 \$(EXTRA_DEFINES)CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) $(SDL_CFLAGS)YCFLAGS := $(INCLUDES) $(CFOTHERS)OBJECTS := $(OBJECTS) libgui.o tilepick.o tile2.o tilereg.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o crash-w.oLDFLAGS =UTIL = util/YTABC := levcomp.tab.cYTABH := levcomp.tab.hifeq ($(LEX),)DOYACC :=endififeq ($(YACC),)DOYACC :=endifRESOURCE := $(UTIL)crawl.rcRESOURCEOBJ := crawlres.oWINDRES := i586-mingw32msvc-windres# Do the levcomp stuff first because that's the most likely to fail.OBJECTS := levcomp.tab.o levcomp.lex.o \$(OBJECTS) $(RESOURCEOBJ)OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))GAME_DEPENDS := prepare $(LUASRC)/$(LUALIBA) $(FSQLLIBA) $(PCRESRC)/$(PCRELIBA) $(TILEHEADERS) $(DESTTILEFILES) $(OBJECTS)##########################################################################all: $(APPNAME)prepare:mkdir -p $(OPATH)DEPENDENCY_MKF := makefile.dep-include $(DEPENDENCY_MKF)########################################################################### The level compiler#ifeq ($(DOYACC),y)# [ds] A plague on the broken copy command on Windoze.prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h$(COPY) $^ prebuilt/$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.yppcd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \&& mv $(YTABC) levcomp.tab.cc || false$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lppcd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lppelse$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(COPY) prebuilt/*.h $(UTIL)$(COPY) $< $@$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc$(COPY) $< $@endif########################################################################### RLTiles#ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%)makerltiles:pushd $(RLTILES) && $(MAKE) -f makefile.unix allmkdir -p $(OPATH)/rltiles$(TILEDEFSRCS): makerltiles$(TILEDEFHDRS): makerltiles$(ORIGTILEFILES): makerltilesdat/tiles/%.png: rltiles/%.pngmkdir -p dat/tiles$(COPY) $< $@clean-rltiles:pushd $(RLTILES) && $(MAKE) -f makefile.unix distclean####################################################################################################################################################install: $(APPNAME)ifneq ($(OPATH),$(INSTALLDIR))mkdir -p $(INSTALLDIR)$(COPY) $(APPNAME) ${INSTALLDIR}endifmkdir -p $(INSTALLDIR)/datmkdir -p $(INSTALLDIR)/dat/cluamkdir -p $(INSTALLDIR)/dat/databasemkdir -p $(INSTALLDIR)/dat/descriptmkdir -p $(INSTALLDIR)/dat/luamkdir -p $(INSTALLDIR)/dat/tilesmkdir -p $(INSTALLDIR)/docsmkdir -p $(INSTALLDIR)/settings$(COPY) dat/*.des $(INSTALLDIR)/dat/$(COPY) dat/clua/*.lua $(INSTALLDIR)/dat/clua/$(COPY) dat/database/*.txt $(INSTALLDIR)/dat/database/$(COPY) dat/descript/*.txt $(INSTALLDIR)/dat/descript/$(COPY) dat/lua/*.lua $(INSTALLDIR)/dat/lua/$(COPY) dat/tiles/*.png dat/tiles/*.ttf $(INSTALLDIR)/dat/tiles/$(COPY) ../docs/*.txt $(INSTALLDIR)/docs/$(COPY) ../docs/changes.stone_soup $(INSTALLDIR)/docs/$(COPY) ../CREDITS.txt $(INSTALLDIR)/$(COPY) ../README.txt ../README.pdf $(INSTALLDIR)/$(COPY) ../licence.txt $(INSTALLDIR)/LICENCE.txt$(COPY) ../settings/* $(INSTALLDIR)/settings/clean:$(DELETE) $(OPATH)/*.o$(DELETE) $(UTIL)*.o$(DELETE) $(UTIL)*.exe$(DELETE) $(UTIL)*.lex.cc$(DELETE) $(UTIL)*.tab.cc$(DELETE) $(UTIL)*.tab.h$(DELETE) $(UTIL)*.tab.c$(DELETE) *.ixxclean-lua:cd $(LUASRC) && $(MAKE) clean_winclean-sql:cd $(SQLSRC) && $(MAKE) cleanclean-pcre:cd $(PCRESRC) && $(MAKE) cleandistclean: clean clean-lua clean-sql clean-pcre clean-rltiles$(APPNAME): $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)i586-mingw32msvc-strip $(APPNAME)debug: $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)profile: $(GAME_DEPENDS)${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)$(OPATH)/%.o: %.cc $(TILEDEFHDRS)${CXX} ${CFLAGS} -o $@ -c $<# STL is bad in debug. Always compile this file with optimizations.$(OPATH)/tilebuf.o: tilebuf.cc $(TILEDEFHDRS)${CXX} ${CFLAGS} -O2 -o $@ -c $<$(OPATH)/%.o: $(UTIL)%.cc $(TILEDEFHDRS)$(CXX) $(YCFLAGS) -o $@ -c $<############################################################################## Build Lua$(LUASRC)/$(LUALIBA):@echo Building Lua...@cd $(LUASRC) && $(MAKE) crawl_mingw############################################################################## Build SQLite$(FSQLLIBA):@echo Building SQLitecd $(SQLSRC) && $(MAKE)############################################################################## Build unrandart dataart-data.h: art-data.txt util/art-data.pl art-func.hutil/art-data.pl############################################################################## Build PCRE$(PCRESRC)/$(PCRELIBA):@echo Building PCRE...@cd $(PCRESRC) && $(MAKE)########################################################################### Resources#$(OPATH)/$(RESOURCEOBJ): $(RESOURCE)$(WINDRES) $< $@
# -*- Makefile -*- for Dungeon Crawl (Cross-compiling MinGW for crawl.develz.org)# makefile.obj includes a list of object files needed to build Crawl.include makefile.objOPATH := build# need .exe so make will find the right fileAPPNAME = $(OPATH)/crawl.exeCXX = i586-mingw32msvc-g++DELETE = rm -fCOPY = cpOS_TYPE = WIN32CONSOLEifeq ($(INSTALLDIR),)INSTALLDIR := crawl-mingw32endif# If you don't have flex or bison, set DOYACC to N or empty.DOYACC := nLEX := flexYACC := bison -yifeq ($(LUASRC),)LUASRC := util/lua/srcendifLUALIB = luaLUALIBA = lib$(LUALIB).aSQLSRC := util/sqliteSQLLIB := sqlite3SQLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLLIB)/$(SQLIBA)PCRESRC := util/pcrePCRELIB := pcrePCRELIBA := lib$(PCRELIB).aLIB = -static -L$(HOME)/source/mingw32/lib -lwinmm -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -l$(PCRELIB)INCLUDES := -Iutil -I. -I$(HOME)/source/mingw32/include -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC)CFOTHERS := -fsigned-char \-fstrict-aliasing \-pedantic \-O2 \-D$(OS_TYPE) $(EXTRA_FLAGS) \-DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS -DWIZARDCFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)YCFLAGS := $(INCLUDES) $(CFOTHERS)OBJECTS := $(OBJECTS) libw32c.o crash-w.oLDFLAGS =#LIB = -lcurso -lpanoUTIL = util/YTABC := levcomp.tab.cYTABH := levcomp.tab.hifeq ($(LEX),)DOYACC :=endififeq ($(YACC),)DOYACC :=endifRESOURCE := $(UTIL)crawl.rcRESOURCEOBJ := crawlres.oWINDRES := i586-mingw32msvc-windres# Do the levcomp stuff first because that's the most likely to fail.OBJECTS := levcomp.tab.o levcomp.lex.o \$(OBJECTS) $(RESOURCEOBJ)OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))GAME_DEPENDS := prepare $(LUASRC)/$(LUALIBA) $(FSQLLIBA) $(PCRESRC)/$(PCRELIBA) $(OBJECTS)##########################################################################all: $(APPNAME)prepare:mkdir -p $(OPATH)DEPENDENCY_MKF := makefile.dep-include $(DEPENDENCY_MKF)########################################################################### The level compiler#ifeq ($(DOYACC),y)# [ds] A plague on the broken copy command on Windoze.prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h$(COPY) $^ prebuilt/$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.yppcd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \&& mv $(YTABC) levcomp.tab.cc || false$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lppcd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lppelse$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(COPY) prebuilt/*.h $(UTIL)$(COPY) $< $@$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc$(COPY) $< $@endif##########################################################################install: $(APPNAME)ifneq ($(OPATH),$(INSTALLDIR))mkdir -p $(INSTALLDIR)$(COPY) $(APPNAME) ${INSTALLDIR}endifmkdir -p $(INSTALLDIR)/datmkdir -p $(INSTALLDIR)/dat/cluamkdir -p $(INSTALLDIR)/dat/databasemkdir -p $(INSTALLDIR)/dat/descriptmkdir -p $(INSTALLDIR)/dat/luamkdir -p $(INSTALLDIR)/docsmkdir -p $(INSTALLDIR)/settings$(COPY) dat/*.des $(INSTALLDIR)/dat/$(COPY) dat/clua/*.lua $(INSTALLDIR)/dat/clua/$(COPY) dat/database/*.txt $(INSTALLDIR)/dat/database/$(COPY) dat/descript/*.txt $(INSTALLDIR)/dat/descript/$(COPY) dat/lua/*.lua $(INSTALLDIR)/dat/lua/$(COPY) ../docs/*.txt $(INSTALLDIR)/docs/$(COPY) ../docs/changes.stone_soup $(INSTALLDIR)/docs/$(COPY) ../CREDITS.txt $(INSTALLDIR)/$(COPY) ../README.txt ../README.pdf $(INSTALLDIR)/$(COPY) ../licence.txt $(INSTALLDIR)/LICENCE.txt$(COPY) ../settings/* $(INSTALLDIR)/settings/clean:$(DELETE) $(OPATH)/*.o$(DELETE) $(UTIL)*.o$(DELETE) $(UTIL)*.exe$(DELETE) $(UTIL)*.lex.cc$(DELETE) $(UTIL)*.tab.cc$(DELETE) $(UTIL)*.tab.h$(DELETE) $(UTIL)*.tab.c$(DELETE) *.ixxclean-lua:cd $(LUASRC) && $(MAKE) clean_winclean-sql:cd $(SQLSRC) && $(MAKE) cleanclean-pcre:cd $(PCRESRC) && $(MAKE) cleandistclean: clean clean-lua clean-sql clean-pcre$(DELETE) $(OPATH)/*.o$(DELETE) *.o$(DELETE) bones.*$(DELETE) $(OPATH)/bones.*$(DELETE) morgue.txt$(DELETE) $(OPATH)/morgue.txt$(DELETE) scores$(DELETE) $(OPATH)/scores$(DELETE) crawl.exe$(DELETE) $(APPNAME)$(DELETE) *.sav$(DELETE) $(OPATH)/*.sav$(DELETE) core$(DELETE) $(OPATH)/core$(DELETE) *.0*$(DELETE) $(OPATH)/*.0*$(DELETE) *.lab$(DELETE) $(OPATH)/*.lab$(APPNAME): $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)i586-mingw32msvc-strip $(APPNAME)debug: $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)profile: $(GAME_DEPENDS)${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)$(OPATH)/%.o: %.cc$(OPATH)/%.o: $(UTIL)%.cc$(CXX) $(YCFLAGS) -o $@ -c $<############################################################################## Build Lua$(LUASRC)/$(LUALIBA):@echo Building Lua...@cd $(LUASRC) && $(MAKE) crawl_mingw############################################################################## Build SQLite$(FSQLLIBA):@echo Building SQLitecd $(SQLSRC) && $(MAKE)############################################################################## Build unrandart dataart-data.h: art-data.txt util/art-data.pl art-func.hutil/art-data.pl############################################################################## Build PCRE$(PCRESRC)/$(PCRELIBA):@echo Building PCRE...@cd $(PCRESRC) && $(MAKE)########################################################################### Resources#$(OPATH)/$(RESOURCEOBJ): $(RESOURCE)$(WINDRES) $< $@${CXX} ${CFLAGS} -o $@ -c $<CFWARN := -Wwrite-strings
# -*- Makefile -*- for Dungeon Crawl (unix)GAME = crawl# this file contains a list of the libraries.# it will make a variable called OBJECTS that contains all the librariesinclude makefile.objDELETE = rm -fCOPY = cpOS_TYPE = UNIX# If you have lex and yacc, set DOYACC to y (lowercase y).DOYACC := y# Permissions to set on the game executable.MCHMOD := 2755# Permissions to set on the save directory.MCHMOD_SAVEDIR := 775# If you're installing Crawl for multiple users, you *must* set this to a# valid path before building Crawl. This is not necessary if you are building# Crawl for a single user.# SAVEDIR := /usr/games/crawl/saves/# DATADIR := /usr/games/crawl/data/LEX := flexYACC := bison -yLUASRC := util/lua/srcLUALIB = luaLUALIBA = l$(LUALIB).aSQLSRC := util/sqliteSQLLIB := sqlite3SQLLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLSRC)/$(SQLLIBA)EXTRA_INCLUDES += -I$(SQLSRC)EXTRA_DEPENDS += $(FSQLLIBA)endifYCFLAGS := $(INCLUDES) $(CFOTHERS)UTIL = util/YTABC := levcomp.tab.cYTABH := levcomp.tab.hOBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)DOYACC :=endifDOYACC :=endifSRC_PKG_BASE := stone_soupSRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | \egrep -o '[0-9]\.[0-9](\.[0-9])?')PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-srcSRC_PKG_TAR := $(PKG_SRC_DIR).tbz2SRC_PKG_ZIP := $(PKG_SRC_DIR).zipPKG_TIDY_LIST := $(UTIL)*.o $(LEVCOMP) *.o \$(UTIL)*.tab.cc $(UTIL)*.tab.h $(UTIL)*.lex.cc *.ixxPKG_EXCLUDES := $(PWD)/misc/src-pkg-excludes.lst##########################################################################all: $(GAME)########################################################################### DependenciesDEPENDENCY_MKF := makefile.depdepend: $(OBJECTS:.o=.cc)@for i in $^; do \echo "Updating dependencies for $$i"; \done-include $(DEPENDENCY_MKF)########################################################################### The level compiler#ifeq ($(DOYACC),y)prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.yppcd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \&& mv $(YTABC) levcomp.tab.cc || false$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lppcd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lppelse# Pull the level-compiler stuff up from prebuilt/$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.ccendif########################################################################### RLTiles#makerltiles:$(ORIGTILEFILES): makerltiles$(COPY) $< $@clean-rltiles:##################################################################################################################################################### The actual build targets#install: $(GAME)[ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)$(COPY) $(GAME) $(INSTALLDIR)chown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)chmod ${MCHMOD} ${INSTALLDIR}/$(GAME)mkdir -p $(DATADIR)/dat/cluamkdir -p $(DATADIR)/docsmkdir -p $(DATADIR)/dat/tileschown -R $(INSTALL_UGRP) $(DATADIR)ifneq ($(SAVEDIR),)mkdir -p $(SAVEDIR)chown $(INSTALL_UGRP) $(SAVEDIR)chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)endifclean:$(DELETE) *.o$(DELETE) $(UTIL)*.o$(DELETE) $(LEVCOMP)$(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc$(DELETE) *.ixxclean-lua:clean-sql:distclean: clean clean-lua clean-sql clean-rltiles$(DELETE) bones.*$(DELETE) morgue.txt$(DELETE) scores$(DELETE) $(GAME)$(DELETE) *.sav$(DELETE) core$(DELETE) *.0*$(DELETE) *.lab$(DELETE) $(DEPENDENCY_MKF)$(GAME): $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)profile: $(GAME_DEPENDS)${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)# [ds] Note we don't use the standard CFLAGS here; that's intentional, most# flex/bison combos I've tried don't produce code that passes the warnings# test.$(CXX) $(YCFLAGS) -o $@ -c $<############################################################################## Build Lua$(LUASRC)$(LUALIBA):echo Building Lua...############################################################################## Build SQLite$(FSQLLIBA):echo Building SQLite############################################################################## Packaging a source tarball for release## To package, you *must* have lex and yacc to generate the intermediates.ifeq ($(DOYACC),y)package-source: distclean prebuildyacc pkgtidy depend removeold vlink \pkgtarbz2 pkgzippkgtidy:$(DELETE) $(PKG_TIDY_LIST)removeold:if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fiif [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi# [ds] Existing directory names could produce a bad package!vlink:cd .. && WHERE=$$PWD && cd .. && \( [ -e $(PKG_SRC_DIR) ] || ln -sf $$WHERE $(PKG_SRC_DIR) )pkgtarbz2:cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \-X $(PKG_EXCLUDES) $(PKG_SRC_DIR)pkgzip:cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \-x@$(PKG_EXCLUDES)endif############################################################################## Build unrandart datautil/art-data.plart-data.h: art-data.txt util/art-data.pl art-func.h+$(MAKE) -C $(SQLSRC)+$(MAKE) -C $(LUASRC) crawl_unix$(UTIL)%.o: $(UTIL)%.cc $(TILEDEFHDRS)${CXX} ${CFLAGS} -c $< -o $@# STL is bad in debug. Always compile this file with optimizations.tilebuf.o: tilebuf.cc $(TILEDEFHDRS)${CXX} ${CFLAGS} -O2 -c $< -o $@%.o: %.cc $(TILEDEFHDRS)debug: $(GAME).PHONY : debug+$(MAKE) -C $(SQLSRC) clean+$(MAKE) -C $(LUASRC) clean$(COPY) dat/tiles/* $(DATADIR)/dat/tiles$(COPY) ../docs/*.txt $(DATADIR)/docsmkdir -p $(DATADIR)/settings$(COPY) ../settings/* $(DATADIR)/settings/mkdir -p $(DATADIR)/dat/descriptmkdir -p $(DATADIR)/dat/database$(COPY) dat/*.des $(DATADIR)/dat$(COPY) dat/lua/*.lua $(DATADIR)/dat/lua$(COPY) dat/clua/*.lua $(DATADIR)/dat/clua$(COPY) dat/descript/*.txt $(DATADIR)/dat/descript$(COPY) dat/database/*.txt $(DATADIR)/dat/databasemkdir -p $(DATADIR)/datmkdir -p $(DATADIR)/dat/luaifeq ($(DATADIR),)$(error DATADIR not set! Set DATADIR and run make clean install again)endif+$(MAKE) -C $(RLTILES) -f makefile.unix distclean && cd ..dat/tiles/%.png: $(RLTILES)/%.png$(TILEDEFSRCS): makerltiles$(TILEDEFHDRS): makerltiles+$(MAKE) -C rltiles -f makefile.unix allORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%)$(COPY) $< $@$(COPY) prebuilt/*.h $(UTIL)$(COPY) $< $@$(COPY) $^ prebuilt/mv -f $(DEPENDENCY_MKF).tmp $(DEPENDENCY_MKF)$(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF).tmp 2>/dev/null; \rm -f $(DEPENDENCY_MKF).tmpGAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS)ifeq ($(strip $(YACC)),)ifeq ($(strip $(LEX)),)CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) $(SDL_CFLAGS)ifneq ($(strip $(SAVEDIR)),)CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"'endififneq ($(strip $(DATADIR)),)CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"'ifneq ($(HURRY),y)CFWARN += -WuninitializedCFOTHERS += -O2endifendififneq ($(DEBUG_CRAWL),y)CFOTHERS := -fsigned-char -D$(OS_TYPE) $(EXTRA_FLAGS) -DCLUA_BINDINGSCFWARN := -Wall -Wwrite-strings -Wshadow -pedantic -Wno-parenthesesINCLUDES := $(INCLUDES) -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES) $(PNG_INCLUDE) $(FREETYPE_INCLUDE)EXTRA_INCLUDES += -I$(RLTILES)TILEFILES = \main.png \player.png \DESTTILEFILES = $(TILEFILES:%=dat/tiles/%)EXTRA_DEPENDS += $(DESTTILEFILES)LIB = -L$(LUASRC) -l$(LUALIB) $(LIBDBM) $(EXTRA_LIBS)dngn.png \gui.pngTILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)TILEDEFOBJS = $(TILEDEFPRES:%=%.o)TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)TILEDEFHDRS = $(TILEDEFPRES:%=%.h)OBJECTS += $(TILEDEFOBJS)TILEDEFS = dngn main player gui unrandRLTILES = rltiles# Note: link sqlite with the full path to the .a, so OSX uses the right one.LIBDBM := $(FSQLLIBA)# The user:group to install the game as.INSTALL_UGRP := games:gamesINSTALLDIR := /usr/games/crawl# Change this to y if you want to use Unicode glyphs in the map, and you have# libncursesw available.UNICODE_GLYPHS = n# OSX vs. Linux differences:ifeq ($(strip $(OSX)),y)PNG_INCLUDE := -I/sw/includeFREETYPE_INCLUDE := -I/sw/include/freetype2EXTRA_INCLUDES += -I/sw/includeelseSDL_LDFLAGS := $(shell sdl-config --libs) -lSDLmainendifEXTRA_LIBS := $(PNG_LDFLAGS) $(SDL_LDFLAGS) $(FREETYPE_LDFLAGS) -lGL -lGLU -lSDL_imagePNG_INCLUDE := $(shell pkg-config libpng --cflags)PNG_LDFLAGS := $(shell pkg-config libpng --libs)FREETYPE_INCLUDE := $(shell pkg-config freetype2 --cflags)FREETYPE_LDFLAGS := $(shell pkg-config freetype2 --libs)EXTRA_LIBS := $(FRAMEWORK_LIST:%=-Wl,-framework,%) $(LIB_LIST) -lzSW_LIB_LIST := SDL SDL_image SDLmain png tiff jpegLIB_LIST := $(SW_LIB_LIST:%=$(LIB_BASE)/lib%.a) $(FREETYPE_LIB)# The list of frameworks that SDL would normally dynamically load and need to# be included explicitly if SDL is linked statically.FRAMEWORK_LIST := Cocoa Carbon AudioUnit IOKit OpenGL QuickTime# Note: gcc on OS X will *always* include the dynamic library# version of any lib if it exists in the path. Therefore, all non-standard# libraries have to be linked explicitly by full path rather than searched# for.LIB_BASE := /sw/libFREETYPE_LIB := $(LIB_BASE)/freetype2/lib/libfreetype.aEXTRA_INCLUDES := -DUSE_TILE -DCLUA_BINDINGS# To get stack trace symbols.LDFLAGS = -rdynamicCXX = g++SDL_CFLAGS := $(shell sdl-config --cflags)OBJECTS += libgui.o tilepick.o tile2.o tilereg.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o crash-u.o
GAME = crawl# this file contains a list of the libraries.# it will make a variable called OBJECTS that contains all the librariesinclude makefile.objDELETE = rm -fCOPY = cpOS_TYPE = UNIX# If you're installing Crawl for multiple users, you *must* set this to aSQLSRC := util/sqliteSQLLIB := sqlite3SQLLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLSRC)/$(SQLLIBA)EXTRA_INCLUDES += -I$(SQLSRC)EXTRA_DEPENDS += $(FSQLLIBA)CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)YCFLAGS := $(INCLUDES) $(CFOTHERS)UTIL = util/YTABC := levcomp.tab.cYTABH := levcomp.tab.hDOYACC :=endifDOYACC :=endifSRC_PKG_BASE := stone_soupegrep -o '[0-9]\.[0-9](\.[0-9])?')PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-srcSRC_PKG_TAR := $(PKG_SRC_DIR).tbz2SRC_PKG_ZIP := $(PKG_SRC_DIR).zipPKG_TIDY_LIST := $(UTIL)*.o $(LEVCOMP) *.o \$(UTIL)*.tab.cc $(UTIL)*.tab.h $(UTIL)*.lex.cc *.ixxPKG_EXCLUDES := $(PWD)/misc/src-pkg-excludes.lst##########################################################################all: $(GAME)########################################################################### The level compiler#ifeq ($(DOYACC),y)prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.yppcd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lppcd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lppelse# Pull the level-compiler stuff up from prebuilt/$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.ccendif##################################################################################################################################################### The actual build targets#install: $(GAME)chmod ${MCHMOD} ${INSTALLDIR}/$(GAME)clean:$(DELETE) *.o$(DELETE) $(UTIL)*.o$(DELETE) $(LEVCOMP)$(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc$(DELETE) *.ixx$(DELETE) bones.*$(DELETE) morgue.txt$(DELETE) scores$(DELETE) $(GAME)$(DELETE) *.sav$(DELETE) core$(DELETE) *.0*$(DELETE) *.lab${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)profile: $(GAME_DEPENDS)${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB).cc.o:${CXX} ${CFLAGS} -c $<# [ds] Note we don't use the standard CFLAGS here; that's intentional, most# flex/bison combos I've tried don't produce code that passes the warnings# test.$(UTIL)%.o: $(UTIL)%.cc$(CXX) $(YCFLAGS) -o $@ -c $<############################################################################## Build Lua$(LUASRC)$(LUALIBA):echo Building Lua...############################################################################## Build SQLite$(FSQLLIBA):echo Building SQLite############################################################################## Build unrandart datautil/art-data.plart-data.h: art-data.txt util/art-data.pl art-func.h+$(MAKE) -C $(SQLSRC)#############################################################################+$(MAKE) -C $(LUASRC) crawl_unix# Packaging a source tarball for release## To package, you *must* have lex and yacc to generate the intermediates.ifeq ($(DOYACC),y)pkgtidy:$(DELETE) $(PKG_TIDY_LIST)removeold:if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fiif [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi# [ds] Existing directory names could produce a bad package!vlink:cd .. && WHERE=$$PWD && cd .. && \( [ -e $(PKG_SRC_DIR) ] || ln -sf $$WHERE $(PKG_SRC_DIR) )pkgtarbz2:cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \-X $(PKG_EXCLUDES) $(PKG_SRC_DIR)pkgzip:cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \-x@$(PKG_EXCLUDES)endifpackage-source: distclean prebuildyacc pkgtidy depend removeold vlink \pkgtarbz2 pkgzipdebug: $(GAME).PHONY : debug$(GAME): $(GAME_DEPENDS)$(DELETE) $(DEPENDENCY_MKF)clean-lua:clean-sql:distclean: clean clean-lua clean-sql+$(MAKE) -C $(SQLSRC) clean+$(MAKE) -C $(LUASRC) cleanmkdir -p $(DATADIR)/settings$(COPY) ../settings/* $(DATADIR)/settings/mkdir -p $(DATADIR)/datmkdir -p $(DATADIR)/dat/luamkdir -p $(DATADIR)/dat/cluamkdir -p $(DATADIR)/dat/descriptmkdir -p $(DATADIR)/dat/database$(COPY) dat/*.des $(DATADIR)/dat$(COPY) dat/lua/*.lua $(DATADIR)/dat/lua$(COPY) dat/clua/*.lua $(DATADIR)/dat/clua$(COPY) dat/descript/*.txt $(DATADIR)/dat/descript$(COPY) dat/database/*.txt $(DATADIR)/dat/databasemkdir -p $(DATADIR)/docschown -R $(INSTALL_UGRP) $(DATADIR)ifneq ($(SAVEDIR),)mkdir -p $(SAVEDIR)chown $(INSTALL_UGRP) $(SAVEDIR)chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)endif$(COPY) ../docs/*.txt $(DATADIR)/docschown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)ifeq ($(DATADIR),)$(error DATADIR not set! Set DATADIR and run make clean install again)endif[ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)$(COPY) $(GAME) $(INSTALLDIR)$(COPY) $< $@$(COPY) prebuilt/*.h $(UTIL)$(COPY) $< $@&& mv $(YTABC) levcomp.tab.cc || false$(COPY) $^ prebuilt/# Dependenciesdepend: $(OBJECTS:.o=.cc)@for i in $^; do \echo "Updating dependencies for $$i"; \donemv -f $(DEPENDENCY_MKF).tmp $(DEPENDENCY_MKF)-include $(DEPENDENCY_MKF)##########################################################################$(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF).tmp 2>/dev/null; \rm -f $(DEPENDENCY_MKF).tmpDEPENDENCY_MKF := makefile.deptest: $(GAME)$(PWD)/$(GAME) -testSRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | \GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS)ifeq ($(strip $(YACC)),)ifeq ($(strip $(LEX)),)OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)endififneq ($(strip $(DATADIR)),)CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"'endif# Include path for (n)curses with Unicode support.INCLUDES += -I/usr/include/ncursesw# Your ncurses library may include Unicode support, and you may not have a# separate libncursesw; in that case, change this line accordingly.LIBCURS = ncurseswCFOTHERS += -DUNICODE_GLYPHSendif# The standard ncurses library also supports Unicode on Mac OS/Darwin.ifeq ($(shell uname),Darwin)LIBCURS = ncursesendifelse# Include path for curses or ncurses (non-Unicode).INCLUDES += -I/usr/include/ncursesLIBCURS = ncursesendififneq ($(strip $(UNICODE_LOCALE)),)ifneq ($(strip $(UNICODE_LOCALE)),.)CFOTHERS += -DUNICODE_LOCALE=\"$(strip $(UNICODE_LOCALE))\"elseCFOTHERS += -DUNICODE_LOCALE=\"\"endififeq ($(strip $(UNICODE_GLYPHS)),y)ifneq ($(strip $(SAVEDIR)),)CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"'ifneq ($(HURRY),y)ifneq ($(DEBUG_CRAWL),y)CFWARN += -WuninitializedCFOTHERS += -O2endifendifCFOTHERS := -fsigned-char -D$(OS_TYPE) $(EXTRA_FLAGS) -DCLUA_BINDINGSINCLUDES := $(INCLUDES) -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES)CFWARN := -Wall -Wno-parentheses -Wwrite-strings -Wshadow -pedanticLIB = -l$(LIBCURS) -L$(LUASRC) -l$(LUALIB) $(LIBDBM)LIBDBM := $(FSQLLIBA)# valid path before building Crawl. This is not necessary if you are building# Crawl for a single user.LUASRC := util/lua/srcLUALIB = luaLUALIBA = l$(LUALIB).aLEX := flexYACC := bison -y# SAVEDIR := /usr/games/crawl/saves/# DATADIR := /usr/games/crawl/data/# If you have lex and yacc, set DOYACC to y (lowercase y).DOYACC := y# Permissions to set on the game executable.MCHMOD := 2755# Permissions to set on the save directory.MCHMOD_SAVEDIR := 775# The user:group to install the game as.INSTALL_UGRP := games:gamesINSTALLDIR := /usr/games/crawl# If you're using UNICODE_GLYPHS=y, and have a preferred Unicode# (UTF-8) locale you want Crawl to use, you can set it here. TheUNICODE_LOCALE =# default is en_US.UTF-8. If you'd prefer that Crawl use the locale# as set in your environment LC_* variables, use UNICODE_LOCALE = .UNICODE_GLYPHS = n# Change this to y (case-sensitive!) if you want to use Unicode glyphs# in the map, and you have libncursesw available.# To get stack trace symbols.LDFLAGS = -rdynamicCXX = g++OBJECTS += libunix.o crash-u.o# -*- Makefile -*- for Dungeon Crawl (unix)
# -*- Makefile -*- for Dungeon Crawl (Win32, MinGW)# makefile.obj includes a list of object files needed to build Crawl.include makefile.objifeq ($(DEBUG_CRAWL),)OPATH := relelseOPATH := dbgendif# need .exe so make will find the right fileAPPNAME = $(OPATH)\crawl.exeDELETE = delCOPY = copyOS_TYPE = WIN32TILESINSTALLDIR := $(OPATH)# If you don't have flex or bison, set DOYACC to N or empty.DOYACC := nLEX := flexYACC := bison -yifeq ($(LUASRC),)LUASRC := util\lua\srcendifLUALIB = luaLUALIBA = lib$(LUALIB).aSQLSRC := util\sqliteSQLLIB := sqlite3SQLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLLIB)\$(SQLIBA)CFOTHERS := -fsigned-char \-fstrict-aliasing \-pedantic \-D$(OS_TYPE) $(EXTRA_FLAGS) \-DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS \YCFLAGS := $(INCLUDES) $(CFOTHERS)UTIL = util/YTABC := levcomp.tab.cYTABH := levcomp.tab.hifeq ($(LEX),)DOYACC :=endififeq ($(YACC),)DOYACC :=endif# Do the levcomp stuff first because that's the most likely to fail.OBJECTS := levcomp.tab.o levcomp.lex.o \OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))##########################################################################all: $(APPNAME)prepare:if not exist $(OPATH) mkdir $(OPATH)DEPENDENCY_MKF := makefile.dep-include $(DEPENDENCY_MKF)########################################################################### The level compiler#ifeq ($(DOYACC),y)# [ds] A plague on the broken copy command on Windoze.prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h$(subst /,\,for %%f in ($^) do $(COPY) %%f prebuilt)$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp$(subst /,\, cd $(UTIL)) && $(YACC) -d -b levcomp levcomp.ypp$(subst /,\, cd $(UTIL)) && move $(YTABC) levcomp.tab.cc$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp$(subst /,\, cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp)else$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(subst /,\,$(COPY) prebuilt/*.h $(UTIL))$(subst /,\,$(COPY) $< $@)$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc$(subst /,\,$(COPY) $< $@)endif########################################################################### RLTiles#makerltiles:$(ORIGTILEFILES): makerltilesclean-rltiles:####################################################################################################################################################install: $(APPNAME)ifneq ($(OPATH),$(INSTALLDIR))$(COPY) $(APPNAME) ${INSTALLDIR}endifmkdir $(INSTALLDIR)\dat 2>nul || echo "" >nulmkdir $(INSTALLDIR)\dat\clua 2>null || echo "">nulcopy /y dat\*.des $(INSTALLDIR)\datcopy /y dat\clua\*.lua $(INSTALLDIR)\dat\cluamkdir $(INSTALLDIR)\dat\tiles 2>nul || echo "" > nulclean:$(DELETE) $(OPATH)\*.o$(subst /,\,$(DELETE) $(UTIL)*.o)$(subst /,\,$(DELETE) $(UTIL)*.exe)$(subst /,\,$(DELETE) $(UTIL)*.lex.cc)$(subst /,\,$(DELETE) $(UTIL)*.tab.cc)$(subst /,\,$(DELETE) $(UTIL)*.tab.h)$(subst /,\,$(DELETE) $(UTIL)*.tab.c)$(subst /,\,$(DELETE) *.ixx)clean-lua:cd $(LUASRC) && $(MAKE) clean_winclean-sql:cd $(SQLSRC) && $(MAKE) "RM_F=del /f" clean$(DELETE) *.o$(DELETE) bones.*$(DELETE) $(OPATH)\bones.*$(DELETE) morgue.txt$(DELETE) $(OPATH)\morgue.txt$(DELETE) crawl.exe$(DELETE) $(subst /,\,$(APPNAME))$(DELETE) *.sav$(DELETE) $(OPATH)\*.sav$(DELETE) core$(DELETE) $(OPATH)\core$(DELETE) *.0*$(DELETE) $(OPATH)\*.0*$(DELETE) *.lab$(DELETE) $(OPATH)\*.lab$(APPNAME): $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)strip $(APPNAME)debug: $(GAME_DEPENDS)${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)profile: $(GAME_DEPENDS)${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)$(CXX) $(YCFLAGS) -o $@ -c $<############################################################################## Build Lua$(LUASRC)\$(LUALIBA):@echo Building Lua...@cd $(LUASRC) && $(MAKE) crawl_mingw############################################################################## Build SQLite$(FSQLLIBA):@echo Building SQLitecd $(SQLSRC) && $(MAKE)############################################################################## Build PCRE$(PCRESRC)\$(PCRELIBA):@echo Building PCRE...@cd $(PCRESRC) && $(MAKE)########################################################################### Resources#$(OPATH)/$(RESOURCEOBJ): $(RESOURCE)$(WINDRES) $< $@############################################################################## Build unrandart datautil/art-data.plart-data.h: art-data.txt util/art-data.pl art-func.h# STL is bad in debug. Always compile this file with optimizations.$(OPATH)/tilebuf.o: tilebuf.cc $(TILEDEFHDRS)${CXX} ${CFLAGS} -O2 -o $@ -c $<$(OPATH)/%.o: $(UTIL)%.cc $(TILEDEFHDRS)${CXX} ${CFLAGS} -o $@ -c $<$(OPATH)/%.o: %.cc $(TILEDEFHDRS)$(DELETE) scores$(DELETE) $(OPATH)\scoresdistclean: clean clean-lua clean-sql clean-pcre clean-rltiles$(DELETE) dbg\*.o$(DELETE) rel\*.oclean-pcre:cd $(PCRESRC) && $(MAKE)copy /y ..\* $(INSTALLDIR)$(DELETE) $(INSTALLDIR)\*.shcopy /y dat\tiles\*.* $(INSTALLDIR)\dat\tilescopy /y dat\descript\*.txt $(INSTALLDIR)\dat\descriptcopy /y dat\database\*.txt $(INSTALLDIR)\dat\databasecopy /y ..\settings\* $(INSTALLDIR)\settingscopy /y ..\docs\* $(INSTALLDIR)\docscopy /y dat\lua\*.lua $(INSTALLDIR)\dat\luamkdir $(INSTALLDIR)\dat\descript 2>null || echo "">nulmkdir $(INSTALLDIR)\dat\database 2>null || echo "">nulmkdir $(INSTALLDIR)\settings 2>null || echo "">nulmkdir $(INSTALLDIR)\docs 2>null || echo "">nulmkdir $(INSTALLDIR)\dat\lua 2>null || echo "">nulpushd $(RLTILES) && $(MAKE) -f makefile.mgw distclean$(subst /,\,$(COPY) $< $@)dat/tiles/%.png: rltiles/%.pngpushd $(RLTILES) && $(MAKE) -f makefile.mgw allmkdir $(OPATH)\rltiles 2>nul || echo.>nul$(TILEDEFSRCS): makerltiles$(TILEDEFHDRS): makerltilesORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%)GAME_DEPENDS := prepare $(LUASRC)\$(LUALIBA) $(FSQLLIBA) $(PCRESRC)\$(PCRELIBA) $(TILEHEADERS) $(DESTTILEFILES) $(OBJECTS)$(OBJECTS) $(RESOURCEOBJ)RESOURCE := $(UTIL)crawl.rcRESOURCEOBJ := crawlres.oWINDRES := windres.exeLDFLAGS =OBJECTS := $(OBJECTS) libgui.o tilepick.o tile2.o tilereg.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o crash-w.oCFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) $(SDL_CFLAGS)-DWINVER=0x0400 -D_WIN32_IE=0x0400 \$(EXTRA_DEFINES) \-O2 \CFWARN := -Wall -Wwrite-strings -pedanticLIB = -lwinmm -mwindows -lcomctl32 -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -l$(PCRELIB) -lpng $(SDL_LDFLAGS) -lopengl32 -lglu32 -lSDL_image -lfreetypeINCLUDES := -Iutil -I. -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC) $(EXTRA_INCLUDES)RLTILES = rltilesEXTRA_INCLUDES += -I$(RLTILES)TILEFILES = \main.png \player.png \DESTTILEFILES = $(TILEFILES:%=dat/tiles/%)dngn.png \gui.pngTILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)TILEDEFOBJS = $(TILEDEFPRES:%=%.o)TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)TILEDEFHDRS = $(TILEDEFPRES:%=%.h)OBJECTS += $(TILEDEFOBJS)TILEDEFS = dngn main player gui unrandPCRESRC := util\pcrePCRELIB := pcrePCRELIBA := lib$(PCRELIB).aEXTRA_DEFINES = -DUSE_TILE -DCLUA_BINDINGSSDL_PREFIX ?= C:/mingwSDL_CFLAGS := -D_GNU_SOURCE=1 -Dmain=SDL_main -I$(SDL_PREFIX)/include/SDLSDL_LDFLAGS := -lmingw32 -lSDLmain -lSDL -mwindowsCXX = g++
YACC := bison -yLEX := flexifneq ($(findstring $(MAKEFLAGS),s),s)ifndef VQUIET_YACC = @echo ' ' YACC $@;QUIET_LEX = @echo ' ' LEX $@;export Vendifendifall: levcomp.tab.cc levcomp.lex.ccclean:rm -f levcomp.tab.cc levcomp.tab.hrm -f levcomp.lex.ccrm -f *.o%.tab.cc: %.tab.c@mv $< $@%.lex.cc: %.lpp$(QUIET_LEX)$(LEX) -o$@ $<%.tab.c: %.ypp$(QUIET_YACC)$(YACC) -d -b $* $<
#Makefile chooser. Choose one:
## Dungeon Crawl Stone Soup# GNU Makefile## largely written by Steven Noonan <steven@uplinklabs.net># (if something breaks, blame him.)#GAME = crawlCC = gccCXX = g++DELETE = rm -fCOPY = cp## Platform Detection## Use the variable OSNAME if you need to add something that's# platform-specific.# The valid OSNAME values are currently:# 'WIN32': alias for MinGW and Cygwin# 'MacOS': alias for Darwin (Mac OS X)# and non-translated values from other platforms (values from# 'uname -s' call). So Linux is simply 'Linux', etc.#UNAME_S := $(shell uname -s | cut -d'_' -f1)OSNAME =ifeq ($(UNAME_S),MINGW32)OSNAME = WIN32endififeq ($(UNAME_S),CYGWIN)OSNAME = WIN32endififeq ($(UNAME_S),Darwin)OSNAME = MacOSendififeq ($(OSNAME),)OSNAME = $(UNAME_S)endififeq ($(OSNAME),WIN32)GAME = crawl.exeendifTILES = n## Set up object file dependencies for $(GAME) target.#include makefile.obj# Works for Mac OS X and Linux.OBJECTS += crash-u.oifneq ($(TILES),n)OBJECTS += libgui.o tile2.o tilereg.o tilepick.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.oelseifneq ($(UNAME_S),MINGW32)OBJECTS += libunix.oelseOBJECTS += libw32c.oendifendif# To get stack trace symbols.# Note that MinGW doesn't support -rdynamic.ifeq ($(OSNAME),WIN32)LDFLAGS :=elseLDFLAGS := -rdynamicendif# Change this to y (case-sensitive!) if you want to use Unicode glyphs# in the map, and you have libncursesw available.UNICODE_GLYPHS = n# If you're using UNICODE_GLYPHS=y, and have a preferred Unicode# (UTF-8) locale you want Crawl to use, you can set it here. The# default is en_US.UTF-8. If you'd prefer that Crawl use the locale# as set in your environment LC_* variables, use UNICODE_LOCALE = .UNICODE_LOCALE =# If you have lex and yacc, set DOYACC to y (lowercase y).DOYACC := y# Permissions to set on the game executable.MCHMOD := 2755# Permissions to set on the save directory.MCHMOD_SAVEDIR := 775# The user:group to install the game as.INSTALL_UGRP := games:gamesINSTALLDIR := /usr/games/crawl# If you're installing Crawl for multiple users, you *must* set this to a# valid path before building Crawl. This is not necessary if you are building# Crawl for a single user.# SAVEDIR := /usr/games/crawl/saves/# DATADIR := /usr/games/crawl/data/PCH := n# libpcrePCRESRC := util/pcre/PCRELIB := pcrePCRELIBA := lib$(PCRELIB).aFPCRELIBA := $(PCRESRC)$(PCRELIBA)# LUALUASRC := util/lua/src/LUALIB := luaLUALIBA := lib$(LUALIB).aFLUALIBA := $(LUASRC)$(LUALIBA)# SQLiteSQLSRC := util/sqlite/SQLLIB := sqlite3SQLLIBA := lib$(SQLLIB).aFSQLLIBA := $(SQLSRC)$(SQLLIBA)LIBDBM := $(FSQLLIBA)EXTRA_INCLUDES += -I$(SQLSRC)EXTRA_DEPENDS += $(FSQLLIBA)LIB := -L$(LUASRC) -l$(LUALIB) $(LIBDBM)INCLUDES += -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES)ifneq ($(TILES),n)RLTILES = rltilesifneq ($(shell which pkg-config 2> /dev/null),)# If pkg-config is available, it's the surest way to find where# the contributing libraries are located.#PNG_INCLUDE := $(shell pkg-config libpng --cflags-only-I)PNG_CFLAGS := $(shell pkg-config libpng --cflags-only-other)PNG_LDFLAGS := $(shell pkg-config libpng --libs)FREETYPE_INCLUDE := $(shell pkg-config freetype2 --cflags-only-I)FREETYPE_CFLAGS := $(shell pkg-config freetype2 --cflags-only-other)FREETYPE_LDFLAGS := $(shell pkg-config freetype2 --libs)SDL_INCLUDE := $(shell pkg-config sdl --cflags-only-I)SDL_CFLAGS := $(shell pkg-config sdl --cflags-only-other)SDL_LDFLAGS := $(shell pkg-config sdl --libs)else # pkg-config# Ugh, pkg-config isn't available. We're probably on MinGW, Cygwin,# or some other stupid platform. We've got to assume that the# libraries are either in the standard paths or are in /opt/<lib>/.#PNG_INCLUDE := -I/opt/libpng/includePNG_CFLAGS :=PNG_LDFLAGS := -L/opt/libpng/lib -lpngFREETYPE_INCLUDE := -I/opt/freetype/includeFREETYPE_CFLAGS :=FREETYPE_LDFLAGS := -L/opt/freetype/lib -lfreetypeifneq ($(which sdl-config 2> /dev/null),)# sdl-config is our second best bet...#SDL_INCLUDE := $(shell sdl-config --cflags | tr ' ' '\n' | grep ^[-]I | tr '\n' ' ')SDL_CFLAGS := $(shell sdl-config --cflags | tr ' ' '\n' | grep -v ^[-]I | tr '\n' ' ')SDL_LDFLAGS := $(shell sdl-config --libs)else # sdl-config# Fine, we have to make some REALLY ugly assumptions...#SDL_INCLUDE := -I/opt/sdl/include/SDLSDL_CFLAGS :=SDL_LDFLAGS := -L/opt/sdl/lib -lSDL -lSDLmainendif # sdl-configendif # pkg-configLIB += $(PNG_LDFLAGS) $(FREETYPE_LDFLAGS) $(SDL_LDFLAGS) -lSDL_imageifeq ($(OSNAME),MacOS)LIB += -framework OpenGL -framework AppKitelseLIB += -lGL -lGLUendifEXTRA_FLAGS += -DUSE_TILE $(PNG_CFLAGS) $(FREETYPE_CFLAGS) $(SDL_CFLAGS)INCLUDES += -I$(RLTILES) $(PNG_INCLUDE) $(FREETYPE_INCLUDE) $(SDL_INCLUDE)endif # TILESCFWARN := -Wall -Wno-parentheses -Wwrite-strings -Wshadow -pedanticCFOTHERS = -fno-strict-aliasing -fsigned-char $(EXTRA_FLAGS) -DCLUA_BINDINGS -pipe $(SDL_CFLAGS)## Figure out the build settings for this type of build## Crawl defaults# Optimized, no debugging.FULLDEBUG=nWIZARD=nDEBUG=nOPTIMIZE=y# Debug# No optimization, full debugging.ifeq ($(MAKECMDGOALS),debug)FULLDEBUG=yWIZARD=yDEBUG=yOPTIMIZE=nendif# Wizard# Optimized, with wizard mode.ifeq ($(MAKECMDGOALS),wizard)FULLDEBUG=nWIZARD=yDEBUG=yOPTIMIZE=yendif# Profile# Optimized, with full debugging.ifeq ($(MAKECMDGOALS),profile)FULLDEBUG=yWIZARD=yDEBUG=yOPTIMIZE=yendififeq ($(FULLDEBUG),y)EXTRA_FLAGS += -DFULLDEBUGendififeq ($(DEBUG),y)EXTRA_FLAGS += -ggdbendififeq ($(WIZARD),y)EXTRA_FLAGS += -DWIZARDendififeq ($(OPTIMIZE),y)CFOPTIMIZE := -O2elseCFOPTIMIZE := -O0endififneq ($(PCH),n)CFWARN += -Winvalid-pchendif# Cygwin has a panic attack if we do this...ifneq ($(UNAME_S),CYGWIN)CFWARN += -WuninitializedelseCFWARN += -Wno-uninitializedendififneq ($(strip $(SAVEDIR)),)CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"'endififneq ($(strip $(DATADIR)),)CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"'endififeq ($(strip $(UNICODE_GLYPHS)),y)# Include path for (n)curses with Unicode support.INCLUDES += -I/usr/include/ncursesw# Your ncurses library may include Unicode support, and you may not have a# separate libncursesw; in that case, change this line accordingly.LIBCURS = ncurseswCFOTHERS += -DUNICODE_GLYPHSifneq ($(strip $(UNICODE_LOCALE)),)ifneq ($(strip $(UNICODE_LOCALE)),.)CFOTHERS += -DUNICODE_LOCALE=\"$(strip $(UNICODE_LOCALE))\"elseCFOTHERS += -DUNICODE_LOCALE=\"\"endifendif# The standard ncurses library also supports Unicode on Mac OS/Darwin.ifeq ($(shell uname),Darwin)LIBCURS = ncursesendifelse# Include path for curses or ncurses (non-Unicode).INCLUDES += -I/usr/include/ncursesLIBCURS = ncursesendififeq ($(OSNAME),WIN32)ifneq ($(TILES),n)CFOTHERS += -DWIN32TILESelseCFOTHERS += -DWIN32CONSOLEendifendififeq ($(OSNAME),WIN32)INCLUDES += -Iutil/pcreLIB += $(FPCRELIBA)elseLIB += -l$(LIBCURS)endifCFLAGS := $(CFOPTIMIZE) $(CFWARN) $(INCLUDES) $(CFOTHERS)YCFLAGS := $(CFOPTIMIZE) $(CFOTHERS) $(INCLUDES)UTIL = util/OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)LEX := $(shell which flex 2> /dev/null)YACC := $(shell which bison 2> /dev/null)ifeq ($(strip $(LEX)),)DOYACC := nendififeq ($(strip $(YACC)),)DOYACC := nendififneq ($(findstring $(MAKEFLAGS),s),s)ifndef VQUIET_CC = @echo ' ' CC $@;QUIET_CXX = @echo ' ' CXX $@;QUIET_PCH = @echo ' ' PCH $@;QUIET_LINK = @echo ' ' LINK $@;QUIET_COPY = @echo ' ' COPY $@;QUIET_DEPEND = @echo ' ' DEPEND $@;export Vendifendif
MAKEFILE ?= makefile.unix#MAKEFILE ?= makefile.dos#MAKEFILE ?= makefile.osx#MAKEFILE ?= makefile.mgw#MAKEFILE ?= makefile_tiles.mgw#MAKEFILE ?= makefile_tiles.unix
ifneq ($(TILES),n)TILEDEFS = dngn main player gui unrandTILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)TILEDEFTXTS = $(TILEDEFPRES:%=%.txt)TILEDEFOBJS = $(TILEDEFPRES:%=%.o)TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)TILEDEFHDRS = $(TILEDEFPRES:%=%.h)
all:+$(MAKE) -f $(MAKEFILE)
GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS)SRC_PKG_BASE := stone_soupSRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | cut -d'"' -f2)PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-srcSRC_PKG_TAR := $(PKG_SRC_DIR).tbz2SRC_PKG_ZIP := $(PKG_SRC_DIR).zip
noopt:+$(MAKE) -f $(MAKEFILE)
PKG_TIDY_LIST := $(UTIL)*.o $(LEVCOMP) *.o \$(UTIL)*.tab.cc $(UTIL)*.tab.h $(UTIL)*.lex.cc *.ixxPKG_EXCLUDES := $(PWD)/misc/src-pkg-excludes.lst##########################################################################all: $(GAME)test: $(GAME)$(PWD)/$(GAME) -test########################################################################### DependenciesDEPENDENCY_MKF := makefile.dep
install:+$(MAKE) -f $(MAKEFILE) install
ifeq ($(shell which fastdep 2> /dev/null),)depend: $(OBJECTS:.o=.cc)rm -f $(DEPENDENCY_MKF).tmp@for i in $^; do \echo ' ' DEP $$i; \$(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF).tmp 2>/dev/null; \donemv -f $(DEPENDENCY_MKF).tmp $(DEPENDENCY_MKF)elsedepend: $(DEPENDENCY_MKF)%.dep: $(OBJECTS:.o=.cc)$(QUIET_DEPEND)fastdep $(INCLUDES) *.h $(OBJECTS:.o=.cc) > $@endif-include $(DEPENDENCY_MKF)########################################################################### The level compiler#ifeq ($(strip $(DOYACC)),y)prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc$(QUIET_COPY)$(COPY) $^ prebuilt/$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp+@$(MAKE) -C $(UTIL) levcomp.tab.cc$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp+@$(MAKE) -C $(UTIL) levcomp.lex.ccelse# Pull the level-compiler stuff up from prebuilt/$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc$(QUIET_COPY)$(COPY) prebuilt/*.h $(UTIL)$(QUIET_COPY)$(COPY) $< $@$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc$(QUIET_COPY)$(COPY) $< $@endif##################################################################################################################################################### The actual build targets#install: $(GAME)ifeq ($(DATADIR),)$(error DATADIR not set! Set DATADIR and run make clean install again)endif[ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)$(COPY) $(GAME) $(INSTALLDIR)chown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)chmod $(MCHMOD) $(INSTALLDIR)/$(GAME)mkdir -p $(DATADIR)/datmkdir -p $(DATADIR)/dat/luamkdir -p $(DATADIR)/dat/cluamkdir -p $(DATADIR)/dat/descriptmkdir -p $(DATADIR)/dat/database$(COPY) dat/*.des $(DATADIR)/dat$(COPY) dat/lua/*.lua $(DATADIR)/dat/lua$(COPY) dat/clua/*.lua $(DATADIR)/dat/clua$(COPY) dat/descript/*.txt $(DATADIR)/dat/descript$(COPY) dat/database/*.txt $(DATADIR)/dat/databasemkdir -p $(DATADIR)/settings$(COPY) ../settings/* $(DATADIR)/settings/mkdir -p $(DATADIR)/docs$(COPY) ../docs/*.txt $(DATADIR)/docschown -R $(INSTALL_UGRP) $(DATADIR)ifneq ($(SAVEDIR),)mkdir -p $(SAVEDIR)chown $(INSTALL_UGRP) $(SAVEDIR)chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)endif
+$(MAKE) -f $(MAKEFILE) clean
+$(MAKE) -C $(UTIL) clean$(DELETE) *.o$(DELETE) *.ixxclean-lua:+$(MAKE) -C $(LUASRC) cleanclean-sql:+$(MAKE) -C $(SQLSRC) cleandistclean: clean clean-lua clean-sql clean-rltiles$(DELETE) bones.*$(DELETE) morgue.txt$(DELETE) scores$(DELETE) $(GAME)$(DELETE) *.sav$(DELETE) core$(DELETE) *.0*$(DELETE) *.lab$(DELETE) $(DEPENDENCY_MKF)$(GAME): $(GAME_DEPENDS)$(QUIET_LINK)$(CXX) $(LDFLAGS) $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB).PHONY : debug profile wizarddebug: $(GAME)profile: $(GAME)wizard: $(GAME)# [ds] Note we don't use the standard CFLAGS here; that's intentional, most# flex/bison combos I've tried don't produce code that passes the warnings# test.$(UTIL)%.o: $(UTIL)%.cc$(QUIET_CXX)$(CXX) $(YCFLAGS) -o $@ -c $<ifneq ($(PCH),n)%.h.gch: %.h$(QUIET_PCH)$(CXX) $(CFLAGS) -c $< -o $@CC_DEP := AppHdr.h.gchendif$(OBJECTS:%.o=%.cc): $(CC_DEP) $(TILEDEFHDRS)%.o: %.m$(QUIET_CXX)$(CC) $(CFLAGS) -c $< -o $@%.o: %.cc$(QUIET_CXX)$(CXX) $(CFLAGS) -c $< -o $@############################################################################## Build PCRE$(FPCRELIBA):+@$(MAKE) -C $(PCRESRC)
# WIZARD mode currently includes asserts, bounds checking, item checking and# monster checking.wizard:+$(MAKE) -f $(MAKEFILE) debug EXTRA_FLAGS='-g -DWIZARD -DDEBUG -DDEBUG_ITEM_SCAN -DDEBUG_MONS_SCAN'
############################################################################## Build SQLite
# [dshaligram] The individual makefile need not necessarily support# package-source; only makefile.unix does at the moment.package-source:+$(MAKE) -f $(MAKEFILE) package-source
############################################################################## Build unrandart dataart-data.h: art-data.txt util/art-data.pl art-func.hutil/art-data.pl############################################################################## RLTiles#
# DO NOT DELETE THIS LINE -- $(MAKE) depend depends on it.
$(TILEDEFSRCS): rltile-build$(TILEDEFHDRS): rltile-build$(ORIGTILEFILES): rltile-builddat/tiles/%.png: $(RLTILES)/%.png$(QUIET_COPY)$(COPY) $< $@clean-rltiles:+$(MAKE) -C $(RLTILES) -f makefile.unix distclean############################################################################## Packaging a source tarball for release## To package, you *must* have lex and yacc to generate the intermediates.ifeq ($(DOYACC),y)package-source: distclean prebuildyacc pkgtidy depend removeold vlink \pkgtarbz2 pkgzippkgtidy:$(DELETE) $(PKG_TIDY_LIST)removeold:if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fiif [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi
pkgtarbz2:cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \-X $(PKG_EXCLUDES) $(PKG_SRC_DIR)pkgzip:cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \-x@$(PKG_EXCLUDES)endif