[BACK]Return to find_depends CVS log [TXT][DIR] Up to [local] / openbsd / fill_chroot

Diff for /openbsd/fill_chroot/find_depends between version 1.1 and 1.14

version 1.1, 2005/12/21 18:04:06 version 1.14, 2011/08/09 01:13:54
Line 1 
Line 1 
 #!/usr/bin/perl  #!/bin/sh
 # $RedRiver$  # $AFresh1$
 use strict;  
 use warnings;  
   
 # find www/ -name *.so* | xargs find_depends | sort -u | xargs -I {} cp {} /home/andrew/www{}  find_depends() {
       local _file="$1"
       local _line
   
       test -z "$_file" && continue
   
 #use OpenBSD::PackageInfo;      /usr/bin/ldd "$_file" | awk '$7 ~ /^\// { print $7 }' | {
 #use OpenBSD::PackingList;          while read _line; do
 #use OpenBSD::SharedLibs;              test -z "$_line"            && continue
 #use Data::Dumper;              echo $_line
   
 #my $dir = '/var/db/pkg';              test X"$_file" == X"$_line" && continue
 #my $pkg = 'p5-DBD-mysql-3.0002';              find_depends "$_line"
 #my $pkg = 'p5-DBD-mysql';          done
   
   
   
 #my $file = shift || '/usr/local/libdata/perl5/site_perl/i386-openbsd/auto/DBD/mysql/mysql.so';  
   
   
 die unless @ARGV;  
   
 my %libs;  
 foreach my $file (@ARGV) {  
   my $libs = find_libs($file);  
   #print Dumper $libs;  
   foreach (keys %{ $libs }) {  
     $libs{ $_ } = $libs->{$_};  
   }  
 }  
   
 foreach (keys %libs) {  
   print $libs{$_}, "\n";  
 }  
   
 exit;  
   
 #OpenBSD::SharedLibs::add_system_libs('/');  
   
 #print installed_packages();  
 #print installed_name($pkg);  
 #print info_names();  
 #exit;  
   
 #my $plist = OpenBSD::PackingList->from_installation($pkg) || die $!;  
   
 #print Dumper $plist->{wantlib};  
   
 #print Dumper $OpenBSD::SharedLibs::registered_libs;  
   
 #foreach (@{ $plist->{wantlib} }) {  
 #  print Dumper $_->{name}, find_library($_->{name});  
 #}  
   
 #sub find_library  
 #{  
 #   my $spec = shift;  
 #   my @r;  
 #   OpenBSD::SharedLibs::add_system_libs('/');  
 #  
 #   my $lib = '/usr';  
 #   @r = OpenBSD::SharedLibs::lookup_libspec('/usr', $spec);  
 #   unless (@r) {  
 #               $lib = '/usr/X11R6';  
 #      @r = OpenBSD::SharedLibs::lookup_libspec('/usr/X11R6', $spec);  
 #   }  
 #   unless (@r) {  
 #      for my $pkg (installed_packages()) {  
 #          OpenBSD::SharedLibs::add_package_libs($pkg, 1);  
 #      }  
 #      $lib = '/usr/local';  
 #      @r = OpenBSD::SharedLibs::lookup_libspec('/usr/local', $spec);  
 #   }  
 #   return $lib, @r;  
 #}  
   
 sub find_libs  
 {  
   my $file = shift;  
   my $ld   = shift || get_ldconfig();  
   my $locs = shift || {};  
   
   print STDERR "Finding libs for '$file'\n";  
   
   my @libs = search_file($file);  
   foreach (@libs) {  
     my ($name, $maj, $min) = $_ =~ /^([^\.]+)\.so\.(\d+)\.(\d+)$/;  
     my $spec = 'l' . $name . '.' . $maj . '.' . $min;  
   
     if (exists $ld->{$spec}) {  
       next if exists $locs->{$spec};  
   
       $locs->{$spec} = $ld->{$spec};  
   
       $locs = find_libs($locs->{$spec}, $ld, $locs);  
   
     } else {  
       warn "Couldn't find location for lib '$_'";  
     }      }
   }  
   
   return $locs;  
 }  }
   
 sub search_file  
 {  {
   my $file = shift;      for f in  "$@"; do
   my @libs;          find_depends "$f"
       done
   } | sort -u
   
   open my $libs, '<', $file or die;  
   local $/ = chr(0);  
   while (<$libs>) {  
     if (m|^(/[^\w\/]+/)?lib(\S+)\.(\d+)\.(\d+)|) {  
       my ($path, $name, $major, $minor) = ($1, $2, $3, $4);  
       my $spec="$name.$major.$minor";  
       if (defined $path && $path ne '/usr/local/lib') {  
         $spec="$path/$spec";  
       }  
       push @libs, $spec;  
     }  
   }  
   close $libs;  
   
   return @libs;  
 }  
   
 sub get_ldconfig  
 {  
   my $ldconfig = '/sbin/ldconfig';  
   my (%paths, %libs);  
   
   open my $ld, '-|', $ldconfig, '-r' or die;  
   while (<$ld>) {  
     chomp;  
     if (/search directories:\s+(.*)/) {  
         #search directories: /usr/lib:/usr/local/lib  
       my @p = split /:/, $1;  
       @paths{@p} = 1;  
     } elsif (/\d+:-(\S+)\s+=>\s+(\S+)/) {  
              #0:-ldes.9.0 => /usr/lib/libdes.so.9.0  
       my $lib = $1;  
       my $loc = $2;  
       #my ($name, $maj, $min) = $lib =~ /l([^\.]+)\.(\d+)\.(\d+)/;  
       #my $spec = 'lib' . $name . '.so.' . $maj . '.' . $min;  
       $libs{$lib} = $loc;  
     } else {  
       #print $_, "\n";  
     }  
   }  
   close $ld;  
   
   $libs{_paths} = [ keys %paths ];  
   return \%libs;  
 }  

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.14

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>