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

1.1       misho       1: #!/bin/sh
                      2: # install-reloc - install a program including a relocating wrapper
1.1.1.3 ! misho       3: # Copyright (C) 2003-2019 Free Software Foundation, Inc.
1.1       misho       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
1.1.1.3 ! misho      17: # along with this program.  If not, see <https://www.gnu.org/licenses/>.
1.1       misho      18: 
1.1.1.3 ! misho      19: # Usage 1:
        !            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
1.1       misho      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
1.1.1.3 ! misho      42: # Usage 2:
        !            43: #   env RELOC_LIBRARY_PATH_VAR=library_path_var \
        !            44: #       RELOC_LIBRARY_PATH_VALUE=library_path_value \
        !            45: #       RELOC_PREFIX=prefix \
        !            46: #       RELOC_DESTDIR=destdir \
        !            47: #       RELOC_COMPILE_COMMAND=compile_command \
        !            48: #       RELOC_SRCDIR=srcdir \
        !            49: #       RELOC_BUILDDIR=builddir \
        !            50: #       RELOC_CONFIG_H_DIR=config_h_dir \
        !            51: #       RELOC_EXEEXT=exeext \
        !            52: #       RELOC_STRIP_PROG=strip_command \
        !            53: #       RELOC_INSTALL_PROG=install_command... \
        !            54: #   install-reloc prog1 ... destprog
        !            55: #   where destprog is either the destination program name (when only one program
        !            56: #   is specified) or the destination directory for all programs.
1.1       misho      57: # install-reloc renames destprog to destprog.bin and installs a relocating
                     58: # wrapper in the place of destprog.
                     59: 
                     60: progname=$0
                     61: 
1.1.1.3 ! misho      62: if test $# -ge 12 && test "x$1" = "x--"; then
        !            63:   # Get fixed position arguments.
        !            64:   shift
        !            65:   library_path_var=$1
        !            66:   library_path_value=$2
        !            67:   prefix=$3
        !            68:   destdir=$4
        !            69:   shift
        !            70:   shift
        !            71:   shift
        !            72:   shift
        !            73:   compile_command=$1
        !            74:   srcdir=$2
        !            75:   builddir=$3
        !            76:   config_h_dir=$4
        !            77:   exeext=$5
        !            78:   shift
        !            79:   shift
        !            80:   shift
        !            81:   shift
        !            82:   shift
        !            83:   strip_prog=$1
        !            84:   shift
        !            85:   install_prog=$1 # maybe not including the "-c" option
        !            86:   shift
1.1       misho      87: else
1.1.1.3 ! misho      88:   if test $# -ge 2; then
        !            89:     # Get arguments from environment variables.
        !            90:     library_path_var=$RELOC_LIBRARY_PATH_VAR
        !            91:     library_path_value=$RELOC_LIBRARY_PATH_VALUE
        !            92:     prefix=$RELOC_PREFIX
        !            93:     destdir=$RELOC_DESTDIR
        !            94:     compile_command=$RELOC_COMPILE_COMMAND
        !            95:     srcdir=$RELOC_SRCDIR
        !            96:     builddir=$RELOC_BUILDDIR
        !            97:     config_h_dir=$RELOC_CONFIG_H_DIR
        !            98:     exeext=$RELOC_EXEEXT
        !            99:     strip_prog=$RELOC_STRIP_PROG
        !           100:     install_prog=$RELOC_INSTALL_PROG # including the "-c" option
1.1       misho     101:   else
1.1.1.3 ! misho     102:     echo "Usage: $0 -- library_path_var library_path_value prefix destdir" \
1.1       misho     103:          "compile_command srcdir builddir config_h_dir exeext" \
                    104:          "strip_command" \
                    105:          "install_command... destprog" 1>&2
                    106:     exit 1
                    107:   fi
                    108: fi
                    109: 
                    110: # Get destprog, last argument.
                    111: destprog=
                    112: for arg
                    113: do
                    114:   destprog=$arg
                    115: done
