don't fail packlist finding if one module fails to load
[p5sagit/App-FatPacker.git] / lib / App / FatPacker.pm
index 056a502..db65c00 100644 (file)
@@ -14,7 +14,7 @@ use File::Copy qw(copy);
 use File::Path qw(mkpath rmtree);
 use B qw(perlstring);
 
-our $VERSION = '0.010004'; # 0.10.4
+our $VERSION = '0.010_006'; # 0.10.6
 
 $VERSION = eval $VERSION;
 
@@ -142,11 +142,16 @@ sub script_command_packlists_for {
 
 sub packlists_containing {
   my ($self, $targets) = @_;
-  my @targets = @$targets;
+  my @targets;
   {
     local @INC = ('lib', @INC);
-    foreach my $t (@targets) {
-      require $t;
+    foreach my $t (@$targets) {
+      unless (eval { require $t; 1}) {
+        warn "Failed to load ${t}: $@\n"
+            ."Make sure you're not missing a packlist as a result\n";
+        next;
+      }
+      push @targets, $t;
     }
   }
   my @search = grep -d $_, map catdir($_, 'auto'), @INC;
@@ -178,8 +183,11 @@ sub packlists_to_tree {
     my $pack_base;
     PART: foreach my $p (0 .. $#dir_parts) {
       if ($dir_parts[$p] eq 'auto') {
-        # $p-2 since it's <wanted path>/$Config{archname}/auto
-        $pack_base = catpath $vol, catdir @dir_parts[0..$p-2];
+        # $p-2 normally since it's <wanted path>/$Config{archname}/auto but
+        # if the last bit is a number it's $Config{archname}/$version/auto
+        # so use $p-3 in that case
+        my $version_lib = 0+!!($dir_parts[$p-1] =~ /^[0-9.]+$/);
+        $pack_base = catpath $vol, catdir @dir_parts[0..$p-(2+$version_lib)];
         last PART;
       }
     }