]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - install-sh
Drop old private APIs that are no longer used/supported.
[thirdparty/cups.git] / install-sh
index 398a88e1421823561abbf2d48ca8f263babc04d9..41d944e3e29fe1714597850a849243af067b3a91 100755 (executable)
@@ -1,8 +1,19 @@
 #!/bin/sh
 #
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
+# "$Id$"
 #
+# Install a program, script, or datafile.
+#
+# Copyright 2008-2012 by Apple Inc.
+#
+# This script is not compatible with BSD (or any other) install program, as it
+# allows owner and group changes to fail with a warning and makes sure that the
+# destination directory permissions are as specified - BSD install and the
+# original X11 install script did not change permissions of existing
+# directories.  It also does not support the transform options since CUPS does
+# not use them...
+#
+# Original script from X11R5 (mit/util/scripts/install.sh)
 # Copyright 1991 by the Massachusetts Institute of Technology
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # Calling this script install-sh is preferred over install.sh, to prevent
 # `make' implicit rules from creating a file called install from it
 # when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
 
 # set DOITPROG to echo to test this script
-
 # Don't use :- since 4.3BSD and earlier shells don't like it.
 doit="${DOITPROG-}"
 
+# Force umask to 022...
+umask 022
 
 # put in absolute paths if you don't have them in your path; or use env. vars.
-
 mvprog="${MVPROG-mv}"
 cpprog="${CPPROG-cp}"
 chmodprog="${CHMODPROG-chmod}"
@@ -40,6 +46,7 @@ chgrpprog="${CHGRPPROG-chgrp}"
 stripprog="${STRIPPROG-strip}"
 rmprog="${RMPROG-rm}"
 mkdirprog="${MKDIRPROG-mkdir}"
+gzipprog="${GZIPPROG-gzip}"
 
 transformbasename=""
 transform_arg=""
@@ -54,198 +61,174 @@ src=""
 dst=""
 dir_arg=""
 
+gzipcp() {
+       # gzipcp from to
+       $gzipprog -9 <"$1" >"$2"
+}
+
 while [ x"$1" != x ]; do
-    case $1 in
-       -c) instcmd="$cpprog"
-           shift
-           continue;;
-
-       -d) dir_arg=true
-           shift
-           continue;;
-
-       -m) chmodcmd="$chmodprog $2"
-           shift
-           shift
-           continue;;
-
-       -o) chowncmd="$chownprog $2"
-           shift
-           shift
-           continue;;
-
-       -g) chgrpcmd="$chgrpprog $2"
-           shift
-           shift
-           continue;;
-
-       -s) stripcmd="$stripprog"
-           shift
-           continue;;
-
-       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
-           shift
-           continue;;
-
-       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-           shift
-           continue;;
-
-       *)  if [ x"$src" = x ]
-           then
-               src=$1
-           else
-               # this colon is to work around a 386BSD /bin/sh bug
-               :
-               dst=$1
-           fi
-           shift
-           continue;;
-    esac
+       case $1 in
+               -c)
+               instcmd="$cpprog"
+               shift
+               continue
+               ;;
+
+               -d)
+               dir_arg=true
+               shift
+               continue
+               ;;
+
+               -m)
+               chmodcmd="$chmodprog $2"
+               shift
+               shift
+               continue
+               ;;
+
+               -o)
+               chowncmd="$chownprog $2"
+               shift
+               shift
+               continue
+               ;;
+
+               -g)
+               chgrpcmd="$chgrpprog $2"
+               shift
+               shift
+               continue
+               ;;
+
+               -s)
+               stripcmd="$stripprog"
+               shift
+               continue
+               ;;
+
+               -z)
+               instcmd="gzipcp"
+               shift
+               continue
+               ;;
+
+               *)
+               if [ x"$src" = x ]; then
+                       src="$1"
+               else
+                       dst="$1"
+               fi
+               shift
+               continue
+               ;;
+       esac
 done
 
-if [ x"$src" = x ]
-then
-       echo "install:  no input file specified"
+if [ x"$src" = x ]; then
+       echo "install-sh: No input file specified"
        exit 1
-else
-       :
 fi
 
 if [ x"$dir_arg" != x ]; then
-       dst=$src
+       dst="$src"
        src=""
-       
-       if [ -d $dst ]; then
+
+       if [ -d "$dst" ]; then
                instcmd=:
-               chmodcmd=""
        else
                instcmd=$mkdirprog
        fi
 else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-       if [ -f $src -o -d $src ]
