File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / build-aux / install-reloc
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:57:49 2012 UTC (12 years, 4 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_13_1, HEAD
libiconv

    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>