libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

deplibs_check_method


From: Nick Hudson
Subject: deplibs_check_method
Date: Fri, 23 Mar 2001 18:15:11 +0000

Here in NetBSD land we aren't that happy using file(1) for
deplibs_check_method...

The reason that pass_all can't be used is that on some platforms linking
in a library of the form libfoo.a can cause problems. So Todd suggested
we use echo with file_magic and patterns that ld(1) uses to match shared
libraries. These patterns don't actually match the real library (on ELF)
and so this uses of file_magic fails as it follows symlinks.

So what to do... I have two suggestions

        1) Change file_magic so that it doesn't follow symlinks - this will
           probably cause problems with the platforms that don't specify
           file_magic_cmd='file -L'

        2) Create a new deplibs_check_method, e.g. match_pattern, diff (against
           head) attached.

Thoughts?

Nick
-- 
aka address@hidden, address@hidden
? test.log
? install-sh
? mkinstalldirs
? missing
? INSTALL
? COPYING
Index: libtool.m4
===================================================================
RCS file: /home/cvs/libtool/libtool.m4,v
retrieving revision 1.151
diff -c -r1.151 libtool.m4
*** libtool.m4  2001/03/16 03:58:51     1.151
--- libtool.m4  2001/03/23 17:45:34
***************
*** 3123,3134 ****
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
!     [lt_cv_deplibs_check_method='file_magic NetBSD/[a-z0-9]* demand paged 
shared library']
    else
!     [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared 
object']
    fi
-   lt_cv_file_magic_cmd='/usr/bin/file -L'
-   lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
    ;;
  
  newos6*)
--- 3123,3132 ----
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
!     [lt_cv_deplibs_check_method='match_pattern 
/lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
    else
!     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$']
    fi
    ;;
  
  newos6*)
Index: ltmain.in
===================================================================
RCS file: /home/cvs/libtool/ltmain.in,v
retrieving revision 1.246
diff -c -r1.246 ltmain.in
*** ltmain.in   2001/03/10 02:16:45     1.246
--- ltmain.in   2001/03/23 17:45:56
***************
*** 2565,2570 ****
--- 2565,2604 ----
            fi
          done # Gone through all deplibs.
          ;;
+       match_pattern*)
+         set dummy $deplibs_check_method
+         match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+         for a_deplib in $deplibs; do
+           name="`expr $a_deplib : '-l\(.*\)'`"
+           # If $name is empty we are operating on a -L argument.
+           if test "$name" != "" -a "$name" != "0"; then
+             libname=`eval \\$echo \"$libname_spec\"`
+             for i in $lib_search_path $sys_lib_search_path 
$shlib_search_path; do
+                   potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                   for potent_lib in $potential_libs; do
+                     if eval echo \"$potent_lib\" 2>/dev/null \
+                        | sed 10q \
+                        | egrep "$match_pattern_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                   done
+             done
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               echo
+               echo "*** Warning: This library needs some functionality 
provided by $a_deplib."
+               echo "*** I have the capability to make that library 
automatically link in when"
+               echo "*** you link to this library.  But I can only do this if 
you have a"
+               echo "*** shared version of the library, which you do not 
appear to have."
+             fi
+           else
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+           fi
+         done # Gone through all deplibs.
+         ;;
        none | unknown | *)
          newdeplibs=""
          if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \


reply via email to

[Prev in Thread] Current Thread [Next in Thread]