added initial support for -exports option, Linux/OpenBSD only for now
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 16 Oct 2004 15:10:45 +0000 (15:10 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 16 Oct 2004 15:10:45 +0000 (15:10 +0000)
bin/mklib

index 2f6beff7c86543266a53b4f4b03001a786cd657c..7973be8f0cd5e4ba32f9139ef76372f476a49ad8 100755 (executable)
--- a/bin/mklib
+++ b/bin/mklib
@@ -21,6 +21,7 @@
 #   -arch ARCH    override using `uname` to determine architecture
 #   -archopt OPT  specify an extra achitecture-specific option OPT
 #   -noprefix     don't prefix library name with "lib" or any suffix
+#   -exports FILE only export the symbols listed in FILE
 #
 # The library name should just be "GL" or "GLU", etc.  The 'lib' prefix
 # will be added here if needed, as well as the ".so" or ".a" suffix,
@@ -48,6 +49,7 @@ INSTALLDIR="."
 ARCH="auto"
 ARCHOPT=""
 NOPREFIX=0
+EXPORTS=""
 
 
 #
@@ -68,6 +70,7 @@ do
        '-arch')      shift 1; ARCH=$1;;
        '-archopt')   shift 1; ARCHOPT=$1;;
        '-noprefix')  NOPREFIX=1;;
+       '-exports')   shift 1; EXPORTS=$1;;
        -*)           echo "mklib: Unknown option: " $1 ; exit 1;;
        *) break
     esac
@@ -104,6 +107,7 @@ if [  ]  ; then
     echo MINOR is $MINOR
     echo PATCH is $PATCH
     echo DEPS are $DEPS
+    echo "EXPORTS in" $EXPORTS
     echo "-----------------"
 fi
 
@@ -114,7 +118,7 @@ fi
 case $ARCH in
 
     'Linux' | 'OpenBSD')
-       # GCC-based environment
+       # we assume gcc
 
        # Set default compilers if env vars not set
        if [ "x$CXX" = "x" ] ; then
@@ -157,6 +161,18 @@ case $ARCH in
            else
                OPTS="-shared -Wl,-soname,${LIBNAME}.so.${MAJOR}"
            fi
+           if [ $EXPORTS ] ; then
+               #OPTS="${OPTS} -Xlinker --retain-symbols-file ${EXPORTS}"
+               # Make the 'exptmp' file for --version-script option
+               echo "VERSION_${MAJOR}.${MINOR} {" > exptmp
+               echo "global:" >> exptmp
+               sed 's/$/;/' ${EXPORTS} >> exptmp
+               echo "local:" >> exptmp
+               echo "*;" >> exptmp
+               echo "};" >> exptmp
+               OPTS="${OPTS} -Xlinker --version-script=exptmp"
+               # exptmp is removed below
+           fi
            if [ x${PATCH} = "x" ] ; then
                VERSION="${MAJOR}.${MINOR}"
            else
@@ -183,6 +199,7 @@ case $ARCH in
             ln -s ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so
             # finish up
             FINAL_LIBS="${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so"
+           rm -f exptmp
         fi
        ;;