CRLF
[ghsmtp.git] / Makefile
blob7654356c4218a193f4bce3eba2628d2d180f60cf
1 USES := ldns libglog libidn2 opendkim openssl libseccomp
3 CXXFLAGS += -IPEGTL/include -Ijson/include -Icppcodec
5 LDLIBS += \
6 -lboost_filesystem \
7 -lboost_iostreams \
8 -lboost_system \
9 -lcdb \
10 -lfmt \
11 -lgflags \
12 -lmagic \
13 -lopenarc \
14 -lopendmarc \
15 -lpsl \
16 -lresolv \
17 -lspf2 \
18 -lunistring
20 PROGRAMS := dns_tool smtp msg sasl snd socks5
22 arcsign_STEMS := arcsign \
23 message Domain IP IP4 IP6 Mailbox OpenARC OpenDKIM OpenDMARC Pill Reply osutil esc
25 arcverify_STEMS := arcverify \
26 message Domain IP IP4 IP6 Mailbox OpenARC OpenDKIM OpenDMARC Pill Reply osutil esc
28 DNS := DNS DNS-rrs DNS-fcrdns DNS-message
30 dns_tool_STEMS := dns_tool \
31 $(DNS) \
32 Domain \
33 IP \
34 IP4 \
35 IP6 \
36 POSIX \
37 SPF \
38 Sock \
39 SockBuffer \
40 TLS-OpenSSL \
41 esc \
42 osutil
44 msg_STEMS := msg \
45 CDB \
46 $(DNS) \
47 Domain \
48 IP \
49 IP4 \
50 IP6 \
51 Mailbox \
52 OpenDKIM \
53 OpenDMARC \
54 POSIX \
55 SPF \
56 Sock \
57 SockBuffer \
58 TLS-OpenSSL \
59 esc \
60 osutil
62 sasl_STEMS := sasl \
63 Base64 \
64 Domain \
65 IP \
66 IP4 \
67 IP6 \
68 POSIX \
69 Sock \
70 SockBuffer \
71 TLS-OpenSSL \
72 esc \
73 osutil
75 smtp_STEMS := smtp \
76 CDB \
77 $(DNS) \
78 Domain \
79 IP \
80 IP4 \
81 IP6 \
82 Mailbox \
83 MessageStore \
84 OpenARC \
85 OpenDKIM \
86 OpenDMARC \
87 POSIX \
88 Pill \
89 SPF \
90 Send \
91 Session \
92 Sock \
93 SockBuffer \
94 TLS-OpenSSL \
95 esc \
96 osutil
98 snd_STEMS := snd \
99 Base64 \
100 $(DNS) \
101 Domain \
102 IP \
103 IP4 \
104 IP6 \
105 Magic \
106 Mailbox \
107 MessageStore \
108 OpenDKIM \
109 OpenDMARC \
110 POSIX \
111 Pill \
112 SPF \
113 Sock \
114 SockBuffer \
115 TLS-OpenSSL \
116 esc \
117 osutil
119 socks5_STEMS := socks5 \
120 $(DNS) \
121 Domain \
122 IP \
123 IP4 \
124 IP6 \
125 POSIX \
126 Pill \
127 Sock \
128 SockBuffer \
129 TLS-OpenSSL \
130 esc \
131 osutil
133 TESTS := \
134 Base64-test \
135 CDB-test \
136 DNS-test \
137 Domain-test \
138 IP4-test \
139 IP6-test \
140 Magic-test \
141 Mailbox-test \
142 MessageStore-test \
143 Now-test \
144 OpenDKIM-test \
145 POSIX-test \
146 Pill-test \
147 SPF-test \
148 Send-test \
149 Session-test \
150 Sock-test \
151 SockBuffer-test \
152 TLD-test \
153 TLS-OpenSSL-test \
154 default_init_allocator-test \
155 esc-test \
156 iequal-test \
157 iobuffer-test \
158 is_ascii-test \
159 osutil-test
161 Base64-test_STEMS := Base64
162 CDB-test_STEMS := CDB osutil
164 DNS-test_STEMS := $(DNS) DNS-ldns Domain IP IP4 IP6 POSIX Sock SockBuffer TLS-OpenSSL esc osutil
166 Domain-test_STEMS := $(DNS) Domain IP IP4 IP6 POSIX Sock SockBuffer TLS-OpenSSL esc osutil
167 IP4-test_STEMS := $(DNS) Domain IP IP4 IP6 POSIX Sock SockBuffer TLS-OpenSSL esc osutil
168 IP6-test_STEMS := $(DNS) Domain IP IP4 IP6 POSIX Sock SockBuffer TLS-OpenSSL esc osutil
169 Magic-test_STEMS := Magic
170 Mailbox-test_STEMS := Mailbox Domain IP IP4 IP6 osutil
171 MessageStore-test_STEMS := $(DNS) Domain IP IP4 IP6 MessageStore Pill POSIX Sock SockBuffer TLS-OpenSSL esc osutil
172 OpenDKIM-test_STEMS := OpenDKIM
173 POSIX-test_STEMS := POSIX
174 Pill-test_STEMS := Pill
175 SPF-test_STEMS := $(DNS) Domain IP IP4 IP6 SPF POSIX Sock SockBuffer TLS-OpenSSL esc osutil
176 SRS-test_STEMS := SRS Domain Mailbox IP IP4 IP6
177 Send-test_STEMS := $(DNS) Domain IP IP4 IP6 Mailbox OpenARC OpenDKIM OpenDMARC POSIX Pill SPF Send Sock SockBuffer TLS-OpenSSL esc osutil
179 osutil-test_STEMS := osutil
181 Session-test_STEMS := \
182 CDB \
183 $(DNS) \
184 Domain \
185 IP \
186 IP4 \
187 IP6 \
188 Mailbox \
189 MessageStore \
190 OpenARC \
191 OpenDKIM \
192 OpenDMARC \
193 POSIX \
194 Pill \
195 SPF \
196 Send \
197 Session \
198 Sock \
199 SockBuffer \
200 TLS-OpenSSL \
201 esc \
202 osutil
204 Sock-test_STEMS := Domain IP IP4 IP6 POSIX Sock SockBuffer TLS-OpenSSL esc osutil
205 SockBuffer-test_STEMS := Domain IP IP4 IP6 POSIX Sock SockBuffer TLS-OpenSSL esc osutil
206 TLS-OpenSSL-test_STEMS := Domain IP IP4 IP6 POSIX TLS-OpenSSL osutil
207 esc-test_STEMS := esc
209 databases := \
210 accept_domains.cdb \
211 allow.cdb \
212 bad_recipients.cdb \
213 bad_recipients_data.cdb \
214 bad_senders.cdb \
215 block.cdb \
216 forward.cdb \
217 ip-block.cdb \
218 temp_fail.cdb
220 all:: $(databases) public_suffix_list.dat
222 TMPDIR ?= /tmp
224 export TEST_MAILDIR=$(TMPDIR)/Maildir
225 export MAILDIR=$(TEST_MAILDIR)
227 export ASAN_OPTIONS=detect_leaks=0
229 export GHSMTP_SERVER_ID=digilicious.com
231 export LLVM_PROFILE_FILE=smtp.profraw
233 $(TEST_MAILDIR):
234 mkdir -p $@
236 #smtp.cpp: smtp.rl
237 # ragel -o smtp.cpp smtp.rl
239 clean-test::
240 rm -f smtp.profraw
241 rm -f smtp.profdata
242 rm -rf $(TEST_MAILDIR)/*
244 %.cdb : % cdb-gen
245 ./cdb-gen < $< | cdb -c $@
247 clean::
248 rm -f accept_domains.cdb
249 rm -f block.cdb
250 rm -f cdb-gen
251 rm -f forward.cdb
252 rm -f ip-block.cdb
253 rm -f allow.cdb
255 accept_domains.cdb: accept_domains cdb-gen
256 allow.cdb: allow cdb-gen
257 block.cdb: block cdb-gen
258 ip-block.cdb: ip-block cdb-gen
259 three-level-tlds.cdb: three-level-tlds cdb-gen
261 forward.cdb: forward
262 cat $< | cdb -c $@
264 public_suffix_list.dat:
265 wget --timestamping https://publicsuffix.org/list/public_suffix_list.dat
267 opt_flags := -Og
269 # safty_flags := # nada
271 # visibility_flags := # nada
273 lto_flags := # nada
275 include MKUltra/rules
277 regression:: $(programs) $(TEST_MAILDIR)
278 @for f in testcase_dir/* ; do \
279 echo -n test `basename $$f` ""; \
280 tmp_out=`mktemp`; \
281 valgrind ./smtp < $$f > $$tmp_out; \
282 diff testout_dir/`basename $$f` $$tmp_out && echo ...pass; \
283 rm $$tmp_out; \
284 done
286 check::
287 @for f in testcase_dir/* ; do \
288 echo -n test `basename $$f` ""; \
289 tmp_out=`mktemp`; \
290 ./smtp < $$f > $$tmp_out; \
291 diff testout_dir/`basename $$f` $$tmp_out && echo ...pass; \
292 if [ -e smtp.profraw ] ; then mv smtp.profraw /tmp/smtp-profile/`basename $$f`; fi; \
293 rm $$tmp_out; \
294 done
296 net-check::
297 @for f in testcase_dir/* ; do \
298 echo -n test `basename $$f` ""; \
299 tmp_out=`mktemp`; \
300 ncat localhost 225 < $$f > $$tmp_out; \
301 diff testout_dir/`basename $$f` $$tmp_out && echo ...pass; \
302 if [ -e smtp.profraw ] ; then mv smtp.profraw /tmp/smtp-profile/`basename $$f`; fi; \
303 rm $$tmp_out; \
304 done
306 check:: msg snd
307 ./msg --selftest
308 GHSMTP_CLIENT_ID=digilicious.com ./snd --selftest
310 show::
311 llvm-profdata merge -sparse /tmp/smtp-profile/* -o smtp.profdata
312 llvm-cov show ./smtp -instr-profile=smtp.profdata
314 init::
315 touch accept_domains bad_recipients bad_recipients_data bad_senders block ip-block temp_fail
316 sudo dnf install boost-devel file-devel fmt-devel glog-devel ldns-devel libidn2-devel tinycdb-devel libunistring-devel
318 .PHONY:: list
319 list:
320 @LC_ALL=C $(MAKE) -pRrq -f $(firstword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/(^|\n)# Files(\n|$$)/,/(^|\n)# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | uniq | grep -E -v -e '^[^[:alnum:]]' -e '^$@$$'