diff -Naur uClibc-0.9.30.3/extra/Configs/Config.in uClibc-0.9.30.3.oden/extra/Configs/Config.in --- uClibc-0.9.30.3/extra/Configs/Config.in 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/extra/Configs/Config.in 2010-11-29 10:07:53.362806455 +0100 @@ -1669,17 +1669,29 @@ menu "Library Installation Options" +config SHARED_LIB_DIRNAME + string "Shared library directory name" + depends on HAVE_SHARED + default "lib" + help + When using shared libraries, this will be the name of the directory + for the shared libraries. This value will be compiled into every + binary compiled with uClibc. + + For a typical target system this should be set to "lib", but for + multilib systems this might be ie. "lib32" or "lib64" etc. + config SHARED_LIB_LOADER_PREFIX string "Shared library loader path" - depends on HAVE_SHARED - default "$(RUNTIME_PREFIX)lib" + default "$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)" help When using shared libraries, this path is the location where the shared library will be invoked. This value will be compiled into every binary compiled with uClibc. - For a typical target system this should be set to "/lib", such that - 'make install' will install /lib/ld-uClibc.so.0. + For a typical target system this should be set to + "/$(SHARED_LIB_DIRNAME)", such that where SHARED_LIBNAME is set to + ie. "lib", 'make install' will install /lib/ld-uClibc.so.0. BIG FAT WARNING: If you do not have a shared library loader with the correct name diff -Naur uClibc-0.9.30.3/ldso/ldso/dl-elf.c uClibc-0.9.30.3.oden/ldso/ldso/dl-elf.c --- uClibc-0.9.30.3/ldso/ldso/dl-elf.c 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/ldso/ldso/dl-elf.c 2010-11-29 10:07:53.363806548 +0100 @@ -296,10 +296,10 @@ This list must exactly match the list in uClibc/ldso/util/ldd.c */ _dl_if_debug_dprint("\tsearching full lib path list\n"); if ((tpnt1 = search_for_named_library(libname, secure, - UCLIBC_RUNTIME_PREFIX "lib:" - UCLIBC_RUNTIME_PREFIX "usr/lib" + UCLIBC_RUNTIME_PREFIX UCLIBC_SHARED_LIB_DIRNAME + ":" UCLIBC_RUNTIME_PREFIX "usr/" UCLIBC_SHARED_LIB_DIRNAME #ifndef __LDSO_CACHE_SUPPORT__ - ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib" + ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib" UCLIBC_SHARED_LIB_DIRNAME #endif , rpnt) ) != NULL) diff -Naur uClibc-0.9.30.3/ldso/ldso/Makefile.in uClibc-0.9.30.3.oden/ldso/ldso/Makefile.in --- uClibc-0.9.30.3/ldso/ldso/Makefile.in 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/ldso/ldso/Makefile.in 2010-11-29 10:07:53.363806548 +0100 @@ -11,7 +11,7 @@ CFLAGS-ldso += -fno-omit-frame-pointer CFLAGS-ldso += -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) -I$(top_srcdir)ldso/include -I$(top_srcdir)ldso/ldso -CFLAGS-ldso += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=\"$(UCLIBC_LDSO)\" +CFLAGS-ldso += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_SHARED_LIB_DIRNAME=\"$(SHARED_LIB_DIRNAME)\" -DUCLIBC_LDSO=\"$(UCLIBC_LDSO)\" CFLAGS-ldso/ldso/$(TARGET_ARCH)/ := $(CFLAGS-ldso) diff -Naur uClibc-0.9.30.3/ldso/libdl/Makefile.in uClibc-0.9.30.3.oden/ldso/libdl/Makefile.in --- uClibc-0.9.30.3/ldso/libdl/Makefile.in 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/ldso/libdl/Makefile.in 2010-11-29 10:07:53.364806397 +0100 @@ -9,7 +9,7 @@ CFLAGS-libdl += -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) -I$(top_srcdir)ldso/include -I$(top_srcdir)ldso/ldso -CFLAGS-libdl += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" +CFLAGS-libdl += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_SHARED_LIB_DIRNAME=\"$(SHARED_LIB_DIRNAME)\" ifeq ($(SUPPORT_LD_DEBUG),y) CFLAGS-libdl += -D__SUPPORT_LD_DEBUG__ diff -Naur uClibc-0.9.30.3/Makefile.in uClibc-0.9.30.3.oden/Makefile.in --- uClibc-0.9.30.3/Makefile.in 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/Makefile.in 2010-11-29 10:09:54.358963402 +0100 @@ -190,7 +190,7 @@ install: install_runtime install_dev -RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB=$(shell $(top_srcdir)extra/scripts/relative_path.sh $(DEVEL_PREFIX)lib $(RUNTIME_PREFIX)lib) +RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB=$(shell $(top_srcdir)extra/scripts/relative_path.sh $(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME) $(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)) $(top_builddir)extra/scripts/unifdef: $(top_srcdir)extra/scripts/unifdef.c|$(@D) $(hcompile.u) @@ -371,41 +371,41 @@ # Installs development library links. install_dev: install_headers install_runtime - $(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)lib - -$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)lib/ + $(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME) + -$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/ ifeq ($(HAVE_SHARED),y) for i in `find lib/ -type l -name 'lib[a-zA-Z]*.so' | \ $(SED) -e 's/lib\///'` ; do \ $(LN) -sf $(RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB)$$i.$(MAJOR_VERSION) \ - $(PREFIX)$(DEVEL_PREFIX)lib/$$i; \ + $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/$$i; \ done - if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)lib/$(SHARED_MAJORNAME) ] ; then \ - $(RM) $(PREFIX)$(DEVEL_PREFIX)lib/libc.so; \ - $(SED) -e 's:$(NONSHARED_LIBNAME):$(DEVEL_PREFIX)lib/$(NONSHARED_LIBNAME):' \ - -e 's:$(SHARED_MAJORNAME):$(RUNTIME_PREFIX)lib/$(SHARED_MAJORNAME):' \ - -e 's:$(UCLIBC_LDSO):$(RUNTIME_PREFIX)lib/$(UCLIBC_LDSO):' \ - $(top_builddir)lib/libc.so > $(PREFIX)$(DEVEL_PREFIX)lib/libc.so; \ + if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)/$(SHARED_MAJORNAME) ] ; then \ + $(RM) $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libc.so; \ + $(SED) -e 's:$(NONSHARED_LIBNAME):$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/$(NONSHARED_LIBNAME):' \ + -e 's:$(SHARED_MAJORNAME):$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)/$(SHARED_MAJORNAME):' \ + -e 's:$(UCLIBC_LDSO):$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)/$(UCLIBC_LDSO):' \ + $(top_builddir)lib/libc.so > $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libc.so; \ fi ifeq ($(UCLIBC_HAS_THREADS),y) ifneq ($(LINUXTHREADS_OLD),y) - if [ -f $(top_builddir)lib/libpthread.so -a -f $(PREFIX)$(RUNTIME_PREFIX)lib/libpthread.so.$(MAJOR_VERSION) ] ; then \ - $(RM) $(PREFIX)$(DEVEL_PREFIX)lib/libpthread.so; \ - cp $(top_srcdir)extra/scripts/format.lds $(PREFIX)$(DEVEL_PREFIX)lib/libpthread.so; \ - echo "GROUP ( $(RUNTIME_PREFIX)lib/libpthread.so.$(MAJOR_VERSION) $(DEVEL_PREFIX)lib/libpthread_nonshared.a )" \ - >> $(PREFIX)$(DEVEL_PREFIX)lib/libpthread.so; \ + if [ -f $(top_builddir)lib/libpthread.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)/libpthread.so.$(MAJOR_VERSION) ] ; then \ + $(RM) $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libpthread.so; \ + cp $(top_srcdir)extra/scripts/format.lds $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libpthread.so; \ + echo "GROUP ( $(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME)/libpthread.so.$(MAJOR_VERSION) $(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libpthread_nonshared.a )" \ + >> $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libpthread.so; \ fi endif endif ifeq ($(PTHREADS_DEBUG_SUPPORT),y) $(LN) -sf $(RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB)libthread_db.so.1 \ - $(PREFIX)$(DEVEL_PREFIX)lib/libthread_db.so + $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/libthread_db.so endif ifeq ($(DOPIC),y) # # If we build shared libraries then the static libs are PIC... # # Make _pic.a symlinks to make mklibs.py and similar tools happy. if [ -d lib ] ; then \ for i in `find lib/ -type f -name 'lib*.a' | $(SED) -e 's/lib\///'` ; do \ - $(LN) -sf $$i $(PREFIX)$(DEVEL_PREFIX)lib/`echo $$i \ + $(LN) -sf $$i $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME)/`echo $$i \ | $(SED) -e 's/\.a$$/_pic.a/'`; \ done ; \ fi @@ -414,9 +414,9 @@ ifeq ($(UCLIBC_FORMAT_SHARED_FLAT),y) for file in lib/lib*.gdb; do \ if test -f $$file; then \ - $(INSTALL) -m 755 $$file $(PREFIX)$(DEVEL_PREFIX)lib; \ + $(INSTALL) -m 755 $$file $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME); \ $(INSTALL) -m 755 `echo $$file | $(SED) 's/\.gdb$$//'` \ - $(PREFIX)$(DEVEL_PREFIX)lib; \ + $(PREFIX)$(DEVEL_PREFIX)$(SHARED_LIB_DIRNAME); \ fi; \ done endif @@ -424,15 +424,15 @@ # Installs run-time libraries install_runtime: all ifeq ($(HAVE_SHARED),y) - $(INSTALL) -d $(PREFIX)$(RUNTIME_PREFIX)lib + $(INSTALL) -d $(PREFIX)$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME) $(INSTALL) -m 755 lib/lib*-$(VERSION).so \ - $(PREFIX)$(RUNTIME_PREFIX)lib - (cd lib && $(TAR) -cf - *.so.*) | $(TAR) -xf - -C $(PREFIX)$(RUNTIME_PREFIX)lib + $(PREFIX)$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME) + (cd lib && $(TAR) -cf - *.so.*) | $(TAR) -xf - -C $(PREFIX)$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME) @if [ -x lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so ] ; then \ set -e; \ $(SHELL_SET_X); \ $(INSTALL) -m 755 lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so \ - $(PREFIX)$(RUNTIME_PREFIX)lib; \ + $(PREFIX)$(RUNTIME_PREFIX)$(SHARED_LIB_DIRNAME); \ fi endif diff -Naur uClibc-0.9.30.3/Rules.mak uClibc-0.9.30.3.oden/Rules.mak --- uClibc-0.9.30.3/Rules.mak 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/Rules.mak 2010-11-29 10:07:53.333932151 +0100 @@ -75,6 +75,7 @@ TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) TARGET_SUBARCH:=$(shell grep -s '^TARGET_SUBARCH' $(top_builddir)/.config | $(SED) -e 's/^TARGET_SUBARCH=//' -e 's/"//g') TARGET_SUBARCH:=$(strip $(subst ",, $(strip $(TARGET_SUBARCH)))) +SHARED_LIB_DIRNAME:=$(strip $(subst //,, $(subst /,, $(subst ",, $(strip $(SHARED_LIB_DIRNAME)))))) RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) KERNEL_HEADERS:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(KERNEL_HEADERS)))))) diff -Naur uClibc-0.9.30.3/utils/ldconfig.c uClibc-0.9.30.3.oden/utils/ldconfig.c --- uClibc-0.9.30.3/utils/ldconfig.c 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/utils/ldconfig.c 2010-11-29 10:07:53.364806397 +0100 @@ -949,10 +949,10 @@ /* look ma, no defaults */ if (!nodefault) { - scan_dir(UCLIBC_RUNTIME_PREFIX "lib"); - scan_dir(UCLIBC_RUNTIME_PREFIX "usr/lib"); + scan_dir(UCLIBC_RUNTIME_PREFIX UCLIBC_SHARED_LIB_DIRNAME); + scan_dir(UCLIBC_RUNTIME_PREFIX "usr/" UCLIBC_SHARED_LIB_DIRNAME); #ifndef __LDSO_CACHE_SUPPORT__ - scan_dir(UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib"); + scan_dir(UCLIBC_RUNTIME_PREFIX "usr/X11R6/" UCLIBC_SHARED_LIB_DIRNAME); #else /* I guess the defaults aren't good enough */ if ((extpath = get_extpath())) { @@ -963,8 +963,8 @@ while (cp[--len] == '/' && len) cp[len] = 0; /* we do the redundancy check only if cache usage is enabled */ - if (strcmp(UCLIBC_RUNTIME_PREFIX "lib", cp) == 0 - || strcmp(UCLIBC_RUNTIME_PREFIX "usr/lib", cp) == 0) { + if (strcmp(UCLIBC_RUNTIME_PREFIX UCLIBC_SHARED_LIB_DIRNAME, cp) == 0 + || strcmp(UCLIBC_RUNTIME_PREFIX "usr/" UCLIBC_SHARED_LIB_DIRNAME, cp) == 0) { if (verbose >= 0) warnx("You should remove `%s' from `%s'", cp, LDSO_CONF); continue; diff -Naur uClibc-0.9.30.3/utils/ldd.c uClibc-0.9.30.3.oden/utils/ldd.c --- uClibc-0.9.30.3/utils/ldd.c 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/utils/ldd.c 2010-11-29 10:07:53.365806466 +0100 @@ -122,6 +122,10 @@ #define ELFDATAM ELFDATA2MSB #endif +#ifndef UCLIBC_SHARED_LIB_DIRNAME +# define UCLIBC_SHARED_LIB_DIRNAME "lib" +#endif + struct library { char *name; int resolved; @@ -452,9 +456,10 @@ /* Lastly, search the standard list of paths for the library. This list must exactly match the list in uClibc/ldso/ldso/dl-elf.c */ - path = UCLIBC_RUNTIME_PREFIX "lib:" UCLIBC_RUNTIME_PREFIX "usr/lib" + path = UCLIBC_RUNTIME_PREFIX UCLIBC_SHARED_LIB_DIRNAME + ":" UCLIBC_RUNTIME_PREFIX "usr/" UCLIBC_SHARED_LIB_DIRNAME #ifndef __LDSO_CACHE_SUPPORT__ - ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib" + ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib" UCLIBC_SHARED_LIB_DIRNAME #endif ; search_for_named_library(lib->name, buf, path); diff -Naur uClibc-0.9.30.3/utils/Makefile.in uClibc-0.9.30.3.oden/utils/Makefile.in --- uClibc-0.9.30.3/utils/Makefile.in 2010-03-12 20:32:42.000000000 +0100 +++ uClibc-0.9.30.3.oden/utils/Makefile.in 2010-11-29 10:10:34.392900868 +0100 @@ -13,6 +13,7 @@ -I$(top_srcdir)ldso/include \ -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \ -DUCLIBC_LDSO=$(UCLIBC_LDSO) \ + -DUCLIBC_SHARED_LIB_DIRNAME=\"$(SHARED_LIB_DIRNAME)\" \ -I$(top_srcdir)/$(KERNEL_HEADERS) \ -DNOT_IN_libc \ -B$(top_builddir)lib \