1: #! /bin/sh
2: #
3: # shlib-install - install a shared library and do any necessary host-specific
4: # post-installation configuration (like ldconfig)
5: #
6: # usage: shlib-install [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library
7: #
8: # Chet Ramey
9: # chet@po.cwru.edu
10:
11: #
12: # defaults
13: #
14: INSTALLDIR=/usr/local/lib
15: LDCONFIG=ldconfig
16:
17: PROGNAME=`basename $0`
18: USAGE="$PROGNAME [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library"
19:
20: # process options - should use getopts
21:
22: while [ $# -gt 0 ]; do
23: case "$1" in
24: -O) shift; host_os="$1"; shift ;;
25: -V) shift; host_vendor="$1"; shift ;;
26: -d) shift; INSTALLDIR="$1"; shift ;;
27: -b) shift; BINDIR="$1" ; shift ;;
28: -i) shift; INSTALLPROG="$1" ; shift ;;
29: -D) echo=echo ; shift ;;
30: -U) uninstall=true ; shift ;;
31: -*) echo "$USAGE" >&2 ; exit 2;;
32: *) break ;;
33: esac
34: done
35:
36: # set install target name
37: LIBNAME="$1"
38:
39: if [ -z "$LIBNAME" ]; then
40: echo "$USAGE" >&2
41: exit 2
42: fi
43:
44: OLDSUFF=old
45: MV=mv
46: RM="rm -f"
47: LN="ln -s"
48:
49: # pre-install
50:
51: if [ -z "$uninstall" ]; then
52: ${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
53: if [ -f "$INSTALLDIR/$LIBNAME" ]; then
54: ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
55: fi
56: fi
57:
58: # install/uninstall
59:
60: if [ -z "$uninstall" ] ; then
61: ${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME}
62: else
63: ${echo} ${RM} ${INSTALLDIR}/${LIBNAME}
64: fi
65:
66: # post-install/uninstall
67:
68: # HP-UX and Darwin/MacOS X require that a shared library have execute permission
69: # Linux does, too, and ldd warns about it. Solaris doesn't seem to mind,
70: # but ldd still warns about it.
71: # Cygwin installs both a dll (which must go in $BINDIR) and an implicit
72: # link library (in $libdir)
73: case "$host_os" in
74: hpux*|darwin*|macosx*|linux*|solaris2*)
75: if [ -z "$uninstall" ]; then
76: chmod 755 ${INSTALLDIR}/${LIBNAME}
77: fi ;;
78: cygwin*|mingw*)
79: IMPLIBNAME=`echo ${LIBNAME} \
80: | sed -e 's,^cyg,lib,' -e 's,[0-9]*.dll$,.dll.a,'`
81: if [ -z "$uninstall" ]; then
82: ${echo} $RM ${BINDIR}/${LIBNAME}.${OLDSUFF}
83: if [ -f "$BINDIR/$LIBNAME" ]; then
84: ${echo} $MV $BINDIR/$LIBNAME $BINDIR/$LIBNAME.$OLDSUFF
85: fi
86: ${echo} $MV ${INSTALLDIR}/${LIBNAME} ${BINDIR}/${LIBNAME}
87: ${echo} chmod a+x ${BINDIR}/${LIBNAME}
88: ${echo} eval ${INSTALLPROG} ${LIBNAME}.a \
89: ${INSTALLDIR}/${IMPLIBNAME}
90: else
91: ${echo} ${RM} ${BINDIR}/${LIBNAME}
92: ${echo} ${RM} ${INSTALLDIR}/${IMPLIBNAME}
93: fi ;;
94:
95: *) ;;
96: esac
97:
98: case "$LIBNAME" in
99: *.*.[0-9].[0-9]) # libname.so.M.N
100: LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M
101: LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]\.[0-9]:\1:'` # libname.so
102: ;;
103: *.*.[0-9]) # libname.so.M
104: LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so
105: ;;
106: *.[0-9]) # libname.M
107: LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname
108: ;;
109: *.[0-9].[0-9].dylib) # libname.M.N.dylib
110: LINK2=`echo $LIBNAME | sed 's:\(.*\.[0-9]\)\.[0-9]:\1:'` # libname.M.dylib
111: LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]\.[0-9]:\1:'` # libname.dylib
112: esac
113:
114: INSTALL_LINK1='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK1'
115: INSTALL_LINK2='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK2'
116:
117: #
118: # Create symlinks to the installed library. This section is incomplete.
119: #
120: case "$host_os-$host_vendor" in
121: *linux*|freebsd*|dragonfly*)
122: # libname.so.M -> libname.so.M.N
123: ${echo} ${RM} ${INSTALLDIR}/$LINK2
124: if [ -z "$uninstall" ]; then
125: eval $INSTALL_LINK2
126: fi
127:
128: # libname.so -> libname.so.M
129: ${echo} ${RM} ${INSTALLDIR}/$LINK1
130: if [ -z "$uninstall" ]; then
131: ${echo} cd $INSTALLDIR && ${echo} ${LN} $LINK2 $LINK1
132: fi
133: ;;
134:
135: bsdi4*|*gnu*|darwin*|macosx*|netbsd*|mirbsd*)
136: # libname.so.M -> libname.so.M.N
137: ${echo} ${RM} ${INSTALLDIR}/$LINK2
138: if [ -z "$uninstall" ]; then
139: eval $INSTALL_LINK2
140: fi
141:
142: # libname.so -> libname.so.M.N
143: ${echo} ${RM} ${INSTALLDIR}/$LINK1
144: if [ -z "$uninstall" ]; then
145: eval $INSTALL_LINK1
146: fi
147: ;;
148:
149: solaris2*|aix4.[2-9]*|aix[5-9]*|osf*|irix[56]*|sysv[45]*|dgux*|interix*)
150: # libname.so -> libname.so.M
151: ${echo} ${RM} ${INSTALLDIR}/$LINK1
152: if [ -z "$uninstall" ]; then
153: eval $INSTALL_LINK1
154: fi
155: ;;
156:
157: hpux1*)
158: # libname.sl -> libname.M
159: ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl
160: if [ -z "$uninstall" ]; then
161: eval $INSTALL_LINK1
162: fi
163: ;;
164:
165: cygwin*|mingw*)
166: # Links to .dlls don't work. Hence shobj-conf used DLLVERSION.dll
167: # instead of so.SHLIB_MAJOR.SHLIB_MINOR. The postinstall above
168: # took care of everything else.
169: ;;
170:
171: *) ;;
172: esac
173:
174: exit 0
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>