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 -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 -d installation-dir [-b bin-dir] -i install-prog [-U] library" 19 20# process options 21 22while [ $# -gt 0 ]; do 23 case "$1" in 24 -O) shift; host_os="$1"; shift ;; 25 -d) shift; INSTALLDIR="$1"; shift ;; 26 -b) shift; BINDIR="$1" ; shift ;; 27 -i) shift; INSTALLPROG="$1" ; shift ;; 28 -D) echo=echo ; shift ;; 29 -U) uninstall=true ; shift ;; 30 -*) echo "$USAGE" >&2 ; exit 2;; 31 *) break ;; 32 esac 33done 34 35# set install target name 36LIBNAME="$1" 37 38if [ -z "$LIBNAME" ]; then 39 echo "$USAGE" >&2 40 exit 2 41fi 42 43OLDSUFF=old 44MV=mv 45RM="rm -f" 46LN="ln -s" 47 48# pre-install 49 50if [ -z "$uninstall" ]; then 51 ${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} 52 if [ -f "$INSTALLDIR/$LIBNAME" ]; then 53 ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} 54 fi 55fi 56 57# install/uninstall 58 59if [ -z "$uninstall" ] ; then 60 ${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME} 61else 62 ${echo} ${RM} ${INSTALLDIR}/${LIBNAME} 63fi 64 65# post-install/uninstall 66 67# HP-UX and Darwin/MacOS X require that a shared library have execute permission 68# Cygwin installs both a dll (which must go in $BINDIR) and an implicit 69# link library (in $libdir) 70case "$host_os" in 71hpux*|darwin*|macosx*) 72 if [ -z "$uninstall" ]; then 73 chmod 555 ${INSTALLDIR}/${LIBNAME} 74 fi ;; 75cygwin*) 76 IMPLIBNAME=`echo ${LIBNAME} \ 77 | sed -e 's,^cyg,lib,' -e 's,[0-9]*.dll$,.dll.a,'` 78 if [ -z "$uninstall" ]; then 79 ${echo} $RM ${BINDIR}/${LIBNAME}.${OLDSUFF} 80 if [ -f "$BINDIR/$LIBNAME" ]; then 81 ${echo} $MV $BINDIR/$LIBNAME $BINDIR/$LIBNAME.$OLDSUFF 82 fi 83 ${echo} $MV ${INSTALLDIR}/${LIBNAME} ${BINDIR}/${LIBNAME} 84 ${echo} chmod a+x ${BINDIR}/${LIBNAME} 85 ${echo} eval ${INSTALLPROG} ${LIBNAME}.a \ 86 ${INSTALLDIR}/${IMPLIBNAME} 87 else 88 ${echo} ${RM} ${BINDIR}/${LIBNAME} 89 ${echo} ${RM} ${INSTALLDIR}/${IMPLIBNAME} 90 fi ;; 91 92*) ;; 93esac 94 95case "$LIBNAME" in 96*.*.[0-9].[0-9]) # libname.so.M.N 97 LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M 98 LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]\.[0-9]:\1:'` # libname.so 99 ;; 100*.*.[0-9]) # libname.so.M 101 LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so 102 ;; 103*.[0-9]) # libname.M 104 LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname 105 ;; 106*.[0-9].[0-9].dylib) # libname.M.N.dylib 107 LINK2=`echo $LIBNAME | sed 's:\(.*\.[0-9]\)\.[0-9]:\1:'` # libname.M.dylib 108 LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]\.[0-9]:\1:'` # libname.dylib 109esac 110 111INSTALL_LINK1='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK1' 112INSTALL_LINK2='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK2' 113 114# 115# Create symlinks to the installed library. This section is incomplete. 116# 117case "$host_os" in 118*linux*) 119 # libname.so.M -> libname.so.M.N 120 ${echo} ${RM} ${INSTALLDIR}/$LINK2 121 if [ -z "$uninstall" ]; then 122 eval $INSTALL_LINK2 123 fi 124 125 # libname.so -> libname.so.M 126 ${echo} ${RM} ${INSTALLDIR}/$LINK1 127 if [ -z "$uninstall" ]; then 128 ${echo} cd $INSTALLDIR && ${echo} ${LN} $LINK2 $LINK1 129 fi 130 ;; 131 132bsdi4*|*gnu*|darwin*|macosx*|k*bsd*-gnu) 133 # libname.so.M -> libname.so.M.N 134 ${echo} ${RM} ${INSTALLDIR}/$LINK2 135 if [ -z "$uninstall" ]; then 136 eval $INSTALL_LINK2 137 fi 138 139 # libname.so -> libname.so.M.N 140 ${echo} ${RM} ${INSTALLDIR}/$LINK1 141 if [ -z "$uninstall" ]; then 142 eval $INSTALL_LINK1 143 fi 144 ;; 145 146solaris2*|aix4.[2-9]*|osf*|irix[56]*|sysv[45]*|dgux*) 147 # libname.so -> libname.so.M 148 ${echo} ${RM} ${INSTALLDIR}/$LINK1 149 if [ -z "$uninstall" ]; then 150 eval $INSTALL_LINK1 151 fi 152 ;; 153 154 155# FreeBSD 3.x and above can have either a.out or ELF shared libraries 156freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*) 157 if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then 158 # libname.so -> libname.so.M 159 ${echo} ${RM} ${INSTALLDIR}/$LINK1 160 if [ -z "$uninstall" ]; then 161 eval $INSTALL_LINK1 162 fi 163 else 164 # libname.so.M -> libname.so.M.N 165 ${echo} ${RM} ${INSTALLDIR}/$LINK2 166 if [ -z "$uninstall" ]; then 167 eval $INSTALL_LINK2 168 fi 169 170 # libname.so -> libname.so.M.N 171 ${echo} ${RM} ${INSTALLDIR}/$LINK1 172 if [ -z "$uninstall" ]; then 173 eval $INSTALL_LINK1 174 fi 175 fi 176 ;; 177 178hpux1*) 179 # libname.sl -> libname.M 180 ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl 181 if [ -z "$uninstall" ]; then 182 eval $INSTALL_LINK1 183 fi 184 ;; 185 186cygwin*) 187 # Links to .dlls don't work. Hence shobj-conf used DLLVERSION.dll 188 # instead of so.SHLIB_MAJOR.SHLIB_MINOR. The postinstall above 189 # took care of everything else. 190 ;; 191 192*) ;; 193esac 194 195exit 0 196