mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
76 lines
2.4 KiB
Bash
Executable File
76 lines
2.4 KiB
Bash
Executable File
#!/bin/bash -
|
|
# Copyright (C) 2010 Red Hat Inc.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
#
|
|
# Written by Richard W.M. Jones <rjones@redhat.com>
|
|
#
|
|
# Take a dynamically linked ELF binary and relink it, maximizing the
|
|
# use of static libraries.
|
|
#
|
|
# Example:
|
|
# binary foo
|
|
# ---> dynamically links to libbar.so.0
|
|
# ---> dynamically links to libzab.so.3
|
|
# If libbar.a is available, but there is no libzab.a, then we would
|
|
# end up with:
|
|
# binary foo.static with libbar.a statically inside it
|
|
# ---> still dynamically linking with libzab.so.3
|
|
#
|
|
# We need to have access to the original link command. This script
|
|
# works by post-processing it to find the '-lbar' arguments, which are
|
|
# replaced sometimes by direct static library names.
|
|
#
|
|
# Therefore to use this, you have to add this rule to your
|
|
# Makefile.am:
|
|
#
|
|
# foo.static$(EXEEXT): $(foo_OBJECTS) $(foo_DEPENDENCIES)
|
|
# relink-static.sh \
|
|
# $(foo_LINK) $(foo_OBJECTS) -static $(foo_LDADD) $(foo_LIBS)
|
|
|
|
declare -a args
|
|
|
|
i=0
|
|
for arg; do
|
|
case "$arg" in
|
|
-l*) # get just the library name (eg. "xml2")
|
|
lib=${arg:2}
|
|
# does a static version exist?
|
|
for d in /usr/local/lib{64,} /usr/lib{64,} /lib{64,}; do
|
|
path="$d/lib$lib.a"
|
|
if [ -f "$path" ]; then
|
|
arg="$path"
|
|
break
|
|
fi
|
|
done
|
|
;;
|
|
*.la) # hack around libtool mess
|
|
d=$(dirname "$arg")
|
|
b=$(basename "$arg")
|
|
b=${b:0:${#b}-3}
|
|
if [ -f "$d/.libs/$b.a" ]; then
|
|
arg="$d/.libs/$b.a"
|
|
fi
|
|
;;
|
|
*) ;;
|
|
esac
|
|
args[$i]="$arg"
|
|
i=$(($i+1))
|
|
done
|
|
|
|
# Run the final command.
|
|
echo "${args[@]}"
|
|
"${args[@]}"
|