Blame t/00-install.t

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