Annotation of embedaddon/libiconv/build-aux/install-reloc, revision 1.1.1.1

1.1       misho       1: #!/bin/sh
                      2: # install-reloc - install a program including a relocating wrapper
                      3: # Copyright (C) 2003, 2005-2007, 2009 Free Software Foundation, Inc.
                      4: # Written by Bruno Haible <bruno@clisp.org>, 2003.
                      5: #
                      6: # This program is free software: you can redistribute it and/or modify
                      7: # it under the terms of the GNU General Public License as published by
                      8: # the Free Software Foundation; either version 3 of the License, or
                      9: # (at your option) any later version.
                     10: #
                     11: # This program is distributed in the hope that it will be useful,
                     12: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14: # GNU General Public License for more details.
                     15: #
                     16: # You should have received a copy of the GNU General Public License
                     17: # along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     18: 
                     19: # Usage:
                     20: #   install-reloc library_path_var library_path_value prefix destdir \
                     21: #                 compile_command srcdir builddir config_h_dir exeext \
                     22: #                 strip_command \
                     23: #                 install_command... destprog
                     24: # where
                     25: #   - library_path_var is the platform dependent runtime library path variable
                     26: #   - library_path_value is a colon separated list of directories that contain
                     27: #     the libraries at installation time (use this instead of -rpath)
                     28: #   - prefix is the base directory at installation time
                     29: #   - destdir is a string that is prepended to all file names at installation
                     30: #     time; it is already prepended to destprog but not to library_path_value
                     31: #     and prefix
                     32: #   - compile_command is a C compiler compilation and linking command
                     33: #   - srcdir is the directory where to find relocwrapper.c and its dependencies
                     34: #   - builddir is the directory where to find built dependencies (namely,
                     35: #     alloca.h and stdbool.h)
                     36: #   - config_h_dir is the directory where to find config.h
                     37: #   - exeext is platform dependent suffix of executables
                     38: #   - strip_command is the command for stripping executables, or : if no
                     39: #     stripping is desired
                     40: #   - install_command is the install command line, excluding the final destprog
                     41: #   - destprog is the destination program name
                     42: # install-reloc renames destprog to destprog.bin and installs a relocating
                     43: # wrapper in the place of destprog.
                     44: 
                     45: progname=$0
                     46: 
                     47: if test $# -eq 2; then
                     48:   # Get arguments from environment variables.
                     49:   library_path_var=$RELOC_LIBRARY_PATH_VAR
                     50:   library_path_value=$RELOC_LIBRARY_PATH_VALUE
                     51:   prefix=$RELOC_PREFIX
                     52:   destdir=$RELOC_DESTDIR
                     53:   compile_command=$RELOC_COMPILE_COMMAND
                     54:   srcdir=$RELOC_SRCDIR
                     55:   builddir=$RELOC_BUILDDIR
                     56:   config_h_dir=$RELOC_CONFIG_H_DIR
                     57:   exeext=$RELOC_EXEEXT
                     58:   strip_prog=$RELOC_STRIP_PROG
                     59:   install_prog=$RELOC_INSTALL_PROG # including the "-c" option
                     60: else
                     61:   if test $# -ge 11; then
                     62:     # Get fixed position arguments.
                     63:     library_path_var=$1
                     64:     library_path_value=$2
                     65:     prefix=$3
                     66:     destdir=$4
                     67:     shift
                     68:     shift
                     69:     shift
                     70:     shift
                     71:     compile_command=$1
                     72:     srcdir=$2
                     73:     builddir=$3
                     74:     config_h_dir=$4
                     75:     exeext=$5
                     76:     shift
                     77:     shift
                     78:     shift
                     79:     shift
                     80:     shift
                     81:     strip_prog=$1
                     82:     shift
                     83:     install_prog=$1 # maybe not including the "-c" option
                     84:     shift
                     85:   else
                     86:     echo "Usage: $0 library_path_var library_path_value prefix destdir" \
                     87:          "compile_command srcdir builddir config_h_dir exeext" \
                     88:          "strip_command" \
                     89:          "install_command... destprog" 1>&2
                     90:     exit 1
                     91:   fi
                     92: fi
                     93: 
                     94: # Get destprog, last argument.
                     95: destprog=
                     96: for arg
                     97: do
                     98:   destprog=$arg
                     99: done
                    100: # Remove trailing $exeext, if present.
                    101: if test -n "$exeext"; then
                    102:   sed_quote='s,\.,\\.,g'
                    103:   sed_remove_exeext='s|'`echo "$exeext" | sed -e "$sed_quote"`'$||'
                    104:   destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
                    105: fi
                    106: 
                    107: # Outputs a command and runs it.
                    108: func_verbose ()
                    109: {
                    110:   echo "$@"
                    111:   "$@"
                    112: }
                    113: 
                    114: # Run install_command.
                    115: func_verbose $install_prog "$@" || exit $?
                    116: 
                    117: # Run strip_command.
                    118: test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog$exeext" || exit $?
                    119: 
                    120: # If the platform doesn't support LD_LIBRARY_PATH or similar, we cannot build
                    121: # a wrapper.
                    122: test -n "$library_path_var" || exit 0
                    123: 
                    124: libdirs=
                    125: save_IFS="$IFS"; IFS=":"
                    126: for dir in $library_path_value; do
                    127:   IFS="$save_IFS"
                    128:   if test -n "$dir"; then
                    129:     case "$libdirs" in
                    130:       *"\"$dir\""*) ;; # remove duplicate
                    131:       *) libdirs="$libdirs\"$dir\"," ;;
                    132:     esac
                    133:   fi
                    134: done
                    135: IFS="$save_IFS"
                    136: # If there are no library directories to add at runtime, we don't need a
                    137: # wrapper.
                    138: test -n "$libdirs" || exit 0
                    139: 
                    140: # Determine installdir from destprog, removing a leading destdir if present.
                    141: installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'`
                    142: if test -n "$destdir"; then
                    143:   sed_quote='s,\([|.\*^$[]\),\\\1,g'
                    144:   sed_remove_destdir='s|^'`echo "$destdir" | sed -e "$sed_quote"`'||'
                    145:   installdir=`echo "$installdir" | sed -e "$sed_remove_destdir"`
                    146: fi
                    147: 
                    148: # Compile wrapper.
                    149: func_verbose $compile_command \
                    150:              -I"$builddir" -I"$srcdir" -I"$config_h_dir" \
                    151:              -DHAVE_CONFIG_H -DIN_RELOCWRAPPER -DNO_XMALLOC \
                    152:              -D"INSTALLPREFIX=\"$prefix\"" -D"INSTALLDIR=\"$installdir\"" \
                    153:              -D"LIBPATHVAR=\"$library_path_var\"" -D"LIBDIRS=$libdirs" \
                    154:              -D"EXEEXT=\"$exeext\"" \
                    155:              "$srcdir"/relocwrapper.c \
                    156:              "$srcdir"/progname.c \
                    157:              "$srcdir"/progreloc.c \
                    158:              "$srcdir"/areadlink.c \
                    159:              "$srcdir"/readlink.c \
                    160:              "$srcdir"/canonicalize-lgpl.c \
                    161:              "$srcdir"/malloca.c \
                    162:              "$srcdir"/relocatable.c \
                    163:              "$srcdir"/setenv.c \
                    164:              "$srcdir"/strerror.c \
                    165:              "$srcdir"/c-ctype.c \
                    166:              -o "$destprog.wrapper$exeext"
                    167: rc=$?
                    168: # Clean up object files left over in the current directory by the native C
                    169: # compilers on Solaris, HP-UX, OSF/1, IRIX.
                    170: rm -f relocwrapper.o \
                    171:       progname.o \
                    172:       progreloc.o \
                    173:       xreadlink.o \
                    174:       areadlink.o \
                    175:       canonicalize-lgpl.o \
                    176:       malloca.o \
                    177:       relocatable.o \
                    178:       setenv.o \
                    179:       strerror.o \
                    180:       c-ctype.o
                    181: test $rc = 0 || exit $?
                    182: # Clean up debugging information left over by the native C compiler on MacOS X.
                    183: rm -rf "$destprog.wrapper$exeext.dSYM"
                    184: test $rc = 0 || exit $?
                    185: 
                    186: # Strip wrapper.
                    187: test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog.wrapper$exeext" || exit $?
                    188: 
                    189: # Rename $destprog.wrapper -> $destprog -> $destprog.bin.
                    190: ln -f "$destprog$exeext" "$destprog.bin$exeext" \
                    191:   || { rm -f "$destprog.bin$exeext" \
                    192:        && cp -p "$destprog$exeext" "$destprog.bin$exeext"; } \
                    193:   || exit 1
                    194: mv "$destprog.wrapper$exeext" "$destprog$exeext" || exit 1
                    195: 
                    196: exit 0

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>