[perl-ExtUtils-Depends] Doc, test, implement load() using *::I::F->Inline() et al.



commit 957bdb29232e5ea6a853332facb47efa54f4a0b4
Author: Ed J <mohawk2 users noreply github com>
Date:   Sun Aug 3 23:02:01 2014 +0100

    Doc, test, implement load() using *::I::F->Inline() et al.

 lib/ExtUtils/Depends.pm |   45 +++++++++++++++++++++++++++++++--------------
 t/02_save_load.t        |   28 ++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 14 deletions(-)
---
diff --git a/lib/ExtUtils/Depends.pm b/lib/ExtUtils/Depends.pm
index 00c6763..ed7e972 100644
--- a/lib/ExtUtils/Depends.pm
+++ b/lib/ExtUtils/Depends.pm
@@ -198,20 +198,32 @@ sub load {
                $instpath = File::Spec->rel2abs ($instpath);
        }
 
-       my @typemaps = map {
-               File::Spec->rel2abs ($_, $instpath)
-       } @{"$depinstallfiles\::typemaps"};
+       my (@typemaps, $inc, $libs, @deps);
+
+       @deps = eval { $depinstallfiles->deps };
+       @deps = @{"$depinstallfiles\::deps"}
+               if $@ and exists ${"$depinstallfiles\::"}{deps};
+
+       my $inline = eval { $depinstallfiles->Inline('C') };
+       if (!$@) {
+               $inc = $inline->{INC} // '';
+               $libs = $inline->{LIBS} // '';
+               @typemaps = @{ $inline->{TYPEMAPS} || [] };
+       } else {
+               $inc = ${"$depinstallfiles\::inc"} // '';
+               $libs = ${"$depinstallfiles\::libs"} // '';
+               @typemaps = @{"$depinstallfiles\::typemaps"};
+       }
+       @typemaps = map { File::Spec->rel2abs ($_, $instpath) } @typemaps;
 
        {
                instpath => $instpath,
                typemaps => \ typemaps,
-               inc      => "-I$instpath ".${"$depinstallfiles\::inc"},
-               libs     => ${"$depinstallfiles\::libs"},
+               inc      => "-I$instpath $inc",
+               libs     => $libs,
                # this will not exist when loading files from old versions
                # of ExtUtils::Depends.
-               (exists ${"$depinstallfiles\::"}{deps}
-                 ? (deps => \ {"$depinstallfiles\::deps"})
-                 : ()), 
+               deps => \ deps,
        }
 }
 
@@ -601,12 +613,17 @@ loading files created by old versions of ExtUtils::Depends.
 =back
 
 If you want to make module I<name> support this, you must provide
-a module I<name>::Install::Files, which on loading will provide the
-following package variables: C<@typemaps>, C<$inc>, C<$libs>, C<$deps>,
-with the same contents as above (not coincidentally). The C<load>
-function will supply the C<instpath>. An easy way to achieve this is
-to use the method L</"$depends-E<gt>save_config ($filename)">, but your
-package may have different facilities already.
+a module I<name>::Install::Files, which on loading will implement the
+following class methods:
+
+  $hashref = name::Install::Files->Inline('C');
+  # hash to contain any necessary TYPEMAPS (array-ref), LIBS, INC
+  @deps = name::Install::Files->deps;
+  # any modules on which "name" depends
+
+An easy way to achieve this is to use the method
+L</"$depends-E<gt>save_config ($filename)">, but your package may have
+different facilities already.
 
 =item $depends->load_deps
 
diff --git a/t/02_save_load.t b/t/02_save_load.t
index a313432..3e52c7d 100644
--- a/t/02_save_load.t
+++ b/t/02_save_load.t
@@ -40,6 +40,34 @@ my @installed_files = qw(dep.h
                          dep-private.h);
 $dep_info->install (@installed_files);
 
+my $INC_FRAG = '-Ddistinctive';
+map { make_fake($_) } qw(Fakenew Fakeold);
+sub Fakenew::Install::Files::Inline { +{ INC => $INC_FRAG } }
+sub Fakenew::Install::Files::deps { qw(Fakeold) }
+{
+  no warnings 'once';
+  @Fakeold::Install::Files::deps = qw(Fakenew);
+  $Fakeold::Install::Files::inc = $INC_FRAG;
+  $Fakeold::Install::Files::libs = '';
+}
+sub make_fake {
+  my $class = shift . '::Install::Files';
+  my @pieces = split '::', $class;
+  require File::Spec;
+  my $pm = join('/', @pieces) . '.pm';
+  $INC{$pm} = File::Spec->catdir(qw(build fake), split '/', $pm);
+}
+sub test_load {
+  my ($info, $msg) = @_;
+  my $install_part = qr|Fake.*Install|;
+  like ($info->{inc}, $install_part, "$msg inc generic");
+  like ($info->{inc}, qr/$INC_FRAG/, "$msg inc specific");
+  ok (scalar(grep { /Fake/ } @{$info->{deps}}), $msg);
+  ok (exists $info->{libs}, $msg);
+}
+test_load (ExtUtils::Depends::load('Fakenew'), 'load new scheme');
+test_load (ExtUtils::Depends::load('Fakeold'), 'load old scheme');
+
 use Data::Dumper;
 $Data::Dumper::Terse = 1;
 $dep_info->save_config (catfile $tmp_inc, qw(DepTest Install Files.pm));


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