Make it a function
[xonotic/gmqcc.git] / include.mk
1 # default directories and paths
2 DESTDIR :=
3 PREFIX  := /usr/local
4 BINDIR  := $(PREFIX)/bin
5 DATADIR := $(PREFIX)/share
6 MANDIR  := $(DATADIR)/man
7
8 # default flags
9 CFLAGS  += -Wall -Wextra -Werror -Wstrict-aliasing -Wno-attributes -O2
10
11 # compiler
12 CC      ?= clang
13
14 # linker flags and optional additional libraries if required
15 LDFLAGS +=
16 LIBS    += -lm
17
18 #common objects
19 COMMON   = ansi.o util.o hash.o stat.o fs.o opts.o conout.o
20
21 #optional flags
22 OPTIONAL_CFLAGS  :=
23 OPTIONAL_LDFLAGS :=
24
25 #objects
26 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
27 OBJ_P = $(COMMON) pak.o
28 OBJ_T = $(COMMON) test.o
29 OBJ_X = $(COMMON) exec.o
30
31 #gource flags
32 GOURCEFLAGS =                 \
33     --date-format "%d %B, %Y" \
34     --seconds-per-day 0.01    \
35     --auto-skip-seconds 1     \
36     --title "GMQCC"           \
37     --key                     \
38     --camera-mode overview    \
39     --highlight-all-users     \
40     --file-idle-time 0        \
41     --hide progress,mouse     \
42     --stop-at-end             \
43     --max-files 99999999999   \
44     --max-file-lag 0.000001   \
45     --bloom-multiplier 1.3    \
46     --logo doc/html/gmqcc.png \
47     -1280x720
48
49 #ffmpeg flags for gource
50 FFMPEGFLAGS=                  \
51     -y                        \
52     -r 60                     \
53     -f image2pipe             \
54     -vcodec ppm               \
55     -i -                      \
56     -vcodec libx264           \
57     -preset ultrafast         \
58     -crf 1                    \
59     -threads 0                \
60     -bf 0
61
62 #splint flags
63 SPLINTFLAGS =                 \
64     -preproc                  \
65     -redef                    \
66     -noeffect                 \
67     -nullderef                \
68     -usedef                   \
69     -type                     \
70     -mustfreeonly             \
71     -nullstate                \
72     -varuse                   \
73     -mustfreefresh            \
74     -compdestroy              \
75     -compmempass              \
76     -nullpass                 \
77     -onlytrans                \
78     -predboolint              \
79     -boolops                  \
80     -incondefs                \
81     -macroredef               \
82     -retvalint                \
83     -nullret                  \
84     -predboolothers           \
85     -globstate                \
86     -dependenttrans           \
87     -branchstate              \
88     -compdef                  \
89     -temptrans                \
90     -usereleased              \
91     -warnposix                \
92     +charindex                \
93     -kepttrans                \
94     -unqualifiedtrans         \
95     +matchanyintegral         \
96     +voidabstract             \
97     -nullassign               \
98     -unrecog                  \
99     -casebreak                \
100     -retvalbool               \
101     -retvalother              \
102     -mayaliasunique           \
103     -realcompare              \
104     -observertrans            \
105     -abstract                 \
106     -statictrans              \
107     -castfcnptr               \
108     -shiftimplementation      \
109     -shiftnegative            \
110     -boolcompare              \
111     -infloops                 \
112     -sysunrecog
113
114 #always the right rule
115 default: all
116
117 #uninstall rule
118 uninstall:
119         rm -f $(DESTDIR)$(BINDIR)/gmqcc
120         rm -f $(DESTDIR)$(BINDIR)/qcvm
121         rm -f $(DESTDIR)$(BINDIR)/gmqpak
122         rm -f $(DESTDIR)$(MANDIR)/man1/gmqcc.1
123         rm -f $(DESTDIR)$(MANDIR)/man1/qcvm.1
124         rm -f $(DESTDIR)$(MANDIR)/man1/gmqpak.1
125
126 #style rule
127 STYLE_MATCH = \( -name '*.[ch]' -or -name '*.def' -or -name '*.qc' \)
128
129 # splint cannot parse the MSVC source
130 SPLINT_MATCH = \( -name '*.[ch]' -and ! -name 'msvc.c' -and ! -path './doc/*' \)
131
132 style:
133         find . -type f $(STYLE_MATCH) -exec sed -i 's/ *$$//' '{}' ';'
134         find . -type f $(STYLE_MATCH) -exec sed -i -e '$$a\' '{}' ';'
135         find . -type f $(STYLE_MATCH) -exec sed -i 's/\t/    /g' '{}' ';'
136
137 splint:
138         @splint $(SPLINTFLAGS) `find . -type f $(SPLINT_MATCH)`
139
140 gource:
141         @gource $(GOURCEFLAGS)
142
143 gource-record:
144         @gource $(GOURCEFLAGS) -o - | ffmpeg $(FFMPEGFLAGS) gource.mp4