1.1.1.3 ! misho     116: # Determine whether destprog is a program name or a directory name.
        !           117: if test -d "$destprog"; then
        !           118:   sed_remove_trailing_slashes='s|//*$||'
        !           119:   destprog_directory=`echo "$destprog" | sed -e "$sed_remove_trailing_slashes"`
        !           120:   if test -z "$destprog_directory"; then
        !           121:     destprog_directory='/'
        !           122:   fi
        !           123: else
        !           124:   destprog_directory=
        !           125: fi
        !           126: # Prepare for remove trailing $exeext, if present.
1.1       misho     127: if test -n "$exeext"; then
                    128:   sed_quote='s,\.,\\.,g'
                    129:   sed_remove_exeext='s|'`echo "$exeext" | sed -e "$sed_quote"`'$||'
1.1.1.3 ! misho     130: fi
        !           131: if test -z "$destprog_directory"; then
        !           132:   # Remove trailing $exeext, if present.
        !           133:   if test -n "$exeext"; then
        !           134:     destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
        !           135:   fi
1.1       misho     136: fi
                    137: 
                    138: # Outputs a command and runs it.
                    139: func_verbose ()
                    140: {
1.1.1.3 ! misho     141:   # Make it easy to copy&paste the printed command into a shell in most cases,
        !           142:   # by escaping '\\', '"', and '$'. This is not perfect, just good enough.
        !           143:   echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g'
1.1       misho     144:   "$@"
                    145: }
                    146: 
                    147: # Run install_command.
                    148: func_verbose $install_prog "$@" || exit $?
                    149: 
1.1.1.3 ! misho     150: # Iterate over all destination program names.
        !           151: # func_iterate f
        !           152: # applies f to each destination program names, after setting destprog.
        !           153: sed_basename_of_file='s|^.*/||'
        !           154: func_iterate ()
        !           155: {
        !           156:   if test -n "$destprog_directory"; then
        !           157:     prev_arg=
        !           158:     for arg
        !           159:     do
        !           160:       if test -n "prev_arg"; then
        !           161:         destprog="$destprog_directory"/`echo "$prev_arg" | sed -e "$sed_basename_of_file"`
        !           162:         $1
        !           163:       fi
        !           164:       prev_arg="$arg"
        !           165:     done
        !           166:   else
        !           167:     $1
        !           168:   fi
        !           169: }
        !           170: 
1.1       misho     171: # Run strip_command.
1.1.1.3 ! misho     172: func_strip ()
        !           173: {
        !           174:   # Remove trailing $exeext, if present.
        !           175:   if test -n "$exeext"; then
        !           176:     destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
        !           177:   fi
        !           178:   func_verbose "$strip_prog" "$destprog$exeext" || exit $?
        !           179: }
        !           180: if test "$strip_prog" != ':'; then
        !           181:   func_iterate func_strip
        !           182: fi
1.1       misho     183: 
                    184: # If the platform doesn't support LD_LIBRARY_PATH or similar, we cannot build
                    185: # a wrapper.
                    186: test -n "$library_path_var" || exit 0
                    187: 
                    188: libdirs=
                    189: save_IFS="$IFS"; IFS=":"
                    190: for dir in $library_path_value; do
                    191:   IFS="$save_IFS"
                    192:   if test -n "$dir"; then
                    193:     case "$libdirs" in
                    194:       *"\"$dir\""*) ;; # remove duplicate
                    195:       *) libdirs="$libdirs\"$dir\"," ;;
                    196:     esac
                    197:   fi
                    198: done
                    199: IFS="$save_IFS"
                    200: # If there are no library directories to add at runtime, we don't need a
                    201: # wrapper.
                    202: test -n "$libdirs" || exit 0
                    203: 
                    204: # Determine installdir from destprog, removing a leading destdir if present.