-       then
-               :
-       else
-               echo "install:  $src does not exist"
+       # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+       # might cause directories to be created, which would be especially bad
+       # if $src (and thus $dsttmp) contains '*'.
+       if [ ! -f "$src" -a ! -d "$src" ]; then
+               echo "install: $src does not exist"
                exit 1
        fi
-       
-       if [ x"$dst" = x ]
-       then
-               echo "install:  no destination specified"
+
+       if [ x"$dst" = x ]; then
+               echo "install: No destination specified"
                exit 1
-       else
-               :
        fi
 
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-       if [ -d $dst ]
-       then
-               dst="$dst"/`basename $src`
-       else
-               :
+       # If destination is a directory, append the input filename.
+       if [ -d "$dst" ]; then
+               dst="$dst/`basename $src`"
        fi
 fi
 
 ## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+dstdir="`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`"
 
 # Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
+# This part is taken from Noah Friedman's mkinstalldirs script
 
 # Skip lots of stat calls in the usual case.
 if [ ! -d "$dstdir" ]; then
-defaultIFS='
+       defaultIFS='
        '
-IFS="${IFS-${defaultIFS}}"
+       IFS="${IFS-${defaultIFS}}"
 
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
+       oIFS="${IFS}"
+       # Some sh's can't handle IFS=/ for some reason.
+       IFS='%'
+       set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+       IFS="${oIFS}"
 
-pathcomp=''
+       pathcomp=''
 
-while [ $# -ne 0 ] ; do
-       pathcomp="${pathcomp}${1}"
-       shift
+       while [ $# -ne 0 ] ; do
+               pathcomp="${pathcomp}${1}"
+               shift
 
-       if [ ! -d "${pathcomp}" ] ;
-        then
-               $mkdirprog "${pathcomp}"
-       else
-               :
-       fi
+               if [ ! -d "${pathcomp}" ]; then $doit $mkdirprog "${pathcomp}"; fi
 
-       pathcomp="${pathcomp}/"
-done
+               pathcomp="${pathcomp}/"
+       done
 fi
 
-if [ x"$dir_arg" != x ]
-then
-       $doit $instcmd $dst &&
+if [ x"$dir_arg" != x ]; then
+       # Make a directory...
+       $doit $instcmd $dst || exit 1
 
-       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
-       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
-       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
-       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
+       # Allow chown/chgrp to fail, but log a warning
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst || echo "warning: Unable to change owner of $dst!"; fi
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst || echo "warning: Unable to change group of $dst!"; fi
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst || exit 1; fi
 else
-
-# If we're going to rename the final executable, determine the name now.
-
-       if [ x"$transformarg" = x ] 
-       then
-               dstfile=`basename $dst`
-       else
-               dstfile=`basename $dst $transformbasename | 
-                       sed $transformarg`$transformbasename
-       fi
-
-# don't allow the sed command to completely eliminate the filename
-
-       if [ x"$dstfile" = x ] 
-       then
-               dstfile=`basename $dst`
-       else
-               :
-       fi
-
-# Make a temp file name in the proper directory.
-
-       dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-       $doit $instcmd $src $dsttmp &&
+       # Install a file...
+       dstfile="`basename $dst`"
+
+       # Check the destination file - for libraries just use the "-x" option
+       # to strip...
+       case "$dstfile" in
+               *.a | *.dylib | *.sl | *.sl.* | *.so | *.so.*)
+                       stripopt="-x"
+                       ;;
+               *)
+                       stripopt=""
+                       ;;
+       esac
+
+       # Make a temp file name in the proper directory.
+       dsttmp="$dstdir/#inst.$$#"
+
+       # Move or copy the file name to the temp name
+       $doit $instcmd $src $dsttmp || exit 1
+
+       # Update permissions and strip as needed, then move to the final name.
+       # If the chmod, strip, rm, or mv commands fail, remove the installed
+       # file...
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripopt "$dsttmp" || echo "warning: Unable to strip $dst!"; fi
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp" || echo "warning: Unable to change owner of $dst!"; fi
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp" || echo "warning: Unable to change group of $dst!"; fi
 
        trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
-       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
-       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
-       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
-
-# Now rename the file to the real destination.
-
-       $doit $rmcmd -f $dstdir/$dstfile &&
-       $doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; fi &&
+       $doit $rmcmd -f "$dstdir/$dstfile" &&
+       $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+fi
 
 exit 0