build: add symbol versioning when we build with gnu ld
authorStefan Metzmacher <metze@samba.org>
Fri, 23 May 2008 09:52:31 +0000 (11:52 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 23 May 2008 15:19:57 +0000 (17:19 +0200)
There's --enable-symbol-versioning=no to disable it.

metze
(cherry picked from commit cb5492978b6b157f529806afb2f5fc6202888129)
(This used to be commit a739652d94300881479262648592223536fc8eec)

source3/Makefile.in
source3/configure.in
source3/exports/libsmbclient.version.syms [new file with mode: 0644]
source3/exports/libsmbsharemodes.version.syms [new file with mode: 0644]
source3/script/mksyms.awk
source3/script/mksyms.sh

index f5f11154eeb769b3011ae6a416e1a6c6698128a8..f9d0753bb68b6fc324a2254333e784cea6488031 100644 (file)
@@ -1613,8 +1613,8 @@ bin/ldbdel: $(BINARY_PREREQS) $(LDBDEL_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIB
 
 MKSYMS_SH = $(srcdir)/script/mksyms.sh
 
-$(LIBTALLOC_SYMS): $(LIBTALLOC_HEADERS)
-       @$(MKSYMS_SH) $(AWK) $@ $(LIBTALLOC_HEADERS)
+$(LIBTALLOC_SYMS): $(LIBTALLOC_HEADERS) $(builddir)/library-versions
+       @$(MKSYMS_SH) $(AWK) $(builddir)/library-versions $@ $(LIBTALLOC_HEADERS)
 
 $(LIBTALLOC_SHARED_TARGET): $(BINARY_PREREQS) $(LIBTALLOC_OBJ) $(LIBTALLOC_SYMS)
        @echo Linking shared library $@
@@ -1626,8 +1626,8 @@ $(LIBTALLOC_STATIC_TARGET): $(BINARY_PREREQS) $(LIBTALLOC_OBJ0)
        @echo Linking non-shared library $@
        @-$(AR) -rc $@ $(LIBTALLOC_OBJ0)
 
-$(LIBTDB_SYMS): $(LIBTDB_HEADERS)
-       @$(MKSYMS_SH) $(AWK) $@ $(LIBTDB_HEADERS)
+$(LIBTDB_SYMS): $(LIBTDB_HEADERS) $(builddir)/library-versions
+       @$(MKSYMS_SH) $(AWK) $(builddir)/library-versions $@ $(LIBTDB_HEADERS)
 
 $(LIBTDB_SHARED_TARGET): $(BINARY_PREREQS) $(LIBTDB_OBJ) $(LIBTDB_SYMS)
        @echo Linking shared library $@
@@ -1639,8 +1639,8 @@ $(LIBTDB_STATIC_TARGET): $(BINARY_PREREQS) $(LIBTDB_OBJ0)
        @echo Linking non-shared library $@
        @-$(AR) -rc $@ $(LIBTDB_OBJ0)
 
-$(LIBWBCLIENT_SYMS): $(LIBWBCLIENT_HEADERS)
-       @$(MKSYMS_SH) $(AWK) $@ $(LIBWBCLIENT_HEADERS)
+$(LIBWBCLIENT_SYMS): $(LIBWBCLIENT_HEADERS) $(builddir)/library-versions
+       @$(MKSYMS_SH) $(AWK) $(builddir)/library-versions $@ $(LIBWBCLIENT_HEADERS)
 
 $(LIBWBCLIENT_SHARED_TARGET): $(BINARY_PREREQS) $(LIBWBCLIENT_OBJ) $(LIBWBCLIENT_SYMS) @LIBTALLOC_SHARED@
        @echo Linking shared library $@
@@ -1662,8 +1662,8 @@ bin/libaddns.a: $(BINARY_PREREQS) $(LIBADDNS_OBJ)
        @echo Linking non-shared library $@
        @-$(AR) -rc $@ $(LIBADDNS_OBJ)
 
-$(LIBNETAPI_SYMS): $(LIBNETAPI_HEADERS)
-       @$(MKSYMS_SH) $(AWK) $@ $(LIBNETAPI_HEADERS)
+$(LIBNETAPI_SYMS): $(LIBNETAPI_HEADERS) $(builddir)/library-versions
+       @$(MKSYMS_SH) $(AWK) $(builddir)/library-versions $@ $(LIBNETAPI_HEADERS)
 
 $(LIBNETAPI_SHARED_TARGET): $(BINARY_PREREQS) $(LIBNETAPI_OBJ) $(LIBNETAPI_SYMS) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
        @echo Linking shared library $@
index 451de890352a3bb6396673505758137e7409a8cb..f077908e61b3505903912c4f71f0141f763516b3 100644 (file)
@@ -1505,6 +1505,23 @@ fi
 # Set defaults
 SYMSEXT="syms"
 AC_SUBST(SYMSEXT)
+use_symbol_versioning=no
+if test x"$ac_cv_gnu_ld_version_script" = x"yes"; then
+       use_symbol_versioning=yes
+fi
+AC_ARG_ENABLE(symbol-versioning,[
+       AS_HELP_STRING([--enable-symbol-versioning],
+               [Turn on symbol versioning support if available (default=auto)])
+])
+if test x"$enable_symbol_versioning" = x"no"; then
+       use_symbol_versioning=no
+fi
+
+AC_MSG_CHECKING([symbol versioning])
+if test "x$use_symbol_versioning" = x"yes"; then
+       SYMSEXT="version.syms"
+fi
+AC_MSG_RESULT($use_symbol_versioning)
 
 # Assume non-shared by default and override below
 BLDSHARED="false"
diff --git a/source3/exports/libsmbclient.version.syms b/source3/exports/libsmbclient.version.syms
new file mode 100644 (file)
index 0000000..6afdbcb
--- /dev/null
@@ -0,0 +1,8 @@
+#
+# we use no version symbols for libsmbclient
+# to be compatible with 3.0.x
+#
+{
+       global: smbc_*;
+       local: *;
+};
diff --git a/source3/exports/libsmbsharemodes.version.syms b/source3/exports/libsmbsharemodes.version.syms
new file mode 100644 (file)
index 0000000..cf3f033
--- /dev/null
@@ -0,0 +1,7 @@
+#
+# we use no version symbols for libsmbsharemodes
+# to be compatible with 3.0.x
+#
+{
+       global: *;
+};
index a30bea4d340ba7b8ad2d4e8d8c391a25be68d735..dfe51dba7f0f93e8301e287d3491e70758b892ef 100644 (file)
@@ -9,9 +9,6 @@
 BEGIN {
        inheader=0;
        current_file="";
-       print "#"
-       print "# This file is automatically generated with \"make symbols\". DO NOT EDIT "
-       print "#"
        print "{"
        print "\tglobal:"
 }
index 51d3fbd99925069bf9beead03f3a41c58881b2a6..673c77a3cfab58dcd59f1f6cd61c75010f7c48d6 100755 (executable)
@@ -15,26 +15,50 @@ LANG=C; export LANG
 LC_ALL=C; export LC_ALL
 LC_COLLATE=C; export LC_COLLATE
 
-if [ $# -lt 2 ]
+if [ $# -lt 3 ]
 then
-  echo "Usage: $0 awk output_file header_files"
+  echo "Usage: $0 awk versionfile output_file header_files"
   exit 1
 fi
 
 awk="$1"
 shift
 
+versionfile="$1"
+shift
+
 symsfile="$1"
 shift
 symsfile_tmp="$symsfile.$$.tmp~"
 
-proto_src="`echo $@ | tr ' ' '\n' | sort | uniq `"
+libname=`basename $symsfile | cut -d '.' -f1`
+verline=`grep $libname $versionfile`
+majver=`echo -n "$verline" | cut -d ':' -f2`
+minver=`echo -n "$verline" | cut -d ':' -f3`
+upname=`echo -n "$libname" | sed -e 's/^lib//' | tr '[a-z]' '[A-Z]'`
+symver="${upname}_${majver}.${minver}"
 
-echo creating $symsfile
+symsext=`basename $symsfile | cut -d '.' -f2-`
+
+if test x"$symsext" = x"version.syms"; then
+       echo "creating $symsfile for $symver"
+else
+       echo "creating $symsfile"
+       symver="# no symbol versioning"
+fi
+
+proto_src="`echo $@ | tr ' ' '\n' | sort | uniq `"
 
 mkdir -p `dirname $symsfile`
 
-${awk} -f `dirname $0`/mksyms.awk $proto_src > $symsfile_tmp
+cat > $symsfile_tmp <<_ACEOF
+#
+# This file is automatically generated with "$0". DO NOT EDIT
+#
+$symver
+_ACEOF
+
+${awk} -f `dirname $0`/mksyms.awk $proto_src >> $symsfile_tmp
 
 if cmp -s $symsfile $symsfile_tmp 2>/dev/null
 then