xref: /aosp_15_r20/external/regex-re2/Makefile (revision ccdc9c3e24c519bfa4832a66aa2e83a52c19f295)
1*ccdc9c3eSSadaf Ebrahimi# Copyright 2009 The RE2 Authors.  All Rights Reserved.
2*ccdc9c3eSSadaf Ebrahimi# Use of this source code is governed by a BSD-style
3*ccdc9c3eSSadaf Ebrahimi# license that can be found in the LICENSE file.
4*ccdc9c3eSSadaf Ebrahimi
5*ccdc9c3eSSadaf Ebrahimi# To build against ICU for full Unicode properties support,
6*ccdc9c3eSSadaf Ebrahimi# uncomment the next two lines:
7*ccdc9c3eSSadaf Ebrahimi# CCICU=$(shell pkg-config icu-uc --cflags) -DRE2_USE_ICU
8*ccdc9c3eSSadaf Ebrahimi# LDICU=$(shell pkg-config icu-uc --libs)
9*ccdc9c3eSSadaf Ebrahimi
10*ccdc9c3eSSadaf Ebrahimi# To build against PCRE for testing or benchmarking,
11*ccdc9c3eSSadaf Ebrahimi# uncomment the next two lines:
12*ccdc9c3eSSadaf Ebrahimi# CCPCRE=-I/usr/local/include -DUSEPCRE
13*ccdc9c3eSSadaf Ebrahimi# LDPCRE=-L/usr/local/lib -lpcre
14*ccdc9c3eSSadaf Ebrahimi
15*ccdc9c3eSSadaf EbrahimiCXX?=g++
16*ccdc9c3eSSadaf Ebrahimi# can override
17*ccdc9c3eSSadaf EbrahimiCXXFLAGS?=-O3 -g
18*ccdc9c3eSSadaf EbrahimiLDFLAGS?=
19*ccdc9c3eSSadaf Ebrahimi# required
20*ccdc9c3eSSadaf EbrahimiRE2_CXXFLAGS?=-std=c++11 -pthread -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -I. $(CCICU) $(CCPCRE)
21*ccdc9c3eSSadaf EbrahimiRE2_LDFLAGS?=-pthread $(LDICU) $(LDPCRE)
22*ccdc9c3eSSadaf EbrahimiAR?=ar
23*ccdc9c3eSSadaf EbrahimiARFLAGS?=rsc
24*ccdc9c3eSSadaf EbrahimiNM?=nm
25*ccdc9c3eSSadaf EbrahimiNMFLAGS?=-p
26*ccdc9c3eSSadaf Ebrahimi
27*ccdc9c3eSSadaf Ebrahimi# Variables mandated by GNU, the arbiter of all good taste on the internet.
28*ccdc9c3eSSadaf Ebrahimi# http://www.gnu.org/prep/standards/standards.html
29*ccdc9c3eSSadaf Ebrahimiprefix=/usr/local
30*ccdc9c3eSSadaf Ebrahimiexec_prefix=$(prefix)
31*ccdc9c3eSSadaf Ebrahimiincludedir=$(prefix)/include
32*ccdc9c3eSSadaf Ebrahimilibdir=$(exec_prefix)/lib
33*ccdc9c3eSSadaf EbrahimiINSTALL=install
34*ccdc9c3eSSadaf EbrahimiINSTALL_DATA=$(INSTALL) -m 644
35*ccdc9c3eSSadaf Ebrahimi
36*ccdc9c3eSSadaf Ebrahimi# Work around the weirdness of sed(1) on Darwin. :/
37*ccdc9c3eSSadaf Ebrahimiifeq ($(shell uname),Darwin)
38*ccdc9c3eSSadaf EbrahimiSED_INPLACE=sed -i ''
39*ccdc9c3eSSadaf Ebrahimielse ifeq ($(shell uname),SunOS)
40*ccdc9c3eSSadaf EbrahimiSED_INPLACE=sed -i
41*ccdc9c3eSSadaf Ebrahimielse
42*ccdc9c3eSSadaf EbrahimiSED_INPLACE=sed -i
43*ccdc9c3eSSadaf Ebrahimiendif
44*ccdc9c3eSSadaf Ebrahimi
45*ccdc9c3eSSadaf Ebrahimi# ABI version
46*ccdc9c3eSSadaf Ebrahimi# http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
47*ccdc9c3eSSadaf EbrahimiSONAME=0
48*ccdc9c3eSSadaf Ebrahimi
49*ccdc9c3eSSadaf Ebrahimi# To rebuild the Tables generated by Perl and Python scripts (requires Internet
50*ccdc9c3eSSadaf Ebrahimi# access for Unicode data), uncomment the following line:
51*ccdc9c3eSSadaf Ebrahimi# REBUILD_TABLES=1
52*ccdc9c3eSSadaf Ebrahimi
53*ccdc9c3eSSadaf Ebrahimi# The SunOS linker does not support wildcards. :(
54*ccdc9c3eSSadaf Ebrahimiifeq ($(shell uname),Darwin)
55*ccdc9c3eSSadaf EbrahimiSOEXT=dylib
56*ccdc9c3eSSadaf EbrahimiSOEXTVER=$(SONAME).$(SOEXT)
57*ccdc9c3eSSadaf EbrahimiSOEXTVER00=$(SONAME).0.0.$(SOEXT)
58*ccdc9c3eSSadaf EbrahimiMAKE_SHARED_LIBRARY=$(CXX) -dynamiclib -Wl,-install_name,$(libdir)/libre2.$(SOEXTVER),-exported_symbols_list,libre2.symbols.darwin $(RE2_LDFLAGS) $(LDFLAGS)
59*ccdc9c3eSSadaf Ebrahimielse ifeq ($(shell uname),SunOS)
60*ccdc9c3eSSadaf EbrahimiSOEXT=so
61*ccdc9c3eSSadaf EbrahimiSOEXTVER=$(SOEXT).$(SONAME)
62*ccdc9c3eSSadaf EbrahimiSOEXTVER00=$(SOEXT).$(SONAME).0.0
63*ccdc9c3eSSadaf EbrahimiMAKE_SHARED_LIBRARY=$(CXX) -shared -Wl,-soname,libre2.$(SOEXTVER) $(RE2_LDFLAGS) $(LDFLAGS)
64*ccdc9c3eSSadaf Ebrahimielse
65*ccdc9c3eSSadaf EbrahimiSOEXT=so
66*ccdc9c3eSSadaf EbrahimiSOEXTVER=$(SOEXT).$(SONAME)
67*ccdc9c3eSSadaf EbrahimiSOEXTVER00=$(SOEXT).$(SONAME).0.0
68*ccdc9c3eSSadaf EbrahimiMAKE_SHARED_LIBRARY=$(CXX) -shared -Wl,-soname,libre2.$(SOEXTVER),--version-script,libre2.symbols $(RE2_LDFLAGS) $(LDFLAGS)
69*ccdc9c3eSSadaf Ebrahimiendif
70*ccdc9c3eSSadaf Ebrahimi
71*ccdc9c3eSSadaf Ebrahimiall: obj/libre2.a obj/so/libre2.$(SOEXT)
72*ccdc9c3eSSadaf Ebrahimi
73*ccdc9c3eSSadaf EbrahimiINSTALL_HFILES=\
74*ccdc9c3eSSadaf Ebrahimi	re2/filtered_re2.h\
75*ccdc9c3eSSadaf Ebrahimi	re2/re2.h\
76*ccdc9c3eSSadaf Ebrahimi	re2/set.h\
77*ccdc9c3eSSadaf Ebrahimi	re2/stringpiece.h\
78*ccdc9c3eSSadaf Ebrahimi
79*ccdc9c3eSSadaf EbrahimiHFILES=\
80*ccdc9c3eSSadaf Ebrahimi	util/benchmark.h\
81*ccdc9c3eSSadaf Ebrahimi	util/flags.h\
82*ccdc9c3eSSadaf Ebrahimi	util/logging.h\
83*ccdc9c3eSSadaf Ebrahimi	util/mix.h\
84*ccdc9c3eSSadaf Ebrahimi	util/mutex.h\
85*ccdc9c3eSSadaf Ebrahimi	util/pcre.h\
86*ccdc9c3eSSadaf Ebrahimi	util/pod_array.h\
87*ccdc9c3eSSadaf Ebrahimi	util/sparse_array.h\
88*ccdc9c3eSSadaf Ebrahimi	util/sparse_set.h\
89*ccdc9c3eSSadaf Ebrahimi	util/strutil.h\
90*ccdc9c3eSSadaf Ebrahimi	util/test.h\
91*ccdc9c3eSSadaf Ebrahimi	util/utf.h\
92*ccdc9c3eSSadaf Ebrahimi	util/util.h\
93*ccdc9c3eSSadaf Ebrahimi	re2/bitmap256.h\
94*ccdc9c3eSSadaf Ebrahimi	re2/filtered_re2.h\
95*ccdc9c3eSSadaf Ebrahimi	re2/prefilter.h\
96*ccdc9c3eSSadaf Ebrahimi	re2/prefilter_tree.h\
97*ccdc9c3eSSadaf Ebrahimi	re2/prog.h\
98*ccdc9c3eSSadaf Ebrahimi	re2/re2.h\
99*ccdc9c3eSSadaf Ebrahimi	re2/regexp.h\
100*ccdc9c3eSSadaf Ebrahimi	re2/set.h\
101*ccdc9c3eSSadaf Ebrahimi	re2/stringpiece.h\
102*ccdc9c3eSSadaf Ebrahimi	re2/testing/exhaustive_tester.h\
103*ccdc9c3eSSadaf Ebrahimi	re2/testing/regexp_generator.h\
104*ccdc9c3eSSadaf Ebrahimi	re2/testing/string_generator.h\
105*ccdc9c3eSSadaf Ebrahimi	re2/testing/tester.h\
106*ccdc9c3eSSadaf Ebrahimi	re2/unicode_casefold.h\
107*ccdc9c3eSSadaf Ebrahimi	re2/unicode_groups.h\
108*ccdc9c3eSSadaf Ebrahimi	re2/walker-inl.h\
109*ccdc9c3eSSadaf Ebrahimi
110*ccdc9c3eSSadaf EbrahimiOFILES=\
111*ccdc9c3eSSadaf Ebrahimi	obj/util/rune.o\
112*ccdc9c3eSSadaf Ebrahimi	obj/util/strutil.o\
113*ccdc9c3eSSadaf Ebrahimi	obj/re2/bitstate.o\
114*ccdc9c3eSSadaf Ebrahimi	obj/re2/compile.o\
115*ccdc9c3eSSadaf Ebrahimi	obj/re2/dfa.o\
116*ccdc9c3eSSadaf Ebrahimi	obj/re2/filtered_re2.o\
117*ccdc9c3eSSadaf Ebrahimi	obj/re2/mimics_pcre.o\
118*ccdc9c3eSSadaf Ebrahimi	obj/re2/nfa.o\
119*ccdc9c3eSSadaf Ebrahimi	obj/re2/onepass.o\
120*ccdc9c3eSSadaf Ebrahimi	obj/re2/parse.o\
121*ccdc9c3eSSadaf Ebrahimi	obj/re2/perl_groups.o\
122*ccdc9c3eSSadaf Ebrahimi	obj/re2/prefilter.o\
123*ccdc9c3eSSadaf Ebrahimi	obj/re2/prefilter_tree.o\
124*ccdc9c3eSSadaf Ebrahimi	obj/re2/prog.o\
125*ccdc9c3eSSadaf Ebrahimi	obj/re2/re2.o\
126*ccdc9c3eSSadaf Ebrahimi	obj/re2/regexp.o\
127*ccdc9c3eSSadaf Ebrahimi	obj/re2/set.o\
128*ccdc9c3eSSadaf Ebrahimi	obj/re2/simplify.o\
129*ccdc9c3eSSadaf Ebrahimi	obj/re2/stringpiece.o\
130*ccdc9c3eSSadaf Ebrahimi	obj/re2/tostring.o\
131*ccdc9c3eSSadaf Ebrahimi	obj/re2/unicode_casefold.o\
132*ccdc9c3eSSadaf Ebrahimi	obj/re2/unicode_groups.o\
133*ccdc9c3eSSadaf Ebrahimi
134*ccdc9c3eSSadaf EbrahimiTESTOFILES=\
135*ccdc9c3eSSadaf Ebrahimi	obj/util/pcre.o\
136*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/backtrack.o\
137*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/dump.o\
138*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/exhaustive_tester.o\
139*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/null_walker.o\
140*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/regexp_generator.o\
141*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/string_generator.o\
142*ccdc9c3eSSadaf Ebrahimi	obj/re2/testing/tester.o\
143*ccdc9c3eSSadaf Ebrahimi
144*ccdc9c3eSSadaf EbrahimiTESTS=\
145*ccdc9c3eSSadaf Ebrahimi	obj/test/charclass_test\
146*ccdc9c3eSSadaf Ebrahimi	obj/test/compile_test\
147*ccdc9c3eSSadaf Ebrahimi	obj/test/filtered_re2_test\
148*ccdc9c3eSSadaf Ebrahimi	obj/test/mimics_pcre_test\
149*ccdc9c3eSSadaf Ebrahimi	obj/test/parse_test\
150*ccdc9c3eSSadaf Ebrahimi	obj/test/possible_match_test\
151*ccdc9c3eSSadaf Ebrahimi	obj/test/re2_test\
152*ccdc9c3eSSadaf Ebrahimi	obj/test/re2_arg_test\
153*ccdc9c3eSSadaf Ebrahimi	obj/test/regexp_test\
154*ccdc9c3eSSadaf Ebrahimi	obj/test/required_prefix_test\
155*ccdc9c3eSSadaf Ebrahimi	obj/test/search_test\
156*ccdc9c3eSSadaf Ebrahimi	obj/test/set_test\
157*ccdc9c3eSSadaf Ebrahimi	obj/test/simplify_test\
158*ccdc9c3eSSadaf Ebrahimi	obj/test/string_generator_test\
159*ccdc9c3eSSadaf Ebrahimi
160*ccdc9c3eSSadaf EbrahimiBIGTESTS=\
161*ccdc9c3eSSadaf Ebrahimi	obj/test/dfa_test\
162*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive1_test\
163*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive2_test\
164*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive3_test\
165*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive_test\
166*ccdc9c3eSSadaf Ebrahimi	obj/test/random_test\
167*ccdc9c3eSSadaf Ebrahimi
168*ccdc9c3eSSadaf EbrahimiSOFILES=$(patsubst obj/%,obj/so/%,$(OFILES))
169*ccdc9c3eSSadaf Ebrahimi# We use TESTOFILES for testing the shared lib, only it is built differently.
170*ccdc9c3eSSadaf EbrahimiSTESTS=$(patsubst obj/%,obj/so/%,$(TESTS))
171*ccdc9c3eSSadaf EbrahimiSBIGTESTS=$(patsubst obj/%,obj/so/%,$(BIGTESTS))
172*ccdc9c3eSSadaf Ebrahimi
173*ccdc9c3eSSadaf EbrahimiDOFILES=$(patsubst obj/%,obj/dbg/%,$(OFILES))
174*ccdc9c3eSSadaf EbrahimiDTESTOFILES=$(patsubst obj/%,obj/dbg/%,$(TESTOFILES))
175*ccdc9c3eSSadaf EbrahimiDTESTS=$(patsubst obj/%,obj/dbg/%,$(TESTS))
176*ccdc9c3eSSadaf EbrahimiDBIGTESTS=$(patsubst obj/%,obj/dbg/%,$(BIGTESTS))
177*ccdc9c3eSSadaf Ebrahimi
178*ccdc9c3eSSadaf Ebrahimiobj/%.o: %.cc $(HFILES)
179*ccdc9c3eSSadaf Ebrahimi	@mkdir -p $$(dirname $@)
180*ccdc9c3eSSadaf Ebrahimi	$(CXX) -c -o $@ $(CPPFLAGS) $(RE2_CXXFLAGS) $(CXXFLAGS) -DNDEBUG $*.cc
181*ccdc9c3eSSadaf Ebrahimi
182*ccdc9c3eSSadaf Ebrahimiobj/dbg/%.o: %.cc $(HFILES)
183*ccdc9c3eSSadaf Ebrahimi	@mkdir -p $$(dirname $@)
184*ccdc9c3eSSadaf Ebrahimi	$(CXX) -c -o $@ $(CPPFLAGS) $(RE2_CXXFLAGS) $(CXXFLAGS) $*.cc
185*ccdc9c3eSSadaf Ebrahimi
186*ccdc9c3eSSadaf Ebrahimiobj/so/%.o: %.cc $(HFILES)
187*ccdc9c3eSSadaf Ebrahimi	@mkdir -p $$(dirname $@)
188*ccdc9c3eSSadaf Ebrahimi	$(CXX) -c -o $@ -fPIC $(CPPFLAGS) $(RE2_CXXFLAGS) $(CXXFLAGS) -DNDEBUG $*.cc
189*ccdc9c3eSSadaf Ebrahimi
190*ccdc9c3eSSadaf Ebrahimiobj/libre2.a: $(OFILES)
191*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj
192*ccdc9c3eSSadaf Ebrahimi	$(AR) $(ARFLAGS) obj/libre2.a $(OFILES)
193*ccdc9c3eSSadaf Ebrahimi
194*ccdc9c3eSSadaf Ebrahimiobj/dbg/libre2.a: $(DOFILES)
195*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/dbg
196*ccdc9c3eSSadaf Ebrahimi	$(AR) $(ARFLAGS) obj/dbg/libre2.a $(DOFILES)
197*ccdc9c3eSSadaf Ebrahimi
198*ccdc9c3eSSadaf Ebrahimiobj/so/libre2.$(SOEXT): $(SOFILES)
199*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/so
200*ccdc9c3eSSadaf Ebrahimi	$(MAKE_SHARED_LIBRARY) -o obj/so/libre2.$(SOEXTVER) $(SOFILES)
201*ccdc9c3eSSadaf Ebrahimi	ln -sf libre2.$(SOEXTVER) $@
202*ccdc9c3eSSadaf Ebrahimi
203*ccdc9c3eSSadaf Ebrahimiobj/dbg/test/%: obj/dbg/libre2.a obj/dbg/re2/testing/%.o $(DTESTOFILES) obj/dbg/util/test.o
204*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/dbg/test
205*ccdc9c3eSSadaf Ebrahimi	$(CXX) -o $@ obj/dbg/re2/testing/$*.o $(DTESTOFILES) obj/dbg/util/test.o obj/dbg/libre2.a $(RE2_LDFLAGS) $(LDFLAGS)
206*ccdc9c3eSSadaf Ebrahimi
207*ccdc9c3eSSadaf Ebrahimiobj/test/%: obj/libre2.a obj/re2/testing/%.o $(TESTOFILES) obj/util/test.o
208*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/test
209*ccdc9c3eSSadaf Ebrahimi	$(CXX) -o $@ obj/re2/testing/$*.o $(TESTOFILES) obj/util/test.o obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS)
210*ccdc9c3eSSadaf Ebrahimi
211*ccdc9c3eSSadaf Ebrahimi# Test the shared lib, falling back to the static lib for private symbols
212*ccdc9c3eSSadaf Ebrahimiobj/so/test/%: obj/so/libre2.$(SOEXT) obj/libre2.a obj/re2/testing/%.o $(TESTOFILES) obj/util/test.o
213*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/so/test
214*ccdc9c3eSSadaf Ebrahimi	$(CXX) -o $@ obj/re2/testing/$*.o $(TESTOFILES) obj/util/test.o -Lobj/so -lre2 obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS)
215*ccdc9c3eSSadaf Ebrahimi
216*ccdc9c3eSSadaf Ebrahimiobj/test/regexp_benchmark: obj/libre2.a obj/re2/testing/regexp_benchmark.o $(TESTOFILES) obj/util/benchmark.o
217*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/test
218*ccdc9c3eSSadaf Ebrahimi	$(CXX) -o $@ obj/re2/testing/regexp_benchmark.o $(TESTOFILES) obj/util/benchmark.o obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS)
219*ccdc9c3eSSadaf Ebrahimi
220*ccdc9c3eSSadaf Ebrahimi# re2_fuzzer is a target for fuzzers like libFuzzer and AFL. This fake fuzzing
221*ccdc9c3eSSadaf Ebrahimi# is simply a way to check that the target builds and then to run it against a
222*ccdc9c3eSSadaf Ebrahimi# fixed set of inputs. To perform real fuzzing, refer to the documentation for
223*ccdc9c3eSSadaf Ebrahimi# libFuzzer (llvm.org/docs/LibFuzzer.html) and AFL (lcamtuf.coredump.cx/afl/).
224*ccdc9c3eSSadaf Ebrahimiobj/test/re2_fuzzer: obj/libre2.a obj/re2/fuzzing/re2_fuzzer.o obj/util/fuzz.o
225*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj/test
226*ccdc9c3eSSadaf Ebrahimi	$(CXX) -o $@ obj/re2/fuzzing/re2_fuzzer.o obj/util/fuzz.o obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS)
227*ccdc9c3eSSadaf Ebrahimi
228*ccdc9c3eSSadaf Ebrahimiifdef REBUILD_TABLES
229*ccdc9c3eSSadaf Ebrahimire2/perl_groups.cc: re2/make_perl_groups.pl
230*ccdc9c3eSSadaf Ebrahimi	perl $< > $@
231*ccdc9c3eSSadaf Ebrahimi
232*ccdc9c3eSSadaf Ebrahimire2/unicode_%.cc: re2/make_unicode_%.py
233*ccdc9c3eSSadaf Ebrahimi	python $< > $@
234*ccdc9c3eSSadaf Ebrahimi
235*ccdc9c3eSSadaf Ebrahimi.PRECIOUS: re2/perl_groups.cc re2/unicode_casefold.cc re2/unicode_groups.cc
236*ccdc9c3eSSadaf Ebrahimiendif
237*ccdc9c3eSSadaf Ebrahimi
238*ccdc9c3eSSadaf Ebrahimidistclean: clean
239*ccdc9c3eSSadaf Ebrahimi	rm -f re2/perl_groups.cc re2/unicode_casefold.cc re2/unicode_groups.cc
240*ccdc9c3eSSadaf Ebrahimi
241*ccdc9c3eSSadaf Ebrahimiclean:
242*ccdc9c3eSSadaf Ebrahimi	rm -rf obj
243*ccdc9c3eSSadaf Ebrahimi	rm -f re2/*.pyc
244*ccdc9c3eSSadaf Ebrahimi
245*ccdc9c3eSSadaf Ebrahimitestofiles: $(TESTOFILES)
246*ccdc9c3eSSadaf Ebrahimi
247*ccdc9c3eSSadaf Ebrahimitest: $(DTESTS) $(TESTS) $(STESTS) debug-test static-test shared-test
248*ccdc9c3eSSadaf Ebrahimi
249*ccdc9c3eSSadaf Ebrahimidebug-test: $(DTESTS)
250*ccdc9c3eSSadaf Ebrahimi	@./runtests $(DTESTS)
251*ccdc9c3eSSadaf Ebrahimi
252*ccdc9c3eSSadaf Ebrahimistatic-test: $(TESTS)
253*ccdc9c3eSSadaf Ebrahimi	@./runtests $(TESTS)
254*ccdc9c3eSSadaf Ebrahimi
255*ccdc9c3eSSadaf Ebrahimishared-test: $(STESTS)
256*ccdc9c3eSSadaf Ebrahimi	@./runtests -shared-library-path obj/so $(STESTS)
257*ccdc9c3eSSadaf Ebrahimi
258*ccdc9c3eSSadaf Ebrahimidebug-bigtest: $(DTESTS) $(DBIGTESTS)
259*ccdc9c3eSSadaf Ebrahimi	@./runtests $(DTESTS) $(DBIGTESTS)
260*ccdc9c3eSSadaf Ebrahimi
261*ccdc9c3eSSadaf Ebrahimistatic-bigtest: $(TESTS) $(BIGTESTS)
262*ccdc9c3eSSadaf Ebrahimi	@./runtests $(TESTS) $(BIGTESTS)
263*ccdc9c3eSSadaf Ebrahimi
264*ccdc9c3eSSadaf Ebrahimishared-bigtest: $(STESTS) $(SBIGTESTS)
265*ccdc9c3eSSadaf Ebrahimi	@./runtests -shared-library-path obj/so $(STESTS) $(SBIGTESTS)
266*ccdc9c3eSSadaf Ebrahimi
267*ccdc9c3eSSadaf Ebrahimibenchmark: obj/test/regexp_benchmark
268*ccdc9c3eSSadaf Ebrahimi
269*ccdc9c3eSSadaf Ebrahimifuzz: obj/test/re2_fuzzer
270*ccdc9c3eSSadaf Ebrahimi
271*ccdc9c3eSSadaf Ebrahimiinstall: obj/libre2.a obj/so/libre2.$(SOEXT)
272*ccdc9c3eSSadaf Ebrahimi	mkdir -p $(DESTDIR)$(includedir)/re2 $(DESTDIR)$(libdir)/pkgconfig
273*ccdc9c3eSSadaf Ebrahimi	$(INSTALL_DATA) $(INSTALL_HFILES) $(DESTDIR)$(includedir)/re2
274*ccdc9c3eSSadaf Ebrahimi	$(INSTALL) obj/libre2.a $(DESTDIR)$(libdir)/libre2.a
275*ccdc9c3eSSadaf Ebrahimi	$(INSTALL) obj/so/libre2.$(SOEXT) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER00)
276*ccdc9c3eSSadaf Ebrahimi	ln -sf libre2.$(SOEXTVER00) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER)
277*ccdc9c3eSSadaf Ebrahimi	ln -sf libre2.$(SOEXTVER00) $(DESTDIR)$(libdir)/libre2.$(SOEXT)
278*ccdc9c3eSSadaf Ebrahimi	$(INSTALL_DATA) re2.pc $(DESTDIR)$(libdir)/pkgconfig/re2.pc
279*ccdc9c3eSSadaf Ebrahimi	$(SED_INPLACE) -e "s#@prefix@#${prefix}#" $(DESTDIR)$(libdir)/pkgconfig/re2.pc
280*ccdc9c3eSSadaf Ebrahimi	$(SED_INPLACE) -e "s#@exec_prefix@#${exec_prefix}#" $(DESTDIR)$(libdir)/pkgconfig/re2.pc
281*ccdc9c3eSSadaf Ebrahimi	$(SED_INPLACE) -e "s#@includedir@#${includedir}#" $(DESTDIR)$(libdir)/pkgconfig/re2.pc
282*ccdc9c3eSSadaf Ebrahimi	$(SED_INPLACE) -e "s#@libdir@#${libdir}#" $(DESTDIR)$(libdir)/pkgconfig/re2.pc
283*ccdc9c3eSSadaf Ebrahimi
284*ccdc9c3eSSadaf Ebrahimitestinstall: static-testinstall shared-testinstall
285*ccdc9c3eSSadaf Ebrahimi	@echo
286*ccdc9c3eSSadaf Ebrahimi	@echo Install tests passed.
287*ccdc9c3eSSadaf Ebrahimi	@echo
288*ccdc9c3eSSadaf Ebrahimi
289*ccdc9c3eSSadaf Ebrahimistatic-testinstall: CXXFLAGS:=-std=c++11 -pthread -I$(DESTDIR)$(includedir) $(CXXFLAGS)
290*ccdc9c3eSSadaf Ebrahimistatic-testinstall: LDFLAGS:=-pthread -L$(DESTDIR)$(libdir) -l:libre2.a $(LDICU) $(LDFLAGS)
291*ccdc9c3eSSadaf Ebrahimistatic-testinstall:
292*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj
293*ccdc9c3eSSadaf Ebrahimi	@cp testinstall.cc obj
294*ccdc9c3eSSadaf Ebrahimiifeq ($(shell uname),Darwin)
295*ccdc9c3eSSadaf Ebrahimi	@echo Skipping test for libre2.a on Darwin.
296*ccdc9c3eSSadaf Ebrahimielse ifeq ($(shell uname),SunOS)
297*ccdc9c3eSSadaf Ebrahimi	@echo Skipping test for libre2.a on SunOS.
298*ccdc9c3eSSadaf Ebrahimielse
299*ccdc9c3eSSadaf Ebrahimi	(cd obj && $(CXX) testinstall.cc -o testinstall $(CXXFLAGS) $(LDFLAGS))
300*ccdc9c3eSSadaf Ebrahimi	obj/testinstall
301*ccdc9c3eSSadaf Ebrahimiendif
302*ccdc9c3eSSadaf Ebrahimi
303*ccdc9c3eSSadaf Ebrahimishared-testinstall: CXXFLAGS:=-std=c++11 -pthread -I$(DESTDIR)$(includedir) $(CXXFLAGS)
304*ccdc9c3eSSadaf Ebrahimishared-testinstall: LDFLAGS:=-pthread -L$(DESTDIR)$(libdir) -lre2 $(LDICU) $(LDFLAGS)
305*ccdc9c3eSSadaf Ebrahimishared-testinstall:
306*ccdc9c3eSSadaf Ebrahimi	@mkdir -p obj
307*ccdc9c3eSSadaf Ebrahimi	@cp testinstall.cc obj
308*ccdc9c3eSSadaf Ebrahimi	(cd obj && $(CXX) testinstall.cc -o testinstall $(CXXFLAGS) $(LDFLAGS))
309*ccdc9c3eSSadaf Ebrahimiifeq ($(shell uname),Darwin)
310*ccdc9c3eSSadaf Ebrahimi	DYLD_LIBRARY_PATH="$(DESTDIR)$(libdir):$(DYLD_LIBRARY_PATH)" obj/testinstall
311*ccdc9c3eSSadaf Ebrahimielse
312*ccdc9c3eSSadaf Ebrahimi	LD_LIBRARY_PATH="$(DESTDIR)$(libdir):$(LD_LIBRARY_PATH)" obj/testinstall
313*ccdc9c3eSSadaf Ebrahimiendif
314*ccdc9c3eSSadaf Ebrahimi
315*ccdc9c3eSSadaf Ebrahimibenchlog: obj/test/regexp_benchmark
316*ccdc9c3eSSadaf Ebrahimi	(echo '==BENCHMARK==' `hostname` `date`; \
317*ccdc9c3eSSadaf Ebrahimi	  (uname -a; $(CXX) --version; git rev-parse --short HEAD; file obj/test/regexp_benchmark) | sed 's/^/# /'; \
318*ccdc9c3eSSadaf Ebrahimi	  echo; \
319*ccdc9c3eSSadaf Ebrahimi	  ./obj/test/regexp_benchmark 'PCRE|RE2') | tee -a benchlog.$$(hostname | sed 's/\..*//')
320*ccdc9c3eSSadaf Ebrahimi
321*ccdc9c3eSSadaf Ebrahimi# Keep gmake from deleting intermediate files it creates.
322*ccdc9c3eSSadaf Ebrahimi# This makes repeated builds faster and preserves debug info on OS X.
323*ccdc9c3eSSadaf Ebrahimi
324*ccdc9c3eSSadaf Ebrahimi.PRECIOUS: obj/%.o obj/dbg/%.o obj/so/%.o obj/libre2.a \
325*ccdc9c3eSSadaf Ebrahimi	obj/dbg/libre2.a obj/so/libre2.a \
326*ccdc9c3eSSadaf Ebrahimi	obj/test/% obj/so/test/% obj/dbg/test/%
327*ccdc9c3eSSadaf Ebrahimi
328*ccdc9c3eSSadaf Ebrahimilog:
329*ccdc9c3eSSadaf Ebrahimi	$(MAKE) clean
330*ccdc9c3eSSadaf Ebrahimi	$(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" \
331*ccdc9c3eSSadaf Ebrahimi		$(filter obj/test/exhaustive%_test,$(BIGTESTS))
332*ccdc9c3eSSadaf Ebrahimi	echo '#' RE2 exhaustive tests built by make log >re2-exhaustive.txt
333*ccdc9c3eSSadaf Ebrahimi	echo '#' $$(date) >>re2-exhaustive.txt
334*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive_test |grep -v '^PASS$$' >>re2-exhaustive.txt
335*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive1_test |grep -v '^PASS$$' >>re2-exhaustive.txt
336*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive2_test |grep -v '^PASS$$' >>re2-exhaustive.txt
337*ccdc9c3eSSadaf Ebrahimi	obj/test/exhaustive3_test |grep -v '^PASS$$' >>re2-exhaustive.txt
338*ccdc9c3eSSadaf Ebrahimi
339*ccdc9c3eSSadaf Ebrahimi	$(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" obj/test/search_test
340*ccdc9c3eSSadaf Ebrahimi	echo '#' RE2 basic search tests built by make $@ >re2-search.txt
341*ccdc9c3eSSadaf Ebrahimi	echo '#' $$(date) >>re2-search.txt
342*ccdc9c3eSSadaf Ebrahimi	obj/test/search_test |grep -v '^PASS$$' >>re2-search.txt
343*ccdc9c3eSSadaf Ebrahimi
344*ccdc9c3eSSadaf Ebrahimix: x.cc obj/libre2.a
345*ccdc9c3eSSadaf Ebrahimi	g++ -I. -o x x.cc obj/libre2.a
346