Blame Makefile.PL

Packit e6c8bb
#
Packit e6c8bb
# $Id: Makefile.PL 1623 2018-01-26 14:23:54Z willem $	-*-perl-*-
Packit e6c8bb
#
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
BEGIN {
Packit e6c8bb
	die <
Packit e6c8bb
Packit e6c8bb
This version of Net::DNS has not been tested against perl $]
Packit e6c8bb
and now requires version 5.6 or later.
Packit e6c8bb
Packit e6c8bb
RIP
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
use strict;
Packit e6c8bb
use warnings;
Packit e6c8bb
use Getopt::Long;
Packit e6c8bb
use IO::Socket;
Packit e6c8bb
use ExtUtils::MakeMaker;
Packit e6c8bb
use constant MM => eval $ExtUtils::MakeMaker::VERSION;
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
# See perldoc ExtUtils::MakeMaker for details of how to influence
Packit e6c8bb
# the contents of the Makefile that is written.
Packit e6c8bb
Packit e6c8bb
my @author = ( 'Dick Franks', 'Olaf Kolkman', 'Michael Fuhr' );
Packit e6c8bb
Packit e6c8bb
my %metadata = (
Packit e6c8bb
	NAME		 => 'Net::DNS',
Packit e6c8bb
	VERSION_FROM	 => 'lib/Net/DNS.pm',
Packit e6c8bb
	ABSTRACT_FROM	 => 'lib/Net/DNS.pm',
Packit e6c8bb
	AUTHOR		 => MM < 6.58 ? "$author[0] et al" : [@author],
Packit e6c8bb
	LICENSE		 => 'mit',
Packit e6c8bb
	MIN_PERL_VERSION => 5.006,
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my %platform = (			## platform-specific dependencies
Packit e6c8bb
	MSWin32 => {
Packit e6c8bb
		'Win32::IPHelper'    => 0.07,
Packit e6c8bb
		'Win32::API'	     => 0.55,
Packit e6c8bb
		'Win32::TieRegistry' => 0.24,
Packit e6c8bb
		} );
Packit e6c8bb
Packit e6c8bb
my $platform = $platform{$^O} || {};
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my %prerequisite = (
Packit e6c8bb
	'Digest::HMAC' => 1.03,
Packit e6c8bb
	'Digest::MD5'  => 2.13,
Packit e6c8bb
	'Digest::SHA'  => 5.23,
Packit e6c8bb
	'File::Spec'   => 0.86,
Packit e6c8bb
	'IO::File'     => 1.08,
Packit e6c8bb
	'IO::Socket'   => 1.16,
Packit e6c8bb
	'MIME::Base64' => 2.11,
Packit e6c8bb
	'Time::Local'  => 1.19,
Packit e6c8bb
	'Test::More'   => 0.52,
Packit e6c8bb
	%$platform
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my %optional = (
Packit e6c8bb
	'Net::DNS::SEC'	       => 1.01,	## For information only
Packit e6c8bb
	'Digest::BubbleBabble' => 0.01,
Packit e6c8bb
	'IO::Socket::INET6'    => 2.51,
Packit e6c8bb
	'IO::Socket::IP'       => 0.38,
Packit e6c8bb
	'Net::LibIDN'	       => 0.12,
Packit e6c8bb
	'Net::LibIDN2'	       => 1.00,
Packit e6c8bb
	'Scalar::Util'	       => 1.25,
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my @debris = qw(
Packit e6c8bb
		.resolv.conf
Packit e6c8bb
		t/IPv6.enabled
Packit e6c8bb
		t/online.enabled t/online.nonfatal
Packit e6c8bb
		zone[0-9].txt zone[0-9][0-9].txt
Packit e6c8bb
		);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
delete $optional{'Net::DNS::SEC'};	## Note: MUST NOT be installed automatically
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
use constant USE_SOCKET_IP => defined eval 'use IO::Socket::IP 0.32; 1;';
Packit e6c8bb
Packit e6c8bb
use constant USE_SOCKET_INET6 => defined eval 'require IO::Socket::INET6';
Packit e6c8bb
Packit e6c8bb
delete $optional{'IO::Socket::INET6'} if USE_SOCKET_IP;		# exclude redundant dependency
Packit e6c8bb
delete $optional{'Net::LibIDN'} if eval 'require Net::LibIDN2';
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
print <
Packit e6c8bb
#
Packit e6c8bb
#	This Net::DNS installation uses the IO::Socket::INET6 package
Packit e6c8bb
#	which has been superseded by IO::Socket::IP.
Packit e6c8bb
#
Packit e6c8bb
#	IPv6 support using IO::Socket::INET6 will be discontinued in
Packit e6c8bb
#	a future release.
Packit e6c8bb
#
Packit e6c8bb
EOT
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
# clean up existing makefile
Packit e6c8bb
unlink('Makefile');
Packit e6c8bb
Packit e6c8bb
WriteMakefile(				## Makefile & distribution metadata
Packit e6c8bb
	%metadata,
Packit e6c8bb
	PREREQ_PM  => {%prerequisite},
Packit e6c8bb
	META_MERGE => {recommends => {%optional}},
Packit e6c8bb
	clean	   => {FILES => "@debris"},
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
# clean up the online testing flag file.
Packit e6c8bb
unlink("t/online.enabled");
Packit e6c8bb
unlink("t/online.disabled");
Packit e6c8bb
Packit e6c8bb
# clean up the IPv6 testing flag file.
Packit e6c8bb
unlink("t/IPv6.enabled");
Packit e6c8bb
unlink("t/IPv6.disabled");
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
#
Packit e6c8bb
# Get the command line args
Packit e6c8bb
#
Packit e6c8bb
Packit e6c8bb
my $help = 0;
Packit e6c8bb
my $IPv6_tests;
Packit e6c8bb
my $online_tests = 2;			##  2 = non-fatal, 1 = on, 0 = off  ##
Packit e6c8bb
Packit e6c8bb
my @options = (
Packit e6c8bb
	'online-tests!'		 => \$online_tests,
Packit e6c8bb
	'non-fatal-online-tests' => sub { $online_tests = 2; },
Packit e6c8bb
	'IPv6-tests!'		 => \$IPv6_tests,
Packit e6c8bb
	'help!'			 => \$help
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
unless ( GetOptions(@options) ) {
Packit e6c8bb
	print "Error: Unrecognized option.\n";
Packit e6c8bb
	print "Try perl Makefile.PL --help for more information\n";
Packit e6c8bb
	exit 1;
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
if ($help) {
Packit e6c8bb
	print <
Packit e6c8bb
Packit e6c8bb
Usage: perl Makefile.PL [OPTION...]
Packit e6c8bb
Packit e6c8bb
Prepare Makefile for building and installing Net::DNS
Packit e6c8bb
Packit e6c8bb
  --online-tests		Perform tests by communicating with the
Packit e6c8bb
				outside world.	Beware that their success is
Packit e6c8bb
				also dependent on outside influences.
Packit e6c8bb
Packit e6c8bb
  --noonline-tests		Skip online tests completely.
Packit e6c8bb
Packit e6c8bb
  --IPv6-tests			Perform IPv6 specific online tests. Default is
Packit e6c8bb
				the same as regular online tests.
Packit e6c8bb
Packit e6c8bb
  --noIPv6-tests		Skip IPv6 specific online test
Packit e6c8bb
Packit e6c8bb
  --non-fatal-online-tests	Perform online test, but do not let failures 
Packit e6c8bb
				negatively affect the outcome of running
Packit e6c8bb
				make test.  This is the default.
Packit e6c8bb
Packit e6c8bb
EOT
Packit e6c8bb
	exit 0;
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
#
Packit e6c8bb
# Check if we have internet connection	(code lifted from LWP)
Packit e6c8bb
#
Packit e6c8bb
if ($online_tests) {
Packit e6c8bb
	my $class = USE_SOCKET_IP ? 'IO::Socket::IP' : 'IO::Socket::INET';
Packit e6c8bb
Packit e6c8bb
	my $socket = $class->new(
Packit e6c8bb
		PeerAddr => "www.google.com:80",
Packit e6c8bb
		Timeout	 => 10
Packit e6c8bb
		);
Packit e6c8bb
Packit e6c8bb
	unless ($socket) {
Packit e6c8bb
		$online_tests = 0;
Packit e6c8bb
		print <
Packit e6c8bb
Packit e6c8bb
You appear not to be directly connected to the Internet.
Packit e6c8bb
Disabling online tests altogether...
Packit e6c8bb
Packit e6c8bb
EOT
Packit e6c8bb
	}
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
if ($online_tests) {
Packit e6c8bb
	my $enable = 't/online.enabled';
Packit e6c8bb
	open( ENABLED, ">$enable" ) || die "Can't touch $enable $!";
Packit e6c8bb
	close(ENABLED) || die "Can't touch $enable $!";
Packit e6c8bb
Packit e6c8bb
	if ( $online_tests == 2 ) {
Packit e6c8bb
		my $nonfatal = 't/online.nonfatal';
Packit e6c8bb
		open( NONFATAL, ">$nonfatal" ) || die "Can't touch $nonfatal $!";
Packit e6c8bb
		close(NONFATAL) || die "Can't touch $nonfatal $!";
Packit e6c8bb
		print "\nActivating Non Fatal Online Tests...\n";
Packit e6c8bb
	} else {
Packit e6c8bb
		print "\nActivating Online Tests...\n";
Packit e6c8bb
	}
Packit e6c8bb
Packit e6c8bb
	$IPv6_tests = 1 unless defined $IPv6_tests;
Packit e6c8bb
	if ( USE_SOCKET_IP || USE_SOCKET_INET6 ) {
Packit e6c8bb
		if ($IPv6_tests) {
Packit e6c8bb
			my $enable = 't/IPv6.enabled';
Packit e6c8bb
			print "\nActivating IPv6 Tests...\n";
Packit e6c8bb
			open( ENABLED, ">$enable" ) || die "Can't touch $enable $!";
Packit e6c8bb
			close(ENABLED) || die "Can't touch $enable $!";
Packit e6c8bb
		}
Packit e6c8bb
	}
Packit e6c8bb
Packit e6c8bb
	print <
Packit e6c8bb
Packit e6c8bb
Warning!
Packit e6c8bb
========
Packit e6c8bb
Online tests depend on conditions beyond the control of Net::DNS. The tests 
Packit e6c8bb
check for the expected results when both Net::DNS and the outside world are
Packit e6c8bb
functioning properly. In case of failure it is often undecidable if the error
Packit e6c8bb
lies within Net::DNS or elsewhere.
Packit e6c8bb
Packit e6c8bb
EOT
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
package MY;				## customise generated Makefile
Packit e6c8bb
Packit e6c8bb
sub install {
Packit e6c8bb
	my $self = shift;
Packit e6c8bb
Packit e6c8bb
	my %install_type = qw(perl INSTALLPRIVLIB site INSTALLSITELIB vendor INSTALLVENDORLIB);
Packit e6c8bb
	my $install_site = join '', '$(DESTDIR)$(', $install_type{$self->{INSTALLDIRS}}, ')';
Packit e6c8bb
	for ($install_site) {
Packit e6c8bb
		s/\$\(([A-Z_]+)\)/$self->{$1}/eg while /\$\(/;	# expand Makefile macros
Packit e6c8bb
		s|([/])[/]+|$1|g;				# remove gratuitous //s
Packit e6c8bb
	}
Packit e6c8bb
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
	return $self->SUPER::install(@_) unless $noinstall{$install_site};
Packit e6c8bb
Packit e6c8bb
	warn <<"AMEN";
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
	return <<'END';
Packit e6c8bb
install :
Packit e6c8bb
	$(NOECHO) $(ECHO) "##	Makefile supports test build only"
Packit e6c8bb
	$(NOECHO) $(ECHO) "##	(see message from Makefile.PL)"
Packit e6c8bb
	$(NOECHO) $(FALSE)
Packit e6c8bb
END
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
sub postamble {
Packit e6c8bb
	return <<'END';
Packit e6c8bb
test_cover : pure_all
Packit e6c8bb
	cover -delete
Packit e6c8bb
	HARNESS_PERL_SWITCHES=-MDevel::Cover $(MAKE) test
Packit e6c8bb
	cover -summary
Packit e6c8bb
END
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
__END__
Packit e6c8bb