|
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 |
|