File: Makefile.PL

package info (click to toggle)
libparams-validate-perl 0.76-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 316 kB
  • ctags: 214
  • sloc: perl: 2,230; makefile: 36
file content (127 lines) | stat: -rw-r--r-- 2,500 bytes parent folder | download
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# The perl/C checking voodoo is stolen from Graham Barr's
# Scalar-List-Utils distribution.

use strict;

use ExtUtils::MakeMaker;
use Config qw(%Config);
use File::Spec;

my $no_xs;
for (@ARGV)
{
    /^--pm/ and $no_xs = 1;
    /^--xs/ and $no_xs = 0;
}

exit if defined $no_xs;

print "Testing if you have a C compiler\n";

unless ( open F, ">test.c" )
{
    warn "Cannot write test.c, skipping test compilation and install pure Perl version.\n";
    no_cc();
}

print F <<'EOF';
int main() { return 0; }
EOF

close F or no_cc();

system("$Config{make} test$Config{obj_ext}") and no_cc();

my @clean;
if ( -d 'CVS' )
{
    local *DIR;
    opendir DIR, "t" or die "Cannot read t: $!";

    foreach my $file ( grep { /^\d.+\.t$/ } readdir DIR )
    {
        next if $file eq '99-pod.t';

        my $real_file = File::Spec->catfile( 't', $file );

        local *F;
        open F, "<$real_file" or die "Cannot read $real_file: $!";

        my $shbang = <F>;
        my $test = do { local $/; <F> };

        close F;

        $test = "$shbang\nBEGIN { \$ENV{PV_TEST_PERL} = 1 }\n\n$test";

        my $new_file = File::Spec->catfile( 't', "zz_$file" );
        open F, ">$new_file" or die "Cannot write $new_file: $!";

        print F $test;

        close F;

        push @clean, $new_file;
    }
}

write_makefile();

sub write_makefile
{
    print <<'EOF';

*** NOTE ***

You can safely ignore the warnings below about 'Too late to run
CHECK/INIT blocks'.

*************

EOF

    my %prereq = ( 'Test::More' => 0 );
    $prereq{'Attribute::Handlers'} = 0 if $] >= 5.006;

    WriteMakefile( VERSION_FROM    => "lib/Params/Validate.pm",
                   NAME            => "Params::Validate",
                   PREREQ_PM       => \%prereq,
                   CONFIGURE       => \&init,
                   clean           => { FILES => "test.c test.o @clean" },
                   ( $] >= 5.005 ?
                     ( ABSTRACT_FROM => 'lib/Params/Validate.pm',
                       AUTHOR        => 'Dave Rolsky, <autarch@urth.org>') :
                     ()
                   ),
                 );
}

sub init
{
    my $hash = $_[1];

    if ($no_xs)
    {
        @{ $hash }{ 'XS', 'C' } = ( {}, [] );
    }

    $hash;
}

sub no_cc
{
    $no_xs = 1;
    print <<'EOF';

 I cannot determine if you have a C compiler
 so I will install a perl-only implementation

 You can force installation of the XS version with

    perl Makefile.PL --xs

EOF

    write_makefile();
    exit;
}