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# 14INSTALLDIR=/usr/local/lib 15LDCONFIG=ldconfig 16 17PROGNAME=`basename $0` 18USAGE="$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 22while [ $# -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 34done 35 36# set install target name 37LIBNAME="$1" 38 39if [ -z "$LIBNAME" ]; then 40 echo "$USAGE" >&2 41 exit 2 42fi 43 44OLDSUFF=old 45MV=mv 46RM="rm -f" 47LN="ln -s" 48 49# pre-install 50 51if [ -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 56fi 57 58# install/uninstall 59 60if [ -z "$uninstall" ] ; then 61 ${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME} 62else 63 ${echo} ${RM} ${INSTALLDIR}/${LIBNAME} 64fi 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) 73case "$host_os" in 74hpux*|darwin*|macosx*|linux*|solaris2*) 75 if [ -z "$uninstall" ]; then 76 chmod 755 ${INSTALLDIR}/${LIBNAME} 77 fi ;; 78cygwin*|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*) ;; 96esac 97 98case "$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 112esac 113 114INSTALL_LINK1='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK1' 115INSTALL_LINK2='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK2' 116 117# 118# Create symlinks to the installed library. This section is incomplete. 119# 120case "$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 135bsdi4*|*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 149solaris2*|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 157hpux1*) 158 # libname.sl -> libname.M 159 ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl 160 if [ -z "$uninstall" ]; then 161 eval $INSTALL_LINK1 162 fi 163 ;; 164 165cygwin*|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*) ;; 172esac 173 174exit 0 175