# -*- Makefile -*- for Dungeon Crawl (dos) # this file contains a list of the libraries. # it will make a variable called OBJECTS that contains all the libraries include makefile.obj # need .exe so make will find the right file APPNAME = crawl.exe CXX = gxx DELETE = del COPY = copy OS_TYPE = DOS # If you don't have flex or bison, set DOYACC to N or empty. DOYACC := n LEX := flex YACC := bison -y INSTALLDIR ?= package ifeq ($(LUASRC),) LUASRC := contrib\lua\src endif LUALIB = lua LUALIBA = lib$(LUALIB).a SQLSRC := contrib\sqlite SQLLIB := sql3 SQLLIBA := lib$(SQLLIB).a FSQLLIBA := $(SQLSRC)\$(SQLLIBA) PCRESRC := contrib\pcre PCRELIB := pcre PCRELIBA := lib$(PCRELIB).a LIB = -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -lpcre INCLUDES := -Iutil -I. -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC) WORKDIR := $(shell cd) CFWARN := -Wall -Wwrite-strings -Wshadow -pedantic CFOTHERS := -D$(OS_TYPE) $(EXTRA_FLAGS) -fsigned-char -fstrict-aliasing \ -DCLUA_BINDINGS CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) YCFLAGS := $(INCLUDES) $(CFOTHERS) OBJECTS += libdos.o crash-d.o LDFLAGS = UTIL = util/ # DOS brain damage. What to do, what to do. YTABC := levcom~1.c YTABH := levcom~1.h ifeq ($(LEX),) DOYACC := endif ifeq ($(YACC),) DOYACC := endif OBJECTS := $(UTIL)levtab.o $(UTIL)levlex.o $(OBJECTS) GAME_DEPENDS := $(LUASRC)\$(LUALIBA) $(FSQLLIBA) $(PCRESRC)\$(PCRELIBA) $(OBJECTS) ########################################################################## all: $(APPNAME) DEPENDENCY_MKF := makefile.dep -include $(DEPENDENCY_MKF) ########################################################################## # The level compiler # # [dshaligram] A million plagues on djgpp make! It doesn't want to use a # generic rule for $(UTIL)%.cc; it always uses the .cc.o: rule instead. LINC := # [ds] If we're using the prebuilt include, we can't copy it around because # djgpp copy mangles the name irreparably. ifneq ($(DOYACC),y) LINC += -I prebuilt endif $(UTIL)levlex.o: $(UTIL)levlex.cc $(subst /,\,$(CXX) $(LINC) $(YCFLAGS) -o $@ -c $<) $(UTIL)levtab.o: $(UTIL)levtab.cc $(subst /,\,$(CXX) $(LINC) $(YCFLAGS) -o $@ -c $<) ifeq ($(DOYACC),y) $(UTIL)levtab.cc: $(UTIL)levcomp.ypp $(subst /,\,cd $(UTIL)) $(YACC) -d -b levcomp levcomp.ypp copy $(YTABC) levtab.cc cd .. # djgpp flex must not have a space between -o and its parameter, or no business # will result. $(UTIL)levlex.cc: $(UTIL)levcomp.lpp $(subst /,\,cd $(UTIL)) $(LEX) -olevlex.cc levcomp.lpp cd .. else $(UTIL)levtab.cc: prebuilt/levcom~2.cc $(subst /,\,$(COPY) $< $@) $(UTIL)levlex.cc: prebuilt/levcom~1.cc $(subst /,\,$(COPY) $< $@) endif ########################################################################## clean: $(DELETE) *.o $(subst /,\,$(DELETE) $(UTIL)*.o) $(subst /,\,$(DELETE) $(UTIL)*.exe) $(subst /,\,$(DELETE) $(UTIL)levcom~1.*) $(subst /,\,$(DELETE) $(UTIL)levtab.*) $(subst /,\,$(DELETE) $(UTIL)levlex.*) clean-lua: cd $(LUASRC) $(MAKE) clean_win cd $(WORKDIR) clean-sql: cd $(SQLSRC) $(MAKE) "RM_F=cmd /c del /f" clean cd $(WORKDIR) clean-pcre: cd $(PCRESRC) $(MAKE) clean cd $(WORKDIR) distclean: clean-lua clean-sql clean-pcre $(DELETE) *.o $(DELETE) bones.* $(DELETE) morgue.txt $(DELETE) scores $(DELETE) $(APPNAME) $(DELETE) *.sav $(DELETE) core $(DELETE) *.0* $(DELETE) *.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) .cc.o: ${CXX} ${CFLAGS} -c $< # I don't have touch for DOS, but if you do, you can put this back. # #.h.cc: # touch $@ ############################################################################# # Build Lua $(LUASRC)\$(LUALIBA): @echo Building Lua... @cd $(LUASRC) @$(MAKE) crawl_dos @cd $(WORKDIR) ############################################################################# # Build SQLite $(FSQLLIBA): @echo Building SQLite cd $(SQLSRC) $(MAKE) LIBSQL=$(SQLLIBA) cd $(WORKDIR) ############################################################################# # Build PCRE $(PCRESRC)\$(PCRELIBA): @echo Building PCRE... @cd $(PCRESRC) @$(MAKE) CXX=$(CXX) @cd $(WORKDIR)