1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# -*- perl -*-
BEGIN { require 5.006; } # allow CPAN testers to get the point
use strict;
use warnings;
use Config;
use File::Spec;
use ExtUtils::MakeMaker;
my $PERL_CORE = grep { $_ eq 'PERL_CORE=1' } @ARGV;
my $do_xs = $PERL_CORE || can_cc();
for (@ARGV) {
/^-pm/ and $do_xs = 0;
/^-xs/ and $do_xs = 1;
}
WriteMakefile(
NAME => q[List::Util],
ABSTRACT => q[Common Scalar and List utility subroutines],
AUTHOR => q[Graham Barr <gbarr@cpan.org>],
DEFINE => q[-DPERL_EXT],
DISTNAME => q[Scalar-List-Utils],
VERSION_FROM => 'lib/List/Util.pm',
# We go through the ListUtil.xs trickery to foil platforms
# that have the feature combination of
# (1) static builds
# (2) allowing only one object by the same name in the static library
# (3) the object name matching being case-blind
# This means that we can't have the top-level util.o
# and the extension-level Util.o in the same build.
# One such platform is the POSIX-BC BS2000 EBCDIC mainframe platform.
XS => {'ListUtil.xs' => 'ListUtil.c'},
OBJECT => 'ListUtil$(OBJ_EXT)',
( $PERL_CORE
? ()
: (
INSTALLDIRS => q[perl],
PREREQ_PM => {'Test::More' => 0,},
(eval { ExtUtils::MakeMaker->VERSION(6.31) } ? (LICENSE => 'perl') : ()),
($do_xs ? () : (XS => {}, C => [], OBJECT => '')),
( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? (
META_MERGE => {
resources => { ##
repository => 'http://github.com/gbarr/Scalar-List-Utils',
},
}
)
: ()
),
)
),
);
sub can_cc {
foreach my $cmd (split(/ /, $Config::Config{cc})) {
my $_cmd = $cmd;
return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd));
for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
my $abs = File::Spec->catfile($dir, $_[1]);
return $abs if (-x $abs or $abs = MM->maybe_command($abs));
}
}
return;
}
package MY;
sub init_PM {
my $self = shift;
$self->SUPER::init_PM(@_);
return if $do_xs;
my $pm = $self->{PM};
my $pm_file = File::Spec->catfile(qw(lib List Util XS.pm));
# When installing pure perl, install XS.pp as XS.pm
$self->{PM}{'XS.pp'} = delete $self->{PM}{$pm_file};
}
|