redoconf: move -Wl,-rpath flags to shlib.rc and add -Wl,-z,origin.

It was kind of ugly to have this kind of special flag directly in
link.od; now we detect whether it's available.  This also gives a
project the ability to override the flag in some other way if they
want.

As a result, rc/shlib.rc needs to be included in all.rc.od if you want
to create or link against shared libraries.

While we're here, also add -Wl,-z,origin on platforms where it works.
This is apparently needed for FreeBSD 8.0 at least, and probably other
platforms.

Reported-by: Wayne Scott <wsc9tt@gmail.com>
This commit is contained in:
Avery Pennarun 2019-03-01 13:38:25 -05:00
commit 88250334da
4 changed files with 24 additions and 6 deletions

View file

@ -2,6 +2,7 @@
rc_include \
rc/CC.required.rc \
rc/CXX.rc \
rc/shlib.rc \
rc/libqt4.rc \
rc/libgtk2.rc \
rc/Wextra.rc \

View file

@ -1,5 +1,5 @@
. ./redoconf.rc
rc_include _all.rc rc/shlib.rc
rc_include _all.rc
# Tricky quoting: see _compile.od for details.
if [ "$HAVE_SHLIB" = UNIX ]; then
@ -40,6 +40,12 @@ elif [ "$HAVE_SHLIB" = MACOS ]; then
\$LIBS
EOF
else
if [ -z "$HAVE_SHLIB" ]; then
echo "link-shlib.od: fatal:" \
"must include rc/shlib.rc to use shared libraries." >&2
exit 90
fi
# If no shared library support and we try to build one,
# compensate by building a static library instead in the
# same place.

View file

@ -13,7 +13,6 @@ cat >$3 <<-EOF
IFS="$NL"
set -f
\$LINK -o "\$o" \\
-Wl,-rpath,'\$ORIGIN' \\
\$LDFLAGS \$OPTFLAGS \\
"\$@" \\
\$LIBS

View file

@ -27,17 +27,29 @@ try_macos_style() {
if [ -n "$STATIC" ]; then
echo "--enable-static specified; not building shared libraries." >&2
rc_replaceln HAVE_SHLIB ""
rc_replaceln HAVE_SHLIB "STATIC"
elif [ -n "$NOSHARED" ]; then
echo "--disable-shared specified; not building shared libraries." >&2
rc_replaceln HAVE_SHLIB ""
rc_replaceln HAVE_SHLIB "STATIC"
elif try_unix_style; then
rc_replaceln HAVE_SHLIB UNIX
elif try_macos_style; then
rc_replaceln HAVE_SHLIB MACOS
else
echo "Not building shared libraries on this platform." >&2
rc_undo
rc_replaceln HAVE_SHLIB ""
rc_replaceln HAVE_SHLIB "STATIC"
fi
if [ "$HAVE_SHLIB" != "STATIC" ]; then
x='-Wl,-z,origin'
if (appendln LDFLAGS "$x" && rc_compile cc link); then
rc_appendln LDFLAGS "$x"
fi
x='-Wl,-rpath,$ORIGIN'
if (appendln LDFLAGS "$x" && rc_compile cc link); then
rc_appendln LDFLAGS "$x"
fi
fi
rc_save