| Date: Thu, 29 Jul 1999 14:56:40 +0200 (CEST) |
| From: Peter Breitenlohner <peb@mppmu.mpg.de> |
| Reply-To: Peter Breitenlohner <peb@mppmu.mpg.de> |
| To: bug-libtool@gnu.org |
| Subject: a suggestion for libtool (1.3.2) |
| Message-ID: <Pine.LNX.3.95.990729134449.8802F-200000@pcl163a.mppmu.mpg.de> |
| MIME-Version: 1.0 |
| Content-Type: MULTIPART/MIXED; BOUNDARY="1803957763-1087116776-933253000=:8802" |
| Resent-Message-ID: <"2rP1j3.0.z77.p-4et"@mescaline.gnu.org> |
| Resent-From: bug-libtool@gnu.org |
| X-Mailing-List: <bug-libtool@gnu.org> archive/latest/952 |
| X-Loop: bug-libtool@gnu.org |
| Precedence: list |
| Resent-Sender: bug-libtool-request@gnu.org |
| Resent-Bcc: |
| X-UIDL: e9e213a8e1d8afc0286b4a4305ab5a36 |
| Status: RO |
| X-Status: A |
| Content-Length: 4085 |
| Lines: 83 |
| |
| This message is in MIME format. The first part should be readable text, |
| while the remaining parts are likely unreadable without MIME-aware tools. |
| Send mail to mime@docserver.cac.washington.edu for more info. |
| |
| --1803957763-1087116776-933253000=:8802 |
| Content-Type: TEXT/PLAIN; charset=US-ASCII |
| |
| With our setup I found it necessary to apply the following patch to ltmain.sh |
| (1.3.2) although it should, of course, be applied to ltmain.in instead. |
| |
| Let me explain the functionality of this modification and its necessity |
| arising from our situation. |
| |
| 1. |
| Gcc (or rather the ld invoked by gcc) searches for libraries in more |
| directories than those specified with "-L" or the standard ones /lib, |
| /usr/lib, and /usr/local/lib. Most notably there is /usr/<target>/lib or |
| /usr/local/<target>/lib, depending on where gcc was installed. |
| |
| According to the general libtool philosophy, when |
| gcc foo.o bar.o -ltest -o foo |
| succeeds in locating libtest.so (or libtest.a) in /usr/<target>/lib, then |
| libtool --mode=link gcc bar.lo -ltest -rpath <whatever> -o bar.la |
| should equally succeed in locating /usr/<target>/lib/libtest.so. |
| |
| Note that with different incarnations of gcc for different <target>s one |
| certainly wouldn't want to add "-L/usr/<target>/lib" to the command line. |
| The proposed modification uses "gcc -print-file-name=libtest.so" to locate |
| the dependency libraries. |
| |
| 2. |
| My actual situation is as follows: |
| We have a lot of users on our Linux systems (neither RedHat, nor SuSe, nor |
| Debian, nor ...) and some groups `absolutely need libc5' whereas others |
| `absolutely need glibc'. In order to allow for coexistence of libc (5.4.38 |
| or so) and glibc (first 2.0.6, now 2.1.1) for quite some time as well as for a |
| really smooth transition, gcc behaves as either "gcc -b i486-pc-linux-gnulibc1" |
| or "gcc -b i486-pc-linux-gnu", depending on the value of an environment |
| variable. Actually /usr/bin/gcc is a symbolic link to a small shell script |
| that invokes either /usr/i486-pc-linux-gnulibc1/bin/gcc or |
| /usr/i486-pc-linux-gnu/bin/gcc and similarly for the binutils; |
| consequently, there are libc5 and glibc vesions of shared libraries, e.g. |
| /usr/i486-pc-linux-gnulibc1/lib/libncurses.so and |
| /usr/i486-pc-linux-gnu/lib/libncurses.so etc. |
| |
| All that worked really nice, until I recently tried to compile |
| w3c-libwww-5.2.8 that uses libtool. First I had to replace their libtool-1.2e |
| (which couldn't resolve shared library dependencies at all) by version 1.3.2 |
| in order to locate libdl.so etc. (in /lib), but still had problems to locate |
| libz.so (in /usr/<target>/lib) until I manufactured the patch. |
| |
| regards |
| Peter Breitenlohner <peb@mppmu.mpg.de> |
| |
| |
| --1803957763-1087116776-933253000=:8802 |
| Content-Type: TEXT/PLAIN; charset=US-ASCII; name="libtool-1.3.2-diff" |
| Content-Transfer-Encoding: BASE64 |
| Content-ID: <Pine.LNX.3.95.990729145640.8802G@pcl163a.mppmu.mpg.de> |
| Content-Description: |
| |
| diff -ur libtool-1.3.2.orig/ltmain.sh libtool-1.3.2/ltmain.sh |
| --- libtool-1.3.2.orig/ltmain.sh Wed May 26 02:31:24 1999 |
| +++ libtool-1.3.2/ltmain.sh Tue Jul 27 09:43:49 1999 |
| @@ -1902,7 +1902,15 @@ |
| # If $name is empty we are operating on a -L argument. |
| if test "$name" != "" ; then |
| libname=`eval \\$echo \"$libname_spec\"` |
| - for i in $lib_search_path; do |
| + # First try to locate the library through gcc |
| + gcc_path= |
| + if test "$CC" = "gcc" ; then |
| + eval library_names=\"$library_names_spec\" |
| + set dummy $library_names |
| + eval potlib="\$$#" |
| + gcc_path="`gcc -print-file-name=$potlib | sed 's%/*'$potlib'$%%'`" |
| + fi |
| + for i in $gcc_path $lib_search_path; do |
| potential_libs=`ls $i/$libname[.-]* 2>/dev/null` |
| for potent_lib in $potential_libs; do |
| # Follow soft links. |
| |
| --1803957763-1087116776-933253000=:8802-- |