summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2013-03-18 12:44:47 +0100
committerAndreas Schwab <schwab@suse.de>2013-03-19 12:07:26 +0100
commitaaa8cb4b43511c62b11ac6f10e9beea3d5035a68 (patch)
tree19ca0e195c46f07ba377a8fc79d19048a75cd61e
parent5cebee5db0e891a91d947ef6015f1425fd2fd658 (diff)
downloadglibc-aaa8cb4b43511c62b11ac6f10e9beea3d5035a68.tar.gz
Add support for rtld directory different from slib directory
-rw-r--r--ChangeLog15
-rw-r--r--Makeconfig10
-rw-r--r--Makerules4
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure2
-rw-r--r--configure.in1
-rw-r--r--elf/Makefile11
-rwxr-xr-xscripts/rellns-sh17
8 files changed, 50 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index e50ae01898..2fb09f6b3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2013-03-19 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Substitute libc_cv_rtlddir.
+ * configure: Regenerate.
+ * config.make.in (rtlddir): Set from libc_cv_rtlddir.
+ * Makeconfig (rtlddir, inst_rtlddir): New variables.
+ (rtld-LDFLAGS): Use them with $(rtld-installed-name).
+ * elf/Makefile (install-others, CFLAGS-interp.c)
+ (ldso_install, common-ldd-rewrite): Likewise.
+ ($(inst_rtlddir)/$(rtld-installed-name)): Renamed from
+ $(inst_slibdir)/$(rtld-installed-name).
+ * scripts/rellns-sh: Add -p option.
+ * Makerules (make-shlib-link): Use rellns-sh to get relative name
+ for source.
+
2013-03-19 Siddhesh Poyarekar <siddhesh@redhat.com>
* manual/nptl.texi: Renamed to ...
diff --git a/Makeconfig b/Makeconfig
index 6c8891827e..70deb1e182 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -151,12 +151,18 @@ libdir = $(exec_prefix)/lib
endif
inst_libdir = $(install_root)$(libdir)
-# Where to install the shared library and dynamic linker.
+# Where to install the shared library.
ifndef slibdir
slibdir = $(exec_prefix)/lib
endif
inst_slibdir = $(install_root)$(slibdir)
+# Where to install the dynamic linker.
+ifndef rtlddir
+rtlddir = $(slibdir)
+endif
+inst_rtlddir = $(install_root)$(rtlddir)
+
# Prefix to put on files installed in $(libdir). For libraries `libNAME.a',
# the prefix is spliced between `lib' and the name, so the linker switch
# `-l$(libprefix)NAME' finds the library; for other files the prefix is
@@ -441,7 +447,7 @@ endif
endif
ifeq (yes,$(build-shared))
ifndef rtld-LDFLAGS
-rtld-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
+rtld-LDFLAGS = -Wl,-dynamic-linker=$(rtlddir)/$(rtld-installed-name)
endif
ifndef rtld-tests-LDFLAGS
ifeq (yes,$(build-hardcoded-path-in-tests))
diff --git a/Makerules b/Makerules
index b115f1a92c..5ba670c1cc 100644
--- a/Makerules
+++ b/Makerules
@@ -864,7 +864,7 @@ ifeq (no,$(cross-compiling))
symbolic-link-prog := $(common-objpfx)elf/sln
symbolic-link-list := $(common-objpfx)elf/symlink.list
define make-shlib-link
-echo $(<F) $@ >> $(symbolic-link-list)
+echo `$(..)scripts/rellns-sh -p $< $@` $@ >> $(symbolic-link-list)
endef
else # cross-compiling
# We need a definition that can be used by elf/Makefile's install rules.
@@ -874,7 +874,7 @@ endif
ifndef make-shlib-link
define make-shlib-link
rm -f $@
-$(LN_S) $(<F) $@
+$(LN_S) `$(..)scripts/rellns-sh -p $< $@` $@
endef
endif
diff --git a/config.make.in b/config.make.in
index a966dcae23..2cab2f352e 100644
--- a/config.make.in
+++ b/config.make.in
@@ -11,6 +11,7 @@ exec_prefix = @exec_prefix@
datadir = @datadir@
libdir = @libdir@
slibdir = @libc_cv_slibdir@
+rtlddir = @libc_cv_rtlddir@
localedir = @libc_cv_localedir@
sysconfdir = @libc_cv_sysconfdir@
libexecdir = @libexecdir@
diff --git a/configure b/configure
index e386c1a6f7..2dc7eeb977 100755
--- a/configure
+++ b/configure
@@ -594,6 +594,7 @@ libc_cv_rootsbindir
libc_cv_localstatedir
libc_cv_sysconfdir
libc_cv_localedir
+libc_cv_rtlddir
libc_cv_slibdir
old_glibc_headers
use_nscd
@@ -7374,6 +7375,7 @@ fi
+
if test x$use_ldconfig = xyes; then
$as_echo "#define USE_LDCONFIG 1" >>confdefs.h
diff --git a/configure.in b/configure.in
index c57897974c..cb317308ab 100644
--- a/configure.in
+++ b/configure.in
@@ -2153,6 +2153,7 @@ fi
AC_SUBST(old_glibc_headers)
AC_SUBST(libc_cv_slibdir)
+AC_SUBST(libc_cv_rtlddir)
AC_SUBST(libc_cv_localedir)
AC_SUBST(libc_cv_sysconfdir)
AC_SUBST(libc_cv_localstatedir)
diff --git a/elf/Makefile b/elf/Makefile
index 6d4b365fbb..9477a4d96b 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -66,7 +66,7 @@ endif
ifeq (yes,$(build-shared))
extra-objs = $(all-rtld-routines:%=%.os) soinit.os sofini.os interp.os
generated += librtld.os dl-allobjs.os ld.so ldd
-install-others = $(inst_slibdir)/$(rtld-installed-name)
+install-others = $(inst_rtlddir)/$(rtld-installed-name)
install-bin-script = ldd
endif
@@ -340,7 +340,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
| $(AWK) '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }'
# interp.c exists just to get this string into the libraries.
-CFLAGS-interp.c = -D'RUNTIME_LINKER="$(slibdir)/$(rtld-installed-name)"' \
+CFLAGS-interp.c = -D'RUNTIME_LINKER="$(rtlddir)/$(rtld-installed-name)"' \
-DNOT_IN_libc=1
$(objpfx)interp.os: $(common-objpfx)config.make
@@ -372,18 +372,19 @@ $(inst_slibdir)/$(rtld-version-installed-name): $(objpfx)ld.so $(+force)
$(make-target-directory)
$(do-install-program)
-$(inst_slibdir)/$(rtld-installed-name): \
+$(inst_rtlddir)/$(rtld-installed-name): \
$(inst_slibdir)/$(rtld-version-installed-name) \
$(inst_slibdir)/libc-$(version).so
+ $(make-target-directory)
$(make-shlib-link)
# Special target called by parent to install just the dynamic linker.
.PHONY: ldso_install
-ldso_install: $(inst_slibdir)/$(rtld-installed-name)
+ldso_install: $(inst_rtlddir)/$(rtld-installed-name)
endif
-common-ldd-rewrite = -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
+common-ldd-rewrite = -e 's%@RTLD@%$(rtlddir)/$(rtld-installed-name)%g' \
-e 's%@VERSION@%$(version)%g' \
-e 's|@PKGVERSION@|$(PKGVERSION)|g' \
-e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|g'
diff --git a/scripts/rellns-sh b/scripts/rellns-sh
index 0e861b5fa5..9a1496a9fd 100755
--- a/scripts/rellns-sh
+++ b/scripts/rellns-sh
@@ -16,8 +16,17 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# With -p, instead of creating the link print the computed relative link
+# name.
+do_print=false
+case $1 in
+ -p)
+ do_print=true
+ shift
+ ;;
+esac
if test $# -ne 2; then
- echo "Usage: rellns SOURCE DEST" >&2
+ echo "Usage: rellns [-p] SOURCE DEST" >&2
exit 1
fi
@@ -70,4 +79,8 @@ while test -n "$from"; do
from=`echo $from | sed 's%^[^/]*/*%%'`
done
-ln -s $rfrom$to $2
+if $do_print; then
+ echo "$rfrom$to"
+else
+ ln -s $rfrom$to $2
+fi