# -*- Makefile -*- for Dungeon Crawl (unix) # # Modified for Crawl Reference by $Author: dshaligram $ on $Date: 2007-06-24T16:27:58.475101Z $ # GAME = crawl # this file contains a list of the libraries. # it will make a variable called OBJECTS that contains all the libraries include makefile.obj OBJECTS += libgui.o tile1.o tile2.o libx11.o guic.o guic-x11.o CXX = g++ DELETE = rm -f COPY = cp OS_TYPE = UNIX EXTRA_INCLUDES = -DUSE_X11 -DUSE_TILE ifeq ($(strip $(OSX)),y) PNG_INCLUDE := -I/sw/include PNG_LIB := -L/sw/lib else PNG_INCLUDE := PNG_LIB := endif # 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:games INSTALLDIR ?= /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/ LEX := flex YACC := bison -y LUASRC := util/lua/src LUALIB = lua LUALIBA = l$(LUALIB).a DBH_FILE := /usr/include/db.h NDBM_FILE := /usr/include/ndbm.h HAVE_DBH := $(shell [ -f $(DBH_FILE) ] && echo y) HAVE_NDBM := $(shell [ -f $(NDBM_FILE) -a "`uname`" = "Darwin" ] && echo y) ifeq ($(strip $(HAVE_DBH)),y) ifneq ($(shell grep dbm_open $(DBH_FILE)),) SELDBM := -DDB_DBH LIBDBM := -ldb endif endif ifeq ($(strip $(HAVE_NDBM)),y) SELDBM ?= -DDB_NDBM ifeq ($(SELDBM),-DDB_NDBM) LIBDBM := -ldbm endif endif SQLSRC := util/sqlite SQLLIB := sqlite3 SQLLIBA := lib$(SQLLIB).a FSQLLIBA := $(SQLSRC)/$(SQLLIBA) ifeq ($(strip $(LIBDBM)),) LIBDBM := -L$(SQLSRC) -lsqlite3 EXTRA_INCLUDES += -I$(SQLSRC) EXTRA_DEPENDS += $(FSQLLIBA) endif LIB = -L$(LUASRC) -l$(LUALIB) $(LIBDBM) -L/usr/X11R6/lib -lX11 -lpng $(PNG_LIB) INCLUDES := $(INCLUDES) -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES) $(PNG_INCLUDE) CFWARN := -Wall -Wwrite-strings -Wshadow -pedantic CFOTHERS := -fsigned-char -D$(OS_TYPE) $(EXTRA_FLAGS) -DCLUA_BINDINGS ifneq ($(HURRY),y) ifneq ($(DEBUG_CRAWL),y) CFWARN += -Wuninitialized CFOTHERS += -O2 endif endif ifneq ($(strip $(SAVEDIR)),) CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"' endif ifneq ($(strip $(DATADIR)),) CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"' endif CFOTHERS += $(SELDBM) CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) YCFLAGS := $(INCLUDES) $(CFOTHERS) UTIL = util/ YTABC := levcomp.tab.c YTABH := levcomp.tab.h RLTILES = rltiles/ TILEHEADERS = \ tiledef.h \ tiledef-p.h \ tiledef-w2d.h \ tilecount-w2d.h \ tilep-cmt.h TILEFILES = \ tile.png \ player.png \ wall2d.png \ title.png DESTTILEFILES = $(TILEFILES:%=dat/tiles/%) EXTRA_DEPENDS += $(TILEHEADERS) $(DESTTILEFILES) OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS) ifeq ($(strip $(LEX)),) DOYACC := endif ifeq ($(strip $(YACC)),) DOYACC := endif GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS) SRC_PKG_BASE := stone_soup SRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | \ egrep -o '[0-9]\.[0-9](\.[0-9])?') PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-src SRC_PKG_TAR := $(PKG_SRC_DIR).tbz2 SRC_PKG_ZIP := $(PKG_SRC_DIR).zip PKG_TIDY_LIST := $(UTIL)*.o $(LEVCOMP) *.o \ $(UTIL)*.tab.cc $(UTIL)*.tab.h $(UTIL)*.lex.cc *.ixx PKG_EXCLUDES := $(PWD)/misc/src-pkg-excludes.lst ########################################################################## all: $(GAME) ########################################################################## # Dependencies DEPENDENCY_MKF := makefile.dep depend: $(OBJECTS:.o=.cc) rm -f $(DEPENDENCY_MKF) @for i in $^; do \ echo "Updating dependencies for $$i"; \ $(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF) 2>/dev/null; \ done -include $(DEPENDENCY_MKF) ########################################################################## # The level compiler # ifeq ($(DOYACC),y) prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc cp $^ prebuilt/ $(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp cd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \ && mv $(YTABC) levcomp.tab.cc || false $(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp else # Pull the level-compiler stuff up from prebuilt/ $(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc cp prebuilt/*.h $(UTIL) cp $< $@ $(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc cp $< $@ endif ########################################################################## # RLTiles # ORIGTILEHEADERS = $(TILEHEADERS:%=$(RLTILES)%) ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)%) $(ORIGTILEHEADERS): makerltiles makerltiles: cd $(RLTILES) && make -f makefile.unix all CFLAGS="$(PNG_INCLUDE)" LDFLAGS="$(PNG_LIB)" && cd .. $(TILEHEADERS): $(ORIGTILEHEADERS) cp $(RLTILES)$@ . $(ORIGTILEFILES): makerltiles dat/tiles/%.png: rltiles/%.png mkdir -p dat/tiles $(COPY) $< $@ clean-rltiles: cd $(RLTILES) && make -f makefile.unix distclean && cd .. $(DELETE) $(TILEHEADERS) ########################################################################## ########################################################################## # 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)/dat mkdir -p $(DATADIR)/dat/lua mkdir -p $(DATADIR)/dat/clua mkdir -p $(DATADIR)/dat/descript mkdir -p $(DATADIR)/dat/database cp dat/*.des $(DATADIR)/dat cp dat/lua/*.lua $(DATADIR)/dat/lua cp dat/clua/*.lua $(DATADIR)/dat/clua cp dat/descript/*.txt $(DATADIR)/dat/descript cp dat/database/*.txt $(DATADIR)/dat/database mkdir -p $(DATADIR)/settings cp ../settings/* $(DATADIR)/settings/ mkdir -p $(DATADIR)/docs cp ../docs/*.txt $(DATADIR)/docs mkdir -p $(DATADIR)/dat/tiles cp dat/tiles/*.png $(DATADIR)/dat/tiles chown -R $(INSTALL_UGRP) $(DATADIR) ifneq ($(SAVEDIR),) mkdir -p $(SAVEDIR) chown $(INSTALL_UGRP) $(SAVEDIR) chmod $(MCHMOD_SAVEDIR) $(SAVEDIR) endif clean: $(DELETE) *.o $(DELETE) $(UTIL)*.o $(DELETE) $(LEVCOMP) $(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc $(DELETE) *.ixx clean-lua: cd $(LUASRC) && $(MAKE) clean clean-sql: cd $(SQLSRC) && $(MAKE) clean 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) debug: $(GAME_DEPENDS) ${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... cd $(LUASRC) && $(MAKE) crawl_unix ############################################################################# # Build SQLite $(FSQLLIBA): echo Building SQLite cd $(SQLSRC) && $(MAKE) ############################################################################# # 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 pkgzip pkgtidy: $(DELETE) $(PKG_TIDY_LIST) removeold: if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fi if [ -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