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>