X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2FMakefile;h=903d8537e695bf35b33fb78889c814a38536cf7b;hp=dac7cb2bdd6d164447016e9fff0de3654ab82295;hb=707ef9331a9405bbf266ab5aa3a87a175cad8d8f;hpb=3fbc261b483be2c73f5514c3a938696b6679efc3 diff --git a/qcsrc/Makefile b/qcsrc/Makefile index dac7cb2bdd..903d8537e6 100644 --- a/qcsrc/Makefile +++ b/qcsrc/Makefile @@ -1,21 +1,40 @@ -SCM := $(shell if [ -d .svn ]; then echo svn; elif [ -d ../.git ]; then echo git; fi) -PERL ?= perl -QCCFLAGS_WATERMARK ?= -DWATERMARK='"$(shell git describe)"' +CPP := cc -xc -E QCC ?= gmqcc -QCCDEFS_EXTRA ?= -DGMQCC + +PROGS_OUT ?= $(CURDIR)/.. +WORKDIR ?= ../.tmp + +QCCFLAGS_WATERMARK ?= $(shell git describe --tags --dirty='~') +VER = $(subst *,\*,$(QCCFLAGS_WATERMARK)) NDEBUG ?= 1 -BUILD_MOD ?= 0 +XONOTIC ?= 1 +BUILD_MOD ?= -QCCVERSIONFILE := qccversion.$(shell (cd server && $(QCC) --version) > qccversion.txt && git hash-object qccversion.txt) +ifndef ZIP + ifneq ($(shell which zip),) + ZIP := zip -9 + endif + ifneq ($(shell which 7z),) + ZIP := 7z a -tzip -mx=9 + endif + ifneq ($(shell which 7za),) + ZIP := 7za a -tzip -mx=9 + endif + ifndef ZIP + $(warning "No zip in ($(PATH))") + ZIP := : zip_not_found + endif +endif # We eventually need to get rid of these QCCFLAGS_WTFS ?= \ -Wno-field-redeclared QCCDEFS ?= \ - $(QCCFLAGS_WATERMARK) \ + -DXONOTIC=$(XONOTIC) \ + -DWATERMARK="$(QCCFLAGS_WATERMARK)" \ -DNDEBUG=$(NDEBUG) \ - -DBUILD_MOD=$(BUILD_MOD) \ + $(if $(BUILD_MOD), -DBUILD_MOD="$(BUILD_MOD)" -I$(BUILD_MOD), ) \ $(QCCDEFS_EXTRA) # -Ooverlap-locals is required @@ -29,48 +48,69 @@ QCCFLAGS ?= \ -frelaxed-switch -freturn-assignments \ $(QCCFLAGS_EXTRA) -# xonotic build system overrides this by command line argument to turn off the update-cvarcount step -XON_BUILDSYSTEM = + .PHONY: all -all: qc +all: qc pk3 -.PHONY: qc -qc: ../menu.dat ../progs.dat ../csprogs.dat +$(WORKDIR): + @mkdir -p $@ .PHONY: clean -clean: - rm -f ../progs.dat ../menu.dat ../csprogs.dat - rm -f tmp/*.qc tmp/*.d tmp/*.txt - -$(QCCVERSIONFILE): - $(RM) qccversion.* - echo This file intentionally left blank. > $@ - -../csprogs.dat: client/progs.inc $(QCCVERSIONFILE) - $(CC) -xc $(QCCDEFS) -DCSQC -E -MMD -MP -MT $@ -Wall -Wundef -Werror -CC -o tmp/client.qc $< - @$(CC) -xc $(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 - @echo make[1]: Entering directory \`$(PWD)/client\' - cd client && $(QCC) $(QCCFLAGS) -o ../$@ ../tmp/client.qc --include tmp/client.d - -../progs.dat: server/progs.inc $(QCCVERSIONFILE) - $(CC) -xc $(QCCDEFS) -DSVQC -E -MMD -MP -MT $@ -Wall -Wundef -Werror -CC -o tmp/server.qc $< - @$(CC) -xc $(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 - @echo make[1]: Entering directory \`$(PWD)/server\' - cd server && $(QCC) $(QCCFLAGS) -o ../$@ ../tmp/server.qc --include tmp/server.d - -../menu.dat: menu/progs.inc $(QCCVERSIONFILE) - $(CC) -xc $(QCCDEFS) -DMENUQC -E -MMD -MP -MT $@ -Wall -Wundef -Werror -CC -o tmp/menu.qc $< - @$(CC) -xc $(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 - @echo make[1]: Entering directory \`$(PWD)/menu\' - cd menu && $(QCC) $(QCCFLAGS) -o ../$@ ../tmp/menu.qc --include tmp/menu.d - -.PHONY: testcase -testcase: - cd testcase && $(QCC) $(QCCDEFS) $(QCCFLAGS) -DTESTCASE="$$TESTCASE" +clean: | $(WORKDIR) + $(RM) $(PROGS_OUT)/csprogs.dat + $(RM) $(PROGS_OUT)/menu.dat + $(RM) $(PROGS_OUT)/progs.dat + $(RM) $(WORKDIR)/*.d + $(RM) $(WORKDIR)/*.qc + $(RM) $(WORKDIR)/*.txt + +.PHONY: qc +qc: $(PROGS_OUT)/csprogs.dat $(PROGS_OUT)/menu.dat $(PROGS_OUT)/progs.dat + +.PHONY: pk3 +pk3: csprogs-$(VER).pk3 + + + + + +%-$(VER).pk3: $(PROGS_OUT)/%.dat + $(eval PROG=$*) + $(eval PK3=$(PROG)-$(VER).pk3) + $(eval TXT=$(PROG)-$(VER).txt) + $(eval DAT=$(PROG)-$(VER).dat) + $(eval LNO=$(PROG)-$(VER).lno) + @ echo "http://xonotic.org" > $(TXT) + @ ln -f $(PROGS_OUT)/$(PROG).dat $(DAT) + @ ln -f $(PROGS_OUT)/$(PROG).lno $(LNO) + @ $(RM) *.pk3 + $(ZIP) $(PK3) $(TXT) $(DAT) $(LNO) + @ $(RM) $(TXT) $(DAT) $(LNO) + +QCCVERSION := $(shell cd lib && $(QCC) --version) +QCCVERSIONFILE := $(WORKDIR)/qccversion.$(shell echo ${QCCVERSION} | git hash-object --stdin) +$(QCCVERSIONFILE): | $(WORKDIR) + @ $(RM) $(WORKDIR)/qccversion.* + @ echo $(QCCVERSION) > $@ + +export WORKDIR +export CPP +export QCC +export QCCDEFS +export QCCFLAGS + +$(PROGS_OUT)/csprogs.dat: client/progs.inc $(QCCVERSIONFILE) | $(WORKDIR) + @ echo make[1]: Entering directory \`$(CURDIR)/client\' + @ ./tools/qcc.sh client $@ $< +-include $(WORKDIR)/client.d + +$(PROGS_OUT)/progs.dat: server/progs.inc $(QCCVERSIONFILE) | $(WORKDIR) + @ echo make[1]: Entering directory \`$(CURDIR)/server\' + @ ./tools/qcc.sh server $@ $< +-include $(WORKDIR)/server.d + +$(PROGS_OUT)/menu.dat: menu/progs.inc $(QCCVERSIONFILE) | $(WORKDIR) + @ echo make[1]: Entering directory \`$(CURDIR)/menu\' + @ ./tools/qcc.sh menu $@ $< +-include $(WORKDIR)/menu.d