Blame Makefile.PL

Packit 37d9e7
use strict;
Packit 37d9e7
BEGIN {
Packit 37d9e7
	require 5.00503;
Packit 37d9e7
}
Packit 37d9e7
use Config;
Packit 37d9e7
use ExtUtils::MakeMaker ();
Packit 37d9e7
Packit 37d9e7
# Should we build the XS version?
Packit 37d9e7
my $make_xs = undef;
Packit 37d9e7
foreach ( @ARGV ) {
Packit 37d9e7
	/^-pm/ and $make_xs = 0;
Packit 37d9e7
	/^-xs/ and $make_xs = 1;
Packit 37d9e7
}
Packit 37d9e7
unless ( defined $make_xs ) {
Packit 37d9e7
	$make_xs = can_xs();
Packit 37d9e7
}
Packit 37d9e7
if ( $^O eq 'cygwin' and $make_xs == 1 and not /^-xs/ ) {
Packit 37d9e7
	# Cygwin goes bonkers breaking `` if using Params::Util XS version
Packit 37d9e7
	# for no apparent reason.
Packit 37d9e7
	$make_xs = 0;
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
# Generate the non-XS tests if we are making the XS version
Packit 37d9e7
my @tests = qw{
Packit 37d9e7
	t/01_compile.t
Packit 37d9e7
	t/02_main.t
Packit 37d9e7
	t/03_all.t
Packit 37d9e7
	t/04_codelike.t
Packit 37d9e7
	t/05_typelike.t
Packit 37d9e7
	t/06_invocant.t
Packit 37d9e7
	t/07_handle.t
Packit 37d9e7
	t/08_driver.t
Packit 37d9e7
	t/09_insideout.t
Packit 37d9e7
};
Packit 37d9e7
if ( $make_xs ) {
Packit 37d9e7
	foreach my $file ( @tests ) {
Packit 37d9e7
		# Load the original
Packit 37d9e7
		local *FILE;
Packit 37d9e7
		local $/ = undef;
Packit 37d9e7
		open( FILE, "<$file" ) or die("Failed to open '$file'");
Packit 37d9e7
		my $buffer = <FILE>;
Packit 37d9e7
		close( FILE ) or die("Failed to close '$file'");
Packit 37d9e7
Packit 37d9e7
		# Convert it to a pure perl version
Packit 37d9e7
		$file   =~ s/0/1/;
Packit 37d9e7
		$buffer =~ s/0;/1;/;
Packit 37d9e7
Packit 37d9e7
		# Write the pure perl version
Packit 37d9e7
		open( FILE, ">$file" ) or die("Failed to open '$file'");
Packit 37d9e7
		print FILE $buffer;
Packit 37d9e7
		close( FILE ) or die("Failed to close '$file'");
Packit 37d9e7
	}
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
my @clean = (
Packit 37d9e7
	# 'test.c',
Packit 37d9e7
	'*.old'
Packit 37d9e7
);
Packit 37d9e7
if ( $make_xs ) {
Packit 37d9e7
	push @clean, @tests;
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
WriteMakefile(
Packit 37d9e7
	# We created our own META.yml
Packit 37d9e7
	# NO_META            => 1,
Packit 37d9e7
	NAME               => 'Params::Util',
Packit 37d9e7
	ABSTRACT           => 'Simple, compact and correct param-checking functions',
Packit 37d9e7
	VERSION_FROM       => 'lib/Params/Util.pm',
Packit 37d9e7
	AUTHOR             => 'Adam Kennedy <adamk@cpan.org>',
Packit 37d9e7
	LICENSE            => 'perl',
Packit 37d9e7
	DEFINE             => '-DPERL_EXT',
Packit 37d9e7
	MIN_PERL_VERSION   => '5.00503',
Packit 37d9e7
	CONFIGURE_REQUIRES => {
Packit 37d9e7
		'ExtUtils::MakeMaker' => '6.52',
Packit 37d9e7
		'ExtUtils::CBuilder'  => '0.27',
Packit 37d9e7
	},
Packit 37d9e7
	PREREQ_PM => {
Packit 37d9e7
		'Scalar::Util' => $make_xs ? '1.18' : '1.10',
Packit 37d9e7
	},
Packit 37d9e7
	BUILD_REQUIRES => {
Packit 37d9e7
		'ExtUtils::MakeMaker' => '6.52',
Packit 37d9e7
		'Test::More'          => '0.42',
Packit 37d9e7
		'File::Spec'          => '0.80',
Packit 37d9e7
	},
Packit 37d9e7
Packit 37d9e7
	# Special stuff
Packit 37d9e7
	CONFIGURE     => sub {
Packit 37d9e7
		my $hash = $_[1];
Packit 37d9e7
		unless ( $make_xs ) {
Packit 37d9e7
			$hash->{XS} = {};
Packit 37d9e7
			$hash->{C}  = [];
Packit 37d9e7
		}
Packit 37d9e7
		return $hash;
Packit 37d9e7
	},
Packit 37d9e7
	clean => {
Packit 37d9e7
		FILES => join( ' ', @clean ),
Packit 37d9e7
	},
Packit 37d9e7
);
Packit 37d9e7
Packit 37d9e7
Packit 37d9e7
Packit 37d9e7
Packit 37d9e7
Packit 37d9e7
#####################################################################
Packit 37d9e7
# Support Functions (adapted from Module::Install)
Packit 37d9e7
Packit 37d9e7
# Modified from eumm-upgrade by Alexandr Ciornii.
Packit 37d9e7
sub WriteMakefile {
Packit 37d9e7
	my %params=@_;
Packit 37d9e7
	my $eumm_version=$ExtUtils::MakeMaker::VERSION;
Packit 37d9e7
	$eumm_version=eval $eumm_version;
Packit 37d9e7
	die "EXTRA_META is deprecated" if exists $params{EXTRA_META};
Packit 37d9e7
	die "License not specified" unless exists $params{LICENSE};
Packit 37d9e7
	if ( $params{BUILD_REQUIRES} and $eumm_version < 6.5503 ) {
Packit 37d9e7
		#EUMM 6.5502 has problems with BUILD_REQUIRES
Packit 37d9e7
		$params{PREREQ_PM} = {
Packit 37d9e7
			%{$params{PREREQ_PM} || {}},
Packit 37d9e7
			%{$params{BUILD_REQUIRES}},
Packit 37d9e7
		};
Packit 37d9e7
		delete $params{BUILD_REQUIRES};
Packit 37d9e7
	}
Packit 37d9e7
	delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;
Packit 37d9e7
	delete $params{MIN_PERL_VERSION}   if $eumm_version < 6.48;
Packit 37d9e7
	delete $params{META_MERGE}         if $eumm_version < 6.46;
Packit 37d9e7
	delete $params{META_ADD}           if $eumm_version < 6.46;
Packit 37d9e7
	delete $params{LICENSE}            if $eumm_version < 6.31;
Packit 37d9e7
	delete $params{AUTHOR}             if $] < 5.005;
Packit 37d9e7
	delete $params{ABSTRACT_FROM}      if $] < 5.005;
Packit 37d9e7
	delete $params{BINARY_LOCATION}    if $] < 5.005;
Packit 37d9e7
	ExtUtils::MakeMaker::WriteMakefile(%params);
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
# Secondary compile testing via ExtUtils::CBuilder
Packit 37d9e7
sub can_xs {
Packit 37d9e7
	# Do we have the configure_requires checker?
Packit 37d9e7
	local $@;
Packit 37d9e7
	eval "require ExtUtils::CBuilder;";
Packit 37d9e7
	if ( $@ ) {
Packit 37d9e7
		# They don't obey configure_requires, so it is
Packit 37d9e7
		# someone old and delicate. Try to avoid hurting
Packit 37d9e7
		# them by falling back to an older simpler test.
Packit 37d9e7
		return can_cc();
Packit 37d9e7
	}
Packit 37d9e7
Packit 37d9e7
	# Do a simple compile that consumes the headers we need
Packit 37d9e7
	my @libs    = ();
Packit 37d9e7
	my $object  = undef;
Packit 37d9e7
	my $builder = ExtUtils::CBuilder->new( quiet => 1 );
Packit 37d9e7
	unless ( $builder->have_compiler ) {
Packit 37d9e7
		# Lack of a compiler at all
Packit 37d9e7
		return 0;
Packit 37d9e7
	}
Packit 37d9e7
Packit 37d9e7
Packit 37d9e7
	# Write a C file representative of what XS becomes
Packit 37d9e7
	require File::Temp;
Packit 37d9e7
	my ( $FH, $tmpfile ) = File::Temp::tempfile(
Packit 37d9e7
		"sanexs-XXXXX",
Packit 37d9e7
		SUFFIX => '.c',
Packit 37d9e7
	);
Packit 37d9e7
	binmode $FH;
Packit 37d9e7
	print $FH <<'END_C';
Packit 37d9e7
#include "EXTERN.h"
Packit 37d9e7
#include "perl.h"
Packit 37d9e7
#include "XSUB.h"
Packit 37d9e7
Packit 37d9e7
int main(int argc, char **argv) {
Packit 37d9e7
    return 0;
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
int boot_sanexs() {
Packit 37d9e7
    return 1;
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
END_C
Packit 37d9e7
	close $FH;
Packit 37d9e7
Packit 37d9e7
	eval {
Packit 37d9e7
		$object = $builder->compile(
Packit 37d9e7
			source => $tmpfile,
Packit 37d9e7
		);
Packit 37d9e7
		@libs = $builder->link(
Packit 37d9e7
			objects     => $object,
Packit 37d9e7
			module_name => 'sanexs',
Packit 37d9e7
		);
Packit 37d9e7
	};
Packit 37d9e7
	my $broken = !! $@;
Packit 37d9e7
	foreach ( $tmpfile, $object, @libs ) {
Packit 37d9e7
		next unless defined $_;
Packit 37d9e7
		1 while unlink $_;
Packit 37d9e7
	}
Packit 37d9e7
Packit 37d9e7
	if ( $broken ) {
Packit 37d9e7
		### NOTE: Don't do this in a production release.
Packit 37d9e7
		# Compiler is officially screwed, you don't deserve
Packit 37d9e7
		# to do any of our downstream depedencies as you'll
Packit 37d9e7
		# probably end up choking on them as well.
Packit 37d9e7
		# Trigger an NA for their own protection.
Packit 37d9e7
		print "Unresolvable broken external dependency.\n";
Packit 37d9e7
		print "This package requires a C compiler with full perl headers.\n";
Packit 37d9e7
		print "Trivial test code using them failed to compile.\n";
Packit 37d9e7
		print STDERR "NA: Unable to build distribution on this platform.\n";
Packit 37d9e7
		exit(0);
Packit 37d9e7
	}
Packit 37d9e7
Packit 37d9e7
	return 1;
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
sub can_cc {
Packit 37d9e7
	my @chunks = split(/ /, $Config::Config{cc}) or return;
Packit 37d9e7
Packit 37d9e7
	# $Config{cc} may contain args; try to find out the program part
Packit 37d9e7
	while ( @chunks ) {
Packit 37d9e7
		return can_run("@chunks") || (pop(@chunks), next);
Packit 37d9e7
	}
Packit 37d9e7
Packit 37d9e7
	return;
Packit 37d9e7
}
Packit 37d9e7
Packit 37d9e7
sub can_run {
Packit 37d9e7
	my ($cmd) = @_;
Packit 37d9e7
Packit 37d9e7
	my $_cmd = $cmd;
Packit 37d9e7
	return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd));
Packit 37d9e7
Packit 37d9e7
	for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
Packit 37d9e7
		next if $dir eq '';
Packit 37d9e7
		my $abs = File::Spec->catfile($dir, $cmd);
Packit 37d9e7
		return $abs if (-x $abs or $abs = MM->maybe_command($abs));
Packit 37d9e7
	}
Packit 37d9e7
Packit 37d9e7
	return;
Packit 37d9e7
}