SCM := $(shell if [ -d .svn ]; then echo svn; elif [ -d ../.git ]; then echo git; fi)
PERL ?= perl
-QCCFLAGS_WATERMARK ?= -DWATERMARK='"$(shell git describe)"'
+QCCFLAGS_WATERMARK ?= $(shell git describe)
+CPP := cc -xc -E
QCC ?= gmqcc
-QCCDEFS_EXTRA ?= -DGMQCC
NDEBUG ?= 1
+PROGS_OUT ?= $(CURDIR)/..
BUILD_MOD ?= 0
QCCVERSIONFILE := qccversion.$(shell (cd server && $(QCC) --version) > qccversion.txt && git hash-object qccversion.txt)
-Wno-field-redeclared
QCCDEFS ?= \
- $(QCCFLAGS_WATERMARK) \
+ -DWATERMARK="$(QCCFLAGS_WATERMARK)" \
-DNDEBUG=$(NDEBUG) \
-DBUILD_MOD=$(BUILD_MOD) \
$(QCCDEFS_EXTRA)
all: qc
.PHONY: qc
-qc: ../menu.dat ../progs.dat ../csprogs.dat
+qc: $(PROGS_OUT)/menu.dat $(PROGS_OUT)/progs.dat $(PROGS_OUT)/csprogs.dat
.PHONY: clean
clean:
- rm -f ../progs.dat ../menu.dat ../csprogs.dat
- rm -f tmp/*.qc tmp/*.d tmp/*.txt
+ rm -f $(PROGS_OUT)/{csprogs,progs,menu}.dat
+ rm -f ../.tmp/*.{qc,d,txt}
$(QCCVERSIONFILE):
$(RM) qccversion.*
echo This file intentionally left blank. > $@
-../csprogs.dat: client/progs.inc $(QCCVERSIONFILE)
- $(CC) -xc -I. $(QCCDEFS) -DCSQC -E -MMD -MP -MT $@ -Wall -Wundef -Werror -CC -o tmp/client.qc $<
- @$(CC) -xc -I. $(QCCDEFS) -DCSQC -E -dM 1>tmp/client_macros.txt -H 2>tmp/client_includes.txt $<
- @sed -i 's/^# \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\2)\n#pragma line(\1)/g' tmp/client.qc
+export QCC
+export CPP
+export QCCDEFS
+export QCCFLAGS
+
+$(PROGS_OUT)/csprogs.dat: client/progs.inc $(QCCVERSIONFILE)
@echo make[1]: Entering directory \`$(PWD)/client\'
- cd client && $(QCC) $(QCCFLAGS) -o ../$@ ../tmp/client.qc
--include tmp/client.d
+ sh ./qcc.sh client $@ $<
+-include ../.tmp/client.d
-../progs.dat: server/progs.inc $(QCCVERSIONFILE)
- $(CC) -xc -I. $(QCCDEFS) -DSVQC -E -MMD -MP -MT $@ -Wall -Wundef -Werror -CC -o tmp/server.qc $<
- @$(CC) -xc -I. $(QCCDEFS) -DSVQC -E -dM 1>tmp/server_macros.txt -H 2>tmp/server_includes.txt $<
- @sed -i 's/^# \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\2)\n#pragma line(\1)/g' tmp/server.qc
+$(PROGS_OUT)/progs.dat: server/progs.inc $(QCCVERSIONFILE)
@echo make[1]: Entering directory \`$(PWD)/server\'
- cd server && $(QCC) $(QCCFLAGS) -o ../$@ ../tmp/server.qc
--include tmp/server.d
+ sh ./qcc.sh server $@ $<
+-include ../.tmp/server.d
-../menu.dat: menu/progs.inc $(QCCVERSIONFILE)
- $(CC) -xc -I. $(QCCDEFS) -DMENUQC -E -MMD -MP -MT $@ -Wall -Wundef -Werror -CC -o tmp/menu.qc $<
- @$(CC) -xc -I. $(QCCDEFS) -DMENUQC -E -dM 1>tmp/menu_macros.txt -H 2>tmp/menu_includes.txt $<
- @sed -i 's/^# \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\2)\n#pragma line(\1)/g' tmp/menu.qc
+$(PROGS_OUT)/menu.dat: menu/progs.inc $(QCCVERSIONFILE)
@echo make[1]: Entering directory \`$(PWD)/menu\'
- cd menu && $(QCC) $(QCCFLAGS) -o ../$@ ../tmp/menu.qc
--include tmp/menu.d
+ sh ./qcc.sh menu $@ $<
+-include ../.tmp/menu.d
.PHONY: testcase
testcase: