OLD | NEW |
| (Empty) |
1 # Copyright 2009 The RE2 Authors. All Rights Reserved. | |
2 # Use of this source code is governed by a BSD-style | |
3 # license that can be found in the LICENSE file. | |
4 | |
5 # to build against PCRE for testing or benchmarking, | |
6 # uncomment the next two lines | |
7 # CCPCRE=-I/usr/local/include -DUSEPCRE | |
8 # LDPCRE=-L/usr/local/lib -lpcre | |
9 | |
10 CXX?=g++ | |
11 CXXFLAGS?=-O3 -g # can override | |
12 RE2_CXXFLAGS?=-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializer
s -I. $(CCPCRE) # required | |
13 LDFLAGS?=-pthread | |
14 AR?=ar | |
15 ARFLAGS?=rsc | |
16 NM?=nm | |
17 NMFLAGS?=-p | |
18 | |
19 # Variables mandated by GNU, the arbiter of all good taste on the internet. | |
20 # http://www.gnu.org/prep/standards/standards.html | |
21 prefix=/usr/local | |
22 exec_prefix=$(prefix) | |
23 bindir=$(exec_prefix)/bin | |
24 includedir=$(prefix)/include | |
25 libdir=$(exec_prefix)/lib | |
26 INSTALL=install | |
27 INSTALL_PROGRAM=$(INSTALL) | |
28 INSTALL_DATA=$(INSTALL) -m 644 | |
29 | |
30 # ABI version | |
31 # http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html | |
32 SONAME=0 | |
33 | |
34 # To rebuild the Tables generated by Perl and Python scripts (requires Internet | |
35 # access for Unicode data), uncomment the following line: | |
36 # REBUILD_TABLES=1 | |
37 | |
38 ifeq ($(shell uname),Darwin) | |
39 SOEXT=dylib | |
40 SOEXTVER=$(SONAME).$(SOEXT) | |
41 SOEXTVER00=$(SONAME).0.0.$(SOEXT) | |
42 MAKE_SHARED_LIBRARY=$(CXX) -dynamiclib $(LDFLAGS) -Wl,-install_name,@rpath/libre
2.$(SOEXTVER) -exported_symbols_list libre2.symbols.darwin | |
43 else ifeq ($(shell uname),SunOS) | |
44 SOEXT=so | |
45 SOEXTVER=$(SOEXT).$(SONAME) | |
46 SOEXTVER00=$(SOEXT).$(SONAME).0.0 | |
47 MAKE_SHARED_LIBRARY=$(CXX) -shared -Wl,-soname,libre2.$(SOEXTVER),-M,libre2.symb
ols $(LDFLAGS) | |
48 else | |
49 SOEXT=so | |
50 SOEXTVER=$(SOEXT).$(SONAME) | |
51 SOEXTVER00=$(SOEXT).$(SONAME).0.0 | |
52 MAKE_SHARED_LIBRARY=$(CXX) -shared -Wl,-soname,libre2.$(SOEXTVER),--version-scri
pt,libre2.symbols $(LDFLAGS) | |
53 endif | |
54 | |
55 all: obj/libre2.a obj/so/libre2.$(SOEXT) | |
56 | |
57 INSTALL_HFILES=\ | |
58 re2/filtered_re2.h\ | |
59 re2/re2.h\ | |
60 re2/set.h\ | |
61 re2/stringpiece.h\ | |
62 re2/variadic_function.h\ | |
63 | |
64 HFILES=\ | |
65 util/atomicops.h\ | |
66 util/benchmark.h\ | |
67 util/flags.h\ | |
68 util/logging.h\ | |
69 util/mutex.h\ | |
70 util/pcre.h\ | |
71 util/random.h\ | |
72 util/sparse_array.h\ | |
73 util/sparse_set.h\ | |
74 util/test.h\ | |
75 util/thread.h\ | |
76 util/utf.h\ | |
77 util/util.h\ | |
78 util/valgrind.h\ | |
79 re2/filtered_re2.h\ | |
80 re2/prefilter.h\ | |
81 re2/prefilter_tree.h\ | |
82 re2/prog.h\ | |
83 re2/re2.h\ | |
84 re2/regexp.h\ | |
85 re2/set.h\ | |
86 re2/stringpiece.h\ | |
87 re2/testing/exhaustive_tester.h\ | |
88 re2/testing/regexp_generator.h\ | |
89 re2/testing/string_generator.h\ | |
90 re2/testing/tester.h\ | |
91 re2/unicode_casefold.h\ | |
92 re2/unicode_groups.h\ | |
93 re2/variadic_function.h\ | |
94 re2/walker-inl.h\ | |
95 | |
96 OFILES=\ | |
97 obj/util/hash.o\ | |
98 obj/util/logging.o\ | |
99 obj/util/rune.o\ | |
100 obj/util/stringprintf.o\ | |
101 obj/util/strutil.o\ | |
102 obj/util/valgrind.o\ | |
103 obj/re2/bitstate.o\ | |
104 obj/re2/compile.o\ | |
105 obj/re2/dfa.o\ | |
106 obj/re2/filtered_re2.o\ | |
107 obj/re2/mimics_pcre.o\ | |
108 obj/re2/nfa.o\ | |
109 obj/re2/onepass.o\ | |
110 obj/re2/parse.o\ | |
111 obj/re2/perl_groups.o\ | |
112 obj/re2/prefilter.o\ | |
113 obj/re2/prefilter_tree.o\ | |
114 obj/re2/prog.o\ | |
115 obj/re2/re2.o\ | |
116 obj/re2/regexp.o\ | |
117 obj/re2/set.o\ | |
118 obj/re2/simplify.o\ | |
119 obj/re2/stringpiece.o\ | |
120 obj/re2/tostring.o\ | |
121 obj/re2/unicode_casefold.o\ | |
122 obj/re2/unicode_groups.o\ | |
123 | |
124 TESTOFILES=\ | |
125 obj/util/pcre.o\ | |
126 obj/util/random.o\ | |
127 obj/util/thread.o\ | |
128 obj/re2/testing/backtrack.o\ | |
129 obj/re2/testing/dump.o\ | |
130 obj/re2/testing/exhaustive_tester.o\ | |
131 obj/re2/testing/null_walker.o\ | |
132 obj/re2/testing/regexp_generator.o\ | |
133 obj/re2/testing/string_generator.o\ | |
134 obj/re2/testing/tester.o\ | |
135 | |
136 TESTS=\ | |
137 obj/test/charclass_test\ | |
138 obj/test/compile_test\ | |
139 obj/test/filtered_re2_test\ | |
140 obj/test/mimics_pcre_test\ | |
141 obj/test/parse_test\ | |
142 obj/test/possible_match_test\ | |
143 obj/test/re2_test\ | |
144 obj/test/re2_arg_test\ | |
145 obj/test/regexp_test\ | |
146 obj/test/required_prefix_test\ | |
147 obj/test/search_test\ | |
148 obj/test/set_test\ | |
149 obj/test/simplify_test\ | |
150 obj/test/string_generator_test\ | |
151 | |
152 BIGTESTS=\ | |
153 obj/test/dfa_test\ | |
154 obj/test/exhaustive1_test\ | |
155 obj/test/exhaustive2_test\ | |
156 obj/test/exhaustive3_test\ | |
157 obj/test/exhaustive_test\ | |
158 obj/test/random_test\ | |
159 | |
160 SOFILES=$(patsubst obj/%,obj/so/%,$(OFILES)) | |
161 STESTOFILES=$(patsubst obj/%,obj/so/%,$(TESTOFILES)) | |
162 STESTS=$(patsubst obj/%,obj/so/%,$(TESTS)) | |
163 SBIGTESTS=$(patsubst obj/%,obj/so/%,$(BIGTESTS)) | |
164 | |
165 DOFILES=$(patsubst obj/%,obj/dbg/%,$(OFILES)) | |
166 DTESTOFILES=$(patsubst obj/%,obj/dbg/%,$(TESTOFILES)) | |
167 DTESTS=$(patsubst obj/%,obj/dbg/%,$(TESTS)) | |
168 DBIGTESTS=$(patsubst obj/%,obj/dbg/%,$(BIGTESTS)) | |
169 | |
170 obj/%.o: %.cc $(HFILES) | |
171 @mkdir -p $$(dirname $@) | |
172 $(CXX) -c -o $@ $(CPPFLAGS) $(CXXFLAGS) $(RE2_CXXFLAGS) -DNDEBUG $*.cc | |
173 | |
174 obj/dbg/%.o: %.cc $(HFILES) | |
175 @mkdir -p $$(dirname $@) | |
176 $(CXX) -c -o $@ $(CPPFLAGS) $(CXXFLAGS) $(RE2_CXXFLAGS) $*.cc | |
177 | |
178 obj/so/%.o: %.cc $(HFILES) | |
179 @mkdir -p $$(dirname $@) | |
180 $(CXX) -c -o $@ -fPIC $(CPPFLAGS) $(CXXFLAGS) $(RE2_CXXFLAGS) -DNDEBUG $
*.cc | |
181 | |
182 obj/libre2.a: $(OFILES) | |
183 @mkdir -p obj | |
184 $(AR) $(ARFLAGS) obj/libre2.a $(OFILES) | |
185 | |
186 obj/dbg/libre2.a: $(DOFILES) | |
187 @mkdir -p obj/dbg | |
188 $(AR) $(ARFLAGS) obj/dbg/libre2.a $(DOFILES) | |
189 | |
190 obj/so/libre2.$(SOEXT): $(SOFILES) | |
191 @mkdir -p obj/so | |
192 $(MAKE_SHARED_LIBRARY) -o obj/so/libre2.$(SOEXTVER) $(SOFILES) | |
193 ln -sf libre2.$(SOEXTVER) $@ | |
194 | |
195 obj/test/%: obj/libre2.a obj/re2/testing/%.o $(TESTOFILES) obj/util/test.o | |
196 @mkdir -p obj/test | |
197 $(CXX) -o $@ obj/re2/testing/$*.o $(TESTOFILES) obj/util/test.o obj/libr
e2.a $(LDFLAGS) $(LDPCRE) | |
198 | |
199 obj/dbg/test/%: obj/dbg/libre2.a obj/dbg/re2/testing/%.o $(DTESTOFILES) obj/dbg/
util/test.o | |
200 @mkdir -p obj/dbg/test | |
201 $(CXX) -o $@ obj/dbg/re2/testing/$*.o $(DTESTOFILES) obj/dbg/util/test.o
obj/dbg/libre2.a $(LDFLAGS) $(LDPCRE) | |
202 | |
203 obj/so/test/%: obj/so/libre2.$(SOEXT) obj/libre2.a obj/so/re2/testing/%.o $(STES
TOFILES) obj/so/util/test.o | |
204 @mkdir -p obj/so/test | |
205 $(CXX) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -
Lobj/so -lre2 obj/libre2.a $(LDFLAGS) $(LDPCRE) | |
206 | |
207 obj/test/regexp_benchmark: obj/libre2.a obj/re2/testing/regexp_benchmark.o $(TES
TOFILES) obj/util/benchmark.o | |
208 @mkdir -p obj/test | |
209 $(CXX) -o $@ obj/re2/testing/regexp_benchmark.o $(TESTOFILES) obj/util/b
enchmark.o obj/libre2.a $(LDFLAGS) $(LDPCRE) | |
210 | |
211 ifdef REBUILD_TABLES | |
212 re2/perl_groups.cc: re2/make_perl_groups.pl | |
213 perl $< > $@ | |
214 | |
215 re2/unicode_%.cc: re2/make_unicode_%.py | |
216 python $< > $@ | |
217 | |
218 .PRECIOUS: re2/perl_groups.cc re2/unicode_casefold.cc re2/unicode_groups.cc | |
219 endif | |
220 | |
221 distclean: clean | |
222 rm -f re2/perl_groups.cc re2/unicode_casefold.cc re2/unicode_groups.cc | |
223 | |
224 clean: | |
225 rm -rf obj | |
226 rm -f re2/*.pyc | |
227 | |
228 testofiles: $(TESTOFILES) | |
229 | |
230 test: $(DTESTS) $(TESTS) $(STESTS) debug-test static-test shared-test | |
231 | |
232 debug-test: $(DTESTS) | |
233 @echo | |
234 @echo Running debug binary tests. | |
235 @echo | |
236 @./runtests $(DTESTS) | |
237 | |
238 static-test: $(TESTS) | |
239 @echo | |
240 @echo Running static binary tests. | |
241 @echo | |
242 @./runtests $(TESTS) | |
243 | |
244 shared-test: $(STESTS) | |
245 @echo | |
246 @echo Running dynamic binary tests. | |
247 @echo | |
248 @LD_LIBRARY_PATH=obj/so:$(LD_LIBRARY_PATH) ./runtests $(STESTS) | |
249 | |
250 debug-bigtest: $(DTESTS) $(DBIGTESTS) | |
251 @./runtests $(DTESTS) $(DBIGTESTS) | |
252 | |
253 static-bigtest: $(TESTS) $(BIGTESTS) | |
254 @./runtests $(TESTS) $(BIGTESTS) | |
255 | |
256 shared-bigtest: $(STESTS) $(SBIGTESTS) | |
257 @LD_LIBRARY_PATH=obj/so:$(LD_LIBRARY_PATH) ./runtests $(STESTS) $(SBIGTE
STS) | |
258 | |
259 benchmark: obj/test/regexp_benchmark | |
260 | |
261 install: obj/libre2.a obj/so/libre2.$(SOEXT) | |
262 mkdir -p $(DESTDIR)$(includedir)/re2 $(DESTDIR)$(libdir)/pkgconfig | |
263 $(INSTALL_DATA) $(INSTALL_HFILES) $(DESTDIR)$(includedir)/re2 | |
264 $(INSTALL) obj/libre2.a $(DESTDIR)$(libdir)/libre2.a | |
265 $(INSTALL) obj/so/libre2.$(SOEXT) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER0
0) | |
266 ln -sf libre2.$(SOEXTVER00) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER) | |
267 ln -sf libre2.$(SOEXTVER00) $(DESTDIR)$(libdir)/libre2.$(SOEXT) | |
268 sed -e "s#@prefix@#${prefix}#" re2.pc >$(DESTDIR)$(libdir)/pkgconfig/re2
.pc | |
269 | |
270 testinstall: | |
271 @mkdir -p obj | |
272 cp testinstall.cc obj | |
273 ifneq ($(shell uname),Darwin) | |
274 (cd obj && $(CXX) -I$(DESTDIR)$(includedir) -L$(DESTDIR)$(libdir) testin
stall.cc -lre2 -pthread -static -o testinstall) | |
275 obj/testinstall | |
276 endif | |
277 (cd obj && $(CXX) -I$(DESTDIR)$(includedir) -L$(DESTDIR)$(libdir) testin
stall.cc -lre2 -pthread -o testinstall) | |
278 LD_LIBRARY_PATH=$(DESTDIR)$(libdir) obj/testinstall | |
279 | |
280 benchlog: obj/test/regexp_benchmark | |
281 (echo '==BENCHMARK==' `hostname` `date`; \ | |
282 (uname -a; $(CXX) --version; git rev-parse --short HEAD; file obj/test
/regexp_benchmark) | sed 's/^/# /'; \ | |
283 echo; \ | |
284 ./obj/test/regexp_benchmark 'PCRE|RE2') | tee -a benchlog.$$(hostname
| sed 's/\..*//') | |
285 | |
286 # Keep gmake from deleting intermediate files it creates. | |
287 # This makes repeated builds faster and preserves debug info on OS X. | |
288 | |
289 .PRECIOUS: obj/%.o obj/dbg/%.o obj/so/%.o obj/libre2.a \ | |
290 obj/dbg/libre2.a obj/so/libre2.a \ | |
291 obj/test/% obj/so/test/% obj/dbg/test/% | |
292 | |
293 log: | |
294 $(MAKE) clean | |
295 $(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" \ | |
296 $(filter obj/test/exhaustive%_test,$(BIGTESTS)) | |
297 echo '#' RE2 exhaustive tests built by make log >re2-exhaustive.txt | |
298 echo '#' $$(date) >>re2-exhaustive.txt | |
299 obj/test/exhaustive_test |grep -v '^PASS$$' >>re2-exhaustive.txt | |
300 obj/test/exhaustive1_test |grep -v '^PASS$$' >>re2-exhaustive.txt | |
301 obj/test/exhaustive2_test |grep -v '^PASS$$' >>re2-exhaustive.txt | |
302 obj/test/exhaustive3_test |grep -v '^PASS$$' >>re2-exhaustive.txt | |
303 | |
304 $(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" obj/test/search_test | |
305 echo '#' RE2 basic search tests built by make $@ >re2-search.txt | |
306 echo '#' $$(date) >>re2-search.txt | |
307 obj/test/search_test |grep -v '^PASS$$' >>re2-search.txt | |
308 | |
309 x: x.cc obj/libre2.a | |
310 g++ -I. -o x x.cc obj/libre2.a | |
OLD | NEW |