# default directories and paths
DESTDIR :=
-OPTIONAL:=
PREFIX := /usr/local
BINDIR := $(PREFIX)/bin
DATADIR := $(PREFIX)/share
MANDIR := $(DATADIR)/man
+# default flags
+CFLAGS += -Wall -Wextra -Werror -Wstrict-aliasing -Wno-attributes -O2
+
# compiler
CC ?= clang
LDFLAGS +=
LIBS += -lm
+#common objects
+COMMON = ansi.o util.o hash.o stat.o fs.o opts.o conout.o
+
+#optional flags
+OPTIONAL_CFLAGS :=
+OPTIONAL_LDFLAGS :=
+
#objects
-OBJ_C = main.o lexer.o parser.o fs.o stat.o util.o code.o ast.o ir.o conout.o ftepp.o opts.o utf8.o correct.o fold.o intrin.o
-OBJ_P = util.o fs.o conout.o opts.o pak.o stat.o
-OBJ_T = test.o util.o opts.o conout.o fs.o stat.o
-OBJ_X = exec-standalone.o util.o opts.o conout.o fs.o stat.o
+OBJ_C = $(COMMON) main.o lexer.o parser.o code.o ast.o ir.o ftepp.o utf8.o correct.o fold.o intrin.o
+OBJ_P = $(COMMON) pak.o
+OBJ_T = $(COMMON) test.o
+OBJ_X = $(COMMON) exec.o
#gource flags
GOURCEFLAGS = \
#splint flags
SPLINTFLAGS = \
+ -preproc \
-redef \
-noeffect \
-nullderef \
-observertrans \
-abstract \
-statictrans \
- -castfcnptr
-
+ -castfcnptr \
+ -shiftimplementation \
+ -shiftnegative \
+ -boolcompare \
+ -infloops \
+ -sysunrecog
+
#always the right rule
default: all
rm -f $(DESTDIR)$(BINDIR)/gmqcc
rm -f $(DESTDIR)$(BINDIR)/qcvm
rm -f $(DESTDIR)$(BINDIR)/gmqpak
- rm -f $(DESTDIR)$(MANDIR)/man1/doc/gmqcc.1
- rm -f $(DESTDIR)$(MANDIR)/man1/doc/qcvm.1
- rm -f $(DESTDIR)$(MANDIR)/man1/doc/gmqpak.1
+ rm -f $(DESTDIR)$(MANDIR)/man1/gmqcc.1
+ rm -f $(DESTDIR)$(MANDIR)/man1/qcvm.1
+ rm -f $(DESTDIR)$(MANDIR)/man1/gmqpak.1
+
+#style rule
+STYLE_MATCH = \( -name '*.[ch]' -or -name '*.def' -or -name '*.qc' \)
+
+# splint cannot parse the MSVC source
+SPLINT_MATCH = \( -name '*.[ch]' -and ! -name 'msvc.c' -and ! -path './doc/*' \)
+
+style:
+ find . -type f $(STYLE_MATCH) -exec sed -i 's/ *$$//' '{}' ';'
+ find . -type f $(STYLE_MATCH) -exec sed -i -e '$$a\' '{}' ';'
+ find . -type f $(STYLE_MATCH) -exec sed -i 's/\t/ /g' '{}' ';'
+
+splint:
+ @splint $(SPLINTFLAGS) `find . -type f $(SPLINT_MATCH)`
+
+gource:
+ @gource $(GOURCEFLAGS)
+
+gource-record:
+ @gource $(GOURCEFLAGS) -o - | ffmpeg $(FFMPEGFLAGS) gource.mp4