Limit visible symbols in the shared library.
R=rsc
CC=re2-dev
http://codereview.appspot.com/674041
diff --git a/Makefile b/Makefile
index e3ccb40..8997293 100644
--- a/Makefile
+++ b/Makefile
@@ -23,9 +23,9 @@
# REBUILD_TABLES=1
ifeq ($(shell uname),Darwin)
-MAKE_SHARED_LIBRARY=g++ -dynamiclib $(LDFLAGS)
+MAKE_SHARED_LIBRARY=g++ -dynamiclib $(LDFLAGS) -exported_symbols_list libre2.symbols.darwin
else
-MAKE_SHARED_LIBRARY=g++ -shared -Wl,-soname,libre2.so.0 $(LDFLAGS)
+MAKE_SHARED_LIBRARY=g++ -shared -Wl,-soname,libre2.so.0,--version-script=libre2.symbols $(LDFLAGS)
endif
HFILES=\
@@ -143,15 +143,15 @@
obj/so/libre2.so: $(SOFILES)
@mkdir -p obj
$(MAKE_SHARED_LIBRARY) -o [email protected] $(SOFILES)
- ln -s libre2.so.0 $@
+ ln -sf libre2.so.0 $@
obj/test/%: obj/libre2.a obj/re2/testing/%.o $(TESTOFILES) obj/util/test.o
@mkdir -p obj/test
$(CC) -o $@ obj/re2/testing/$*.o $(TESTOFILES) obj/util/test.o obj/libre2.a $(LDFLAGS) $(LDPCRE)
-obj/so/test/%: obj/so/libre2.so obj/so/re2/testing/%.o $(STESTOFILES) obj/so/util/test.o
+obj/so/test/%: obj/so/libre2.so obj/libre2.a obj/so/re2/testing/%.o $(STESTOFILES) obj/so/util/test.o
@mkdir -p obj/so/test
- $(CC) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -Lobj/so -lre2 $(LDFLAGS) $(LDPCRE)
+ $(CC) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -Lobj/so -lre2 obj/libre2.a $(LDFLAGS) $(LDPCRE)
obj/test/regexp_benchmark: obj/libre2.a obj/re2/testing/regexp_benchmark.o $(TESTOFILES) obj/util/benchmark.o
@mkdir -p obj/test
@@ -191,8 +191,8 @@
install -m 444 re2/variadic_function.h /usr/local/include/re2/variadic_function.h
install -m 444 obj/libre2.a /usr/local/lib/libre2.a
install -m 444 obj/so/libre2.so /usr/local/lib/libre2.so.0.0.0
- ln -s libre2.so.0.0.0 /usr/local/lib/libre2.so.0
- ln -s libre2.so.0.0.0 /usr/local/lib/libre2.so
+ ln -sf libre2.so.0.0.0 /usr/local/lib/libre2.so.0
+ ln -sf libre2.so.0.0.0 /usr/local/lib/libre2.so
testinstall:
@mkdir -p obj
diff --git a/libre2.symbols b/libre2.symbols
new file mode 100644
index 0000000..86abd54
--- /dev/null
+++ b/libre2.symbols
@@ -0,0 +1,15 @@
+{
+ global:
+ extern "C++" {
+ re2::Mutex::*;
+ re2::Prog::*;
+ re2::RE2::*;
+ re2::Regexp::*;
+ re2::StringPiece::*;
+ "operator==(re2::StringPiece const&, re2::StringPiece const&)";
+ "operator<<(std::ostream&, re2::StringPiece const&)";
+ re2::VariadicFunction2::*;
+ };
+ local:
+ *;
+};
diff --git a/libre2.symbols.darwin b/libre2.symbols.darwin
new file mode 100644
index 0000000..fdd696c
--- /dev/null
+++ b/libre2.symbols.darwin
@@ -0,0 +1,11 @@
+re2::Mutex::*
+re2::Prog::*
+re2::RE2::*
+re2::Regexp::*
+re2::StringPiece::*
+re2::VariadicFunction2::*
+# Linker doesn't like these unmangled:
+# operator==(re2::StringPiece const&, re2::StringPiece const&)
+__ZeqRKN3re211StringPieceES2_
+# operator<<(std::ostream&, re2::StringPiece const&)
+__ZlsRSoRKN3re211StringPieceE