|
Packit |
e6c8bb |
# $Id: 00-install.t 1605 2017-11-27 11:37:40Z willem $ -*-perl-*-
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use strict;
|
|
Packit |
e6c8bb |
use Test::More;
|
|
Packit |
e6c8bb |
use File::Spec;
|
|
Packit |
e6c8bb |
use File::Find;
|
|
Packit |
e6c8bb |
use ExtUtils::MakeMaker;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
eval {
|
|
Packit |
e6c8bb |
my %macro; # extract Makefile macros
|
|
Packit |
e6c8bb |
open MAKEFILE, 'Makefile' or die $!;
|
|
Packit |
e6c8bb |
while (<MAKEFILE>) {
|
|
Packit |
e6c8bb |
$macro{$1} = $2 if /^([A-Z_]+)\s+=\s+(.*)$/;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
close MAKEFILE;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my %install_type = qw(perl INSTALLPRIVLIB site INSTALLSITELIB vendor INSTALLVENDORLIB);
|
|
Packit |
e6c8bb |
my $install_site = join '', '$(DESTDIR)$(', $install_type{$macro{INSTALLDIRS}}, ')';
|
|
Packit |
e6c8bb |
for ($install_site) {
|
|
Packit |
e6c8bb |
s/\$\(([A-Z_]+)\)/$macro{$1}/eg while /\$\(/; # expand Makefile macros
|
|
Packit |
e6c8bb |
s|([/])[/]+|$1|g; # remove gratuitous //s
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
local @INC = grep !m/\bblib\W(arch|lib)$/i, @INC;
|
|
Packit |
e6c8bb |
eval 'require Net::DNS';
|
|
Packit |
e6c8bb |
my @version = grep $_, ( 'version', $Net::DNS::VERSION );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $nameregex = '\W+Net\WDNS.pm$';
|
|
Packit |
e6c8bb |
my @installed = grep $_ && m/$nameregex/io, values %INC;
|
|
Packit |
e6c8bb |
my %noinstall;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
foreach (@installed) {
|
|
Packit |
e6c8bb |
my $path = $1 if m/^(.+)$nameregex/i;
|
|
Packit |
e6c8bb |
my %seen;
|
|
Packit |
e6c8bb |
foreach (@INC) {
|
|
Packit |
e6c8bb |
$seen{$_}++; # find $path in @INC
|
|
Packit |
e6c8bb |
last if $_ eq $path;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
foreach ( grep !$seen{$_}, @INC ) {
|
|
Packit |
e6c8bb |
$noinstall{$_}++; # mark hidden libraries
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
warn <<"AMEN" if $noinstall{$install_site};
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
##
|
|
Packit |
e6c8bb |
## The install location for this version of Net::DNS differs
|
|
Packit |
e6c8bb |
## from the existing @version in your perl library.
|
|
Packit |
e6c8bb |
## @installed
|
|
Packit |
e6c8bb |
##
|
|
Packit |
e6c8bb |
## The installation will be rendered ineffective because the
|
|
Packit |
e6c8bb |
## library search finds the existing version before reaching
|
|
Packit |
e6c8bb |
## $install_site
|
|
Packit |
e6c8bb |
##
|
|
Packit |
e6c8bb |
## Makefile has been generated to support build and test only.
|
|
Packit |
e6c8bb |
##
|
|
Packit |
e6c8bb |
AMEN
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
};
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my @files;
|
|
Packit |
e6c8bb |
my $blib = File::Spec->catfile(qw(blib lib));
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
find( sub { push( @files, $File::Find::name ) if /\.pm$/ && !/Template/ }, $blib );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my %manifest;
|
|
Packit |
e6c8bb |
open MANIFEST, 'MANIFEST' or plan skip_all => "MANIFEST: $!";
|
|
Packit |
e6c8bb |
while (<MANIFEST>) {
|
|
Packit |
e6c8bb |
chomp;
|
|
Packit |
e6c8bb |
my ( $volume, $directory, $name ) = File::Spec->splitpath($_);
|
|
Packit |
e6c8bb |
$manifest{lc $name}++ if $name;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
close MANIFEST;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
plan skip_all => 'No versions from git checkouts' if -e '.git';
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
plan skip_all => 'Not sure how to parse versions.' unless eval { MM->can('parse_version') };
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
plan tests => scalar @files;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
foreach my $file ( sort @files ) { # reconcile files with MANIFEST
|
|
Packit |
e6c8bb |
my $version = MM->parse_version($file);
|
|
Packit |
e6c8bb |
ok( $version =~ /[\d.]{3}/, "file version: $version\t$file" );
|
|
Packit |
e6c8bb |
my ( $volume, $directory, $name ) = File::Spec->splitpath($file);
|
|
Packit |
e6c8bb |
diag("File not in MANIFEST: $file") unless $manifest{lc $name};
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
exit;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
__END__
|
|
Packit |
e6c8bb |
|