shlib-build: Add ignore option
authorSimon Wilkinson <sxw@your-file-system.com>
Fri, 29 Oct 2010 11:40:31 +0000 (12:40 +0100)
committerDerrick Brashear <shadow@dementia.org>
Fri, 29 Oct 2010 16:09:54 +0000 (09:09 -0700)
Add an option to shlib-build to ignore missing symbols in the map file.
This is already the default on some platforms, but others (such as
Darwin) require that all symbols in the mapfile be present in the
objects. This is a pain for libraries such as libroken, which will
have different symbols on different platforms.

Specifying -i adds the necessary magic to Darwin's ld to relax this
check. Changes may also be necessary for other platforms, but I
don't currently have those available for testing.

Change-Id: Ieaff8ed6dd4e16dfc420b90b85e4471952d83bd2
Reviewed-on: http://gerrit.openafs.org/3188
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/config/shlib-build.in

index e54742b..493ad11 100644 (file)
@@ -22,6 +22,7 @@ sysname="@AFS_SYSNAME@"
 library=
 major=
 minor=
+unused=
 srcdir=.
 done=
 while [ -z "$done" ] && [ $# -gt 0 ] ; do
@@ -51,18 +52,22 @@ while [ -z "$done" ] && [ $# -gt 0 ] ; do
         minor="$1"
         shift
         ;;
+    -i)
+       ignore=yes
+       shift
+       ;;
     --)
         shift
         done=yes
         ;;
     *)
-        echo 'Usage: shlib-build -l <lib> -M <major> -m <minor> -- ...' >&2
+        echo 'Usage: shlib-build [-i] -l <lib> -M <major> -m <minor> -- ...' >&2
         exit 1
         ;;
     esac
 done
 if [ -z "$library" ] ; then
-    echo 'Usage: shlib-install -l <lib> -M <major> -m <minor>' >&2
+    echo 'Usage: shlib-install [-i] -l <lib> -M <major> -m <minor>' >&2
     exit 1
 fi
 
@@ -132,6 +137,9 @@ hp_ux*)
             /global:/ { inglobal=1};' \
        > $library.exp
        export="-Wl,-exported_symbols_list,$library.exp"
+       if [ ! -z "$ignore" ] ; then
+           export="$export,-flat_namespace,-undefined,suppress"
+       fi
     fi
     echo "$linker $export -o $filename $*"
     $linker $export -o "$filename" "$@"