Annotation of embedaddon/libiconv/build-aux/install-reloc, revision 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>