1.1.1.3 ! misho     205: if test -n "$destprog_directory"; then
        !           206:   installdir="$destprog_directory"
        !           207: else
        !           208:   installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'`
        !           209: fi
1.1       misho     210: if test -n "$destdir"; then
                    211:   sed_quote='s,\([|.\*^$[]\),\\\1,g'
                    212:   sed_remove_destdir='s|^'`echo "$destdir" | sed -e "$sed_quote"`'||'
                    213:   installdir=`echo "$installdir" | sed -e "$sed_remove_destdir"`
                    214: fi
                    215: 
1.1.1.3 ! misho     216: # Compile and install wrapper.
        !           217: func_create_wrapper ()
        !           218: {
        !           219:   # Remove trailing $exeext, if present.
        !           220:   if test -n "$exeext"; then
        !           221:     destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
        !           222:   fi
        !           223: 
        !           224:   # Compile wrapper.
        !           225:   func_verbose $compile_command \
        !           226:                -I"$builddir" -I"$srcdir" -I"$config_h_dir" \
        !           227:                -DHAVE_CONFIG_H -DIN_RELOCWRAPPER -DNO_XMALLOC \
        !           228:                -D"INSTALLPREFIX=\"$prefix\"" -D"INSTALLDIR=\"$installdir\"" \
        !           229:                -D"LIBPATHVAR=\"$library_path_var\"" -D"LIBDIRS=$libdirs" \
        !           230:                -D"EXEEXT=\"$exeext\"" \
        !           231:                "$srcdir"/relocwrapper.c \
        !           232:                "$srcdir"/progname.c \
        !           233:                "$srcdir"/progreloc.c \
        !           234:                "$srcdir"/areadlink.c \
        !           235:                "$srcdir"/careadlinkat.c \
        !           236:                "$srcdir"/allocator.c \
        !           237:                "$srcdir"/readlink.c \
        !           238:                "$srcdir"/stat.c \
        !           239:                "$srcdir"/canonicalize-lgpl.c \
        !           240:                "$srcdir"/malloca.c \
        !           241:                "$srcdir"/lstat.c \
        !           242:                "$srcdir"/relocatable.c \
        !           243:                "$srcdir"/setenv.c \
        !           244:                "$srcdir"/c-ctype.c \
        !           245:                -o "$destprog.wrapper$exeext"
        !           246:   rc=$?
        !           247:   # Clean up object files left over in the current directory by the native C
        !           248:   # compilers on Solaris, HP-UX, OSF/1, IRIX.
        !           249:   rm -f relocwrapper.o \
        !           250:         progname.o \
        !           251:         progreloc.o \
        !           252:         areadlink.o \
        !           253:         careadlinkat.o \
        !           254:         allocator.o \
        !           255:         readlink.o \
        !           256:         stat.o \
        !           257:         canonicalize-lgpl.o \
        !           258:         malloca.o \
        !           259:         lstat.o \
        !           260:         relocatable.o \
        !           261:         setenv.o \
        !           262:         c-ctype.o
        !           263:   test $rc = 0 || exit $?
        !           264:   # Clean up debugging information left over by the native C compiler on MacOS X.
        !           265:   rm -rf "$destprog.wrapper$exeext.dSYM"
        !           266:   test $rc = 0 || exit $?
        !           267: 
        !           268:   # Strip wrapper.
        !           269:   test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog.wrapper$exeext" || exit $?
        !           270: 
        !           271:   # Rename $destprog.wrapper -> $destprog -> $destprog.bin.
        !           272:   ln -f "$destprog$exeext" "$destprog.bin$exeext" \
        !           273:     || { rm -f "$destprog.bin$exeext" \
        !           274:          && cp -p "$destprog$exeext" "$destprog.bin$exeext"; } \
        !           275:     || exit 1
        !           276:   mv "$destprog.wrapper$exeext" "$destprog$exeext" || exit 1
        !           277: }
        !           278: func_iterate func_create_wrapper
1.1       misho     279: 
                    280: exit 0

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