diff options
Diffstat (limited to 'crawl-ref/source/makefile.unix')
-rw-r--r-- | crawl-ref/source/makefile.unix | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/crawl-ref/source/makefile.unix b/crawl-ref/source/makefile.unix new file mode 100644 index 0000000000..c656630acb --- /dev/null +++ b/crawl-ref/source/makefile.unix @@ -0,0 +1,198 @@ +# -*- Makefile -*- for Dungeon Crawl (linux) + +# +# Modified for Crawl Reference by $Author$ on $Date$ +# + +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 += libunix.o + +CXX = g++ +DELETE = rm -f +COPY = cp +OS_TYPE = UNIX + +# Include path for curses or ncurses. +INCLUDES = -I/usr/include/ncurses + +MCHMOD = 2755 +INSTALLDIR := /usr/games + +# If you're installing Crawl for multiple users, you *must* set this to a +# valid path before building Crawl. +DATADIR := + +LIB = -lncurses + +INCLUDES := $(INCLUDES) -Iutil -I. + +CFWARN := -Wall -Wwrite-strings \ + -Wshadow -pedantic + +CFOTHERS := -fsigned-char -g -D$(OS_TYPE) $(EXTRA_FLAGS) + +ifneq ($(DATADIR),) +CFOTHERS += '-DDATA_DIR_PATH="$(DATADIR)"' +endif + +CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) +YCFLAGS := $(INCLUDES) $(CFOTHERS) + + +# If you have lex and yacc, set DOYACC to y (lowercase y). +DOYACC := y + +UTIL = util/ + +LEX := lex +YACC := bison -y + +YTABC := levcomp.tab.c +YTABH := levcomp.tab.h + +OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(UTIL)levcomp.o \ + $(OBJECTS) + +ifeq ($(LEX),) +DOYACC := +endif + +ifeq ($(YACC),) +DOYACC := +endif + +GAME_DEPENDS := $(OBJECTS) +SRC_PKG_BASE := stone_soup +SRC_VERSION := $(shell egrep 'VERSION ".*"' 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) + +########################################################################## +# 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 + +$(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 + +########################################################################## + + +########################################################################## +# The actual build targets +# + +install: $(GAME) + $(COPY) $(GAME) ${INSTALLDIR} + chmod ${MCHMOD} ${INSTALLDIR}/$(GAME) +ifeq ($(DATADIR),) + $(error DATADIR not set! Set DATADIR and run make clean install again) +endif + mkdir -p $(DATADIR)/data + cp dat/*.des $(DATADIR)/data + +clean: + $(DELETE) *.o + $(DELETE) $(UTIL)*.o + $(DELETE) $(LEVCOMP) + $(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc + $(DELETE) *.ixx + +distclean: clean + $(DELETE) bones.* + $(DELETE) morgue.txt + $(DELETE) scores + $(DELETE) $(GAME) + $(DELETE) *.sav + $(DELETE) core + $(DELETE) *.0* + $(DELETE) *.lab + +$(GAME): $(GAME_DEPENDS) + ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB) + chmod ${MCHMOD} $(GAME) + +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 $< + +.h.cc: + touch $@ + +############################################################################# +# 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 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 |