shlib-build: Fix usage message
[openafs.git] / src / config / shlib-build.in
1 #!/bin/sh
2 #
3 # Builds a shared library, incorporating the random portability work that we
4 # have to do.  Gets the basic information from Autoconf and knows how to find
5 # the appropriate system-specific map or version file and set library SONAMEs.
6 #
7 # This is not libtool.  If it appears to be in danger of evolving into
8 # libtool, please shoot it and start over, possibly by rewriting AFS in Ada.
9
10 # We take the following regular arguments: -d <srcdir>, -f <filename>, -l
11 # <library>, -M <major>, and -m <minor>.  If -f is given, it overrides -l and
12 # specifies the complete filename of the shared library to build.  We then
13 # expect a -- option indicating the end of our arguments and the rest of the
14 # arguments are passed along verbatim to the linker.
15
16 set -e
17
18 linker="@SHLIB_LINKER@"
19 suffix="@SHLIB_SUFFIX@"
20 sysname="@AFS_SYSNAME@"
21
22 library=
23 major=
24 minor=
25 unused=
26 srcdir=.
27 done=
28 while [ -z "$done" ] && [ $# -gt 0 ] ; do
29     case "$1" in
30     -d)
31         shift
32         srcdir="$1"
33         shift
34         ;;
35     -f)
36         shift
37         filename="$1"
38         shift
39         ;;
40     -l)
41         shift
42         library="$1"
43         shift
44         ;;
45     -M)
46         shift
47         major="$1"
48         shift
49         ;;
50     -m)
51         shift
52         minor="$1"
53         shift
54         ;;
55     -i)
56         ignore=yes
57         shift
58         ;;
59     --)
60         shift
61         done=yes
62         ;;
63     *)
64         echo 'Usage: shlib-build [-i] -l <lib> -M <major> -m <minor> -- ...' >&2
65         exit 1
66         ;;
67     esac
68 done
69 if [ -z "$library" ] ; then
70     echo 'Usage: shlib-build [-i] -l <lib> -M <major> -m <minor> -- ...' >&2
71     exit 1
72 fi
73
74 # Print out what we're doing while we do it for debugging.
75 export=
76 if [ -z "$filename" ] ; then
77     if [ -z "$major" ] ; then
78         filename="$library.$suffix"
79         soname=
80     else
81         filename="$library.$suffix.$major.$minor"
82         soname="$library.$suffix.$major"
83     fi
84 fi
85 case $sysname in
86 rs_aix*)
87     if [ -f "$srcdir/$library.map" ] ; then
88         cat $srcdir/$library.map | \
89         awk '/local:/ {inglobal=0};
90              inglobal { sub(/;/,""); print };
91              /global:/ { inglobal=1};' \
92         > $library.exp
93         export="-bE:$library.exp"
94     fi
95     echo "$linker $export -o $filename $*"
96     $linker $export -o "$filename" "$@"
97     ;;
98 sun*_5*)
99     if [ -f "$srcdir/$library.map" ] ; then
100         if [ -z "$ignore" ] ; then
101             export="-Wl,-M$srcdir/$library.map"
102         else
103             # add "= EXTERN" to every symbol, so we don't get errors about
104             # undefined symbols
105             cat "$srcdir/$library.map" | \
106                 sed -e 's/\([a-zA-Z_]\);$/\1 = EXTERN;/' > "$library.real.map"
107             export="-Wl,-M$library.real.map"
108         fi
109     fi
110     if [ -z "$soname" ] ; then
111         echo "$linker $export -o $filename $*"
112         $linker $export -o "$filename" "$@"
113     else
114         echo "$linker $export -h $soname -o $filename $*"
115         $linker $export -h "$soname" -o "$filename" "$@"
116     fi
117     ;;
118 *_linux*)
119     if [ -f "$srcdir/$library.map" ] ; then
120         export="-Wl,--version-script=$srcdir/$library.map"
121     fi
122     if [ -z "$soname" ] ; then
123         echo "$linker $export -o $filename $*"
124         $linker $export -o "$filename" "$@"
125     else
126         echo "$linker $export -Wl,-h,$soname -o $filename $*"
127         $linker $export -Wl,-h,"$soname" -o "$filename" "$@"
128     fi
129     ;;
130 hp_ux*)
131     if [ -f "$srcdir/$library.hp" ] ; then
132         export="-c $srcdir/$library.hp"
133     fi
134     echo "$linker $export -o $filename $*"
135     $linker $export -o "$filename" "$@"
136     ;;
137 *darwin*)
138     if [ -f "$srcdir/$library.map" ] ; then
139         # For 10.4 and later, the Mac exports list is a list of symbols,
140         # prefixed with an '_'
141         cat $srcdir/$library.map | \
142         awk '/local:/ {inglobal=0};
143              /^[\t ]+#/ {next};
144              inglobal { sub(/;/,""); sub(/[\t ]+/,"_"); print };
145              /global:/ { inglobal=1};' \
146         > $library.exp
147         export="-Wl,-exported_symbols_list,$library.exp"
148         if [ ! -z "$ignore" ] ; then
149             export="$export,-flat_namespace,-undefined,suppress"
150         fi
151     fi
152     echo "$linker $export -o $filename $*"
153     $linker $export -o "$filename" "$@"
154     ;;
155 *)
156     echo "$linker -o $filename $*"
157     $linker -o "$filename" "$@"
158     ;;
159 esac