File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / build-aux / libtool-reloc
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 3 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    1: #!/bin/sh
    2: # libtool-reloc - libtool wrapper with support for relocatable programs
    3: # Copyright (C) 2019 Free Software Foundation, Inc.
    4: # Written by Bruno Haible <bruno@clisp.org>, 2019.
    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 <https://www.gnu.org/licenses/>.
   18: 
   19: # Usage: libtool-reloc libtool LIBTOOL_ARGUMENTS
   20: 
   21: # Outputs a command and runs it.
   22: func_verbose ()
   23: {
   24:   # Make it easy to copy&paste the printed command into a shell in most cases,
   25:   # by escaping '\\', '"', and '$'. This is not perfect, just good enough.
   26:   echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g'
   27:   "$@"
   28: }
   29: 
   30: # Determine the mode from the arguments.
   31: mode=
   32: for arg
   33: do
   34:   case "$arg" in
   35:     --mode=link) mode=link ;;
   36:   esac
   37: done
   38: 
   39: if test "$mode" = link; then
   40:   # Determine the target from the arguments.
   41:   target=
   42:   next_is_target=false
   43:   for arg
   44:   do
   45:     if $next_is_target; then
   46:       target="$arg"
   47:       next_is_target=false
   48:     else
   49:       case "$arg" in
   50:         -o) next_is_target=true ;;
   51:         *) next_is_target=false ;;
   52:       esac
   53:     fi
   54:   done
   55:   case "$target" in
   56:     *.la)
   57:       # When creating a library:
   58:       # 1. Add a '-Wl,-rpath,@loader_path' option.
   59:       #    (A '-R @loader_path' option does not work: libtool produces
   60:       #    an error "error: only absolute run-paths are allowed".)
   61:       #    (Also note that 'install_name_tool -add_rpath @loader_path ...'
   62:       #    does not work on Mac OS X 10.5.)
   63:       #    This is done through the RELOCATABLE_LDFLAGS macro.
   64:       # 2. After creating the library, run
   65:       #    install_name_tool -id @rpath/$dlname $target_dir/.libs/$dlname
   66:       #    (This is easier than to modify the libtool script to emit a different
   67:       #    install_name. Also, an option '-Wl,-install_name,@rpath/$dlname' does
   68:       #    not work since libtool emits another option '-Wl,-install_name,...'
   69:       #    after it.
   70:       "$@" && {
   71:         dlname_assignment=`grep '^dlname=' "$target"`
   72:         dlname=
   73:         eval "$dlname_assignment"
   74:         # Nothing to do when --disable-shared was specified.
   75:         if test -n "$dlname"; then
   76:           target_dir=`dirname "$target"`
   77:           if test -f "$target_dir/.libs/$dlname"; then
   78:             func_verbose install_name_tool -id "@rpath/$dlname" "$target_dir/.libs/$dlname"
   79:           fi
   80:         fi
   81:       }
   82:       ;;
   83:     *)
   84:       "$@"
   85:       ;;
   86:   esac
   87: else
   88:   "$@"
   89: fi

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