use dist-checkconflicts
[gitmo/Class-MOP.git] / Makefile.PL
1 use strict;
2 use warnings;
3 use inc::Module::Install;
4 use Module::Install::AuthorRequires;
5 use Module::Install::ExtraTests;
6 use 5.008001;
7
8 check_conflicts();
9
10 name 'Class-MOP';
11 perl_version '5.008001';
12 all_from 'lib/Class/MOP.pm';
13 license 'perl';
14
15 require Config;
16 my $ccflags = ( $Config::Config{ccflags} || '' ) . ' -I.';
17
18 if ( -d '.git' || $ENV{MAINTAINER_MODE} ) {
19     $ccflags .= ' -Wall -Wdeclaration-after-statement';
20 }
21
22 requires 'Carp';
23 requires 'Data::OptList';
24 requires 'Devel::GlobalDestruction';
25 requires 'Dist::CheckConflicts';
26 requires 'Eval::Closure';
27 requires 'List::MoreUtils'             => '0.12';
28 requires 'MRO::Compat'                 => '0.05';
29 requires 'Package::DeprecationManager' => '0.10';
30 requires 'Package::Stash'              => '0.15';
31 requires 'Package::Stash::XS'          => '0.17';
32 requires 'Scalar::Util'                => '1.18';
33 requires 'Sub::Name'                   => '0.05';
34 requires 'Try::Tiny'                   => '0.02';
35 requires 'Task::Weaken';
36
37 test_requires 'File::Spec';
38 test_requires 'Test::More'     => '0.88';
39 test_requires 'Test::Fatal'    => '0.001';
40 test_requires 'Test::Requires' => '0.05';
41
42 author_requires 'Algorithm::C3';
43 author_requires 'Module::Info';
44 author_requires 'Test::LeakTrace';
45 author_requires 'Test::NoTabs';
46 author_requires 'Test::Output';
47 author_requires 'Test::Spelling';
48
49 configure_requires 'Dist::CheckConflicts';
50 configure_requires 'Package::Stash::Conflicts';
51
52 repository 'git://git.moose.perl.org/Class-MOP.git';
53 add_metadata(x_authority => 'cpan:STEVAN');
54
55 extra_tests();
56
57 makemaker_args( CCFLAGS => $ccflags );
58
59 {
60     my (@clean, @OBJECT, %XS);
61
62     for my $xs (<xs/*.xs>) {
63         (my $c = $xs) =~ s/\.xs$/.c/i;
64         (my $o = $xs) =~ s/\.xs$/\$(OBJ_EXT)/i;
65
66         $XS{$xs} = $c;
67         push @OBJECT, $o;
68         push @clean, $o;
69     }
70
71     for my $c (<*.c>) {
72         (my $o = $c) =~ s/\.c$/\$(OBJ_EXT)/i;
73         push @OBJECT, $o;
74         push @clean, $o;
75     }
76
77     makemaker_args(
78         clean  => { FILES => join(q{ }, @clean) },
79         OBJECT => join (q{ }, @OBJECT),
80         XS     => \%XS,
81     );
82 }
83
84 postamble(<<'EOM');
85 $(OBJECT) : mop.h
86 EOM
87
88 WriteAll();
89
90 sub check_conflicts {
91     if (eval { require 'lib/Class/MOP/Conflicts.pm'; 1; }) {
92         if (eval { Class::MOP::Conflicts->check_conflicts; 1 }) {
93             return;
94         }
95         else {
96             my $err = $@;
97             $err =~ s/^/    /mg;
98             warn "***\n$err***\n";
99         }
100     }
101     else {
102         print <<'EOF';
103 ***
104     Your toolchain doesn't support configure_requires, so Dist::CheckConflicts
105     hasn't been installed yet. You should check for conflicting modules
106     manually using the 'cmop-conflicts' script that is installed with
107     this distribution once the installation finishes.
108 ***
109 EOF
110     }
111
112     # More or less copied from Module::Build
113     return if $ENV{PERL_MM_USE_DEFAULT};
114     return unless -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT));
115
116     sleep 4;
117 }
118
119 package MY;
120
121 use Config;
122
123 sub const_cccmd {
124     my $ret = shift->SUPER::const_cccmd(@_);
125     return q{} unless $ret;
126
127     if ($Config{cc} =~ /^cl\b/i) {
128         warn 'you are using MSVC... my condolences.';
129         $ret .= ' /Fo$@';
130     }
131     else {
132         $ret .= ' -o $@';
133     }
134
135     return $ret;
136 }