Commit | Line | Data |
---|---|---|
df61f5a9 SH |
1 | #!/usr/bin/perl -w\r |
2 | use 5.001; #not tested\r | |
3 | use ExtUtils::MakeMaker;\r | |
4 | use Config;\r | |
5 | use strict;\r | |
6 | # See lib/ExtUtils/MakeMaker.pm for details of how to influence\r | |
7 | # the contents of the Makefile that is written.\r | |
8 | unless ($^O eq "MSWin32" || $^O eq "cygwin" || $^O eq "interix") { #not tested on Interix\r | |
9 | die "OS unsupported\n";\r | |
10 | }\r | |
11 | \r | |
12 | WriteMakefile1(\r | |
13 | 'NAME' => 'Win32API::File',\r | |
14 | 'VERSION_FROM' => 'File.pm', # finds $VERSION\r | |
15 | ( $Config{archname} =~ /-object\b/i ? ( 'CAPI' => 'TRUE' ) : () ),\r | |
16 | 'AUTHOR' => 'Tye McQueen <tye@metronet.com>',\r | |
17 | 'ABSTRACT_FROM' => 'File.pm',\r | |
18 | 'postamble' => { IMPORT_LIST => [qw(/._/ !/[a-z]/ :MEDIA_TYPE)],\r | |
19 | IFDEF => "!/[a-z\\d]/",\r | |
20 | CPLUSPLUS => 1,\r | |
21 | WRITE_PERL => 1,\r | |
22 | #PERL_FILE_LIST => ['File.pm'], #added by Chorny\r | |
23 | #C_FILE_LIST => ['File.xs'], #added by Chorny\r | |
24 | # Comment out next line to rebuild constants defs:\r | |
25 | NO_REBUILD => 1,\r | |
26 | },\r | |
27 | ( ! $Config{libperl} ? () : ( LIBPERL_A => $Config{libperl} ) ),\r | |
28 | 'INSTALLDIRS' => (($] >= 5.008009 and $] < 5.012) ? 'perl' : 'site'),\r | |
29 | 'LICENSE' => 'perl',\r | |
30 | 'MIN_PERL_VERSION' => 5.001,\r | |
31 | 'PREREQ_PM' => {\r | |
32 | 'Math::BigInt' => 0,\r | |
33 | 'Win32' => 0,\r | |
34 | 'Carp' => 0,\r | |
35 | 'IO::File' => 0,\r | |
36 | },\r | |
37 | TEST_REQUIRES => {\r | |
38 | 'File::Spec' => 0,\r | |
39 | 'Test::More' => 0,\r | |
40 | },\r | |
41 | \r | |
42 | META_MERGE => {\r | |
43 | resources => {\r | |
44 | repository => 'http://github.com/chorny/Win32API-File',\r | |
45 | },\r | |
46 | },\r | |
47 | $^O =~/win/i ? (\r | |
48 | dist => {\r | |
49 | TAR => 'ptar',\r | |
50 | TARFLAGS => '-c -C -f',\r | |
51 | },\r | |
52 | ) : (),\r | |
53 | );\r | |
54 | \r | |
55 | # Replacement for MakeMaker's "const2perl section" for versions\r | |
56 | # of MakeMaker prior to the addition of this functionality:\r | |
57 | sub MY::postamble\r | |
58 | {\r | |
59 | my( $self, %attribs )= @_;\r | |
60 | \r | |
61 | # Don't do anything if MakeMaker has const2perl\r | |
62 | # that already took care of all of this:\r | |
63 | return unless %attribs;\r | |
64 | \r | |
65 | # Don't require these here if we just C<return> above:\r | |
66 | eval "use lib 'inc'; use ExtUtils::Myconst2perl qw(ParseAttribs); 1" or die "$@";\r | |
67 | eval "use ExtUtils::MakeMaker qw(neatvalue); 1" or die "$@";\r | |
68 | \r | |
69 | # If only one module, can skip one level of indirection:\r | |
70 | my $hvAttr= \%attribs;\r | |
71 | if( $attribs{IMPORT_LIST} ) {\r | |
72 | $hvAttr= { $self->{NAME} => \%attribs };\r | |
73 | }\r | |
74 | \r | |
75 | my( $module, @m, $_final, @clean, @realclean );\r | |
76 | foreach $module ( keys %$hvAttr ) {\r | |
77 | my( $outfile, @perlfiles, @cfiles, $bin, $obj, $final, $noreb );\r | |
78 | \r | |
79 | # Translate user-friendly options into coder-friendly specifics:\r | |
80 | ParseAttribs( $module, $hvAttr->{$module}, { OUTFILE => \$outfile,\r | |
81 | C_FILE_LIST => \@perlfiles, PERL_FILE_LIST => \@cfiles,\r | |
82 | OBJECT => \$obj, BINARY => \$bin, FINAL_PERL => \$final,\r | |
83 | NO_REBUILD => \$noreb } );\r | |
84 | die "IFDEF option in Makefile.PL must be string, not code ref.\n"\r | |
85 | if ref $hvAttr->{$module}->{IFDEF};\r | |
86 | die qq{IFDEF option in Makefile.PL must not contain quotes (").\n}\r | |
87 | if ref $hvAttr->{$module}->{IFDEF};\r | |
88 | \r | |
89 | # How to create F<$outfile> via ExtUtils::Myconst2perl::Myconst2perl:\r | |
90 | push @m, "\r | |
91 | $outfile: @perlfiles @cfiles Makefile" . '\r | |
92 | $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Myconst2perl \\\r | |
93 | -e "my %attribs;" \\\r | |
94 | ';\r | |
95 | $m[-1] =~ s/^/##/gm if $noreb;\r | |
96 | my( $key, $value );\r | |
97 | while( ( $key, $value )= each %{$hvAttr->{$module}} ) {\r | |
98 | push @m, '-e "$$attribs{' . $key . '}= ' # try {{ }} for dmake\r | |
99 | . neatvalue($value) . qq[;" \\\n\t ];\r | |
100 | $m[-1] =~ s/^/##/gm if $noreb;\r | |
101 | }\r | |
102 | push @m, '-e "Myconst2perl(' . neatvalue($module) . ",%attribs)\"\n";\r | |
103 | \r | |
104 | # If requested extra work to generate Perl instead of XS code:\r | |
105 | if( $bin ) {\r | |
106 | my @path= split /::/, $module;\r | |
107 | my $_final= $final;\r | |
108 | $_final =~ s/\W/_/g;\r | |
109 | \r | |
110 | # How to compile F<$outfile> and then run it to produce F<$final>:\r | |
111 | push @m, "\r | |
112 | $bin: $outfile" . '\r | |
113 | $(CC) $(INC) $(CCFLAGS) $(OPTIMIZE) $(PERLTYPE) $(LARGE) \\\r | |
114 | $(SPLIT) $(DEFINE_VERSION) $(XS_DEFINE_VERSION) -I$(PERL_INC) \\\r | |
115 | $(DEFINE)' . $outfile . " "\r | |
116 | . $self->catfile(qw[ $(PERL_INC) $(LIBPERL_A) ]) . " -o $bin\r | |
117 | \r | |
118 | $final: $bin\r | |
119 | " . $self->catfile(".",$bin) . " >$final\n";\r | |
120 | $m[-1] =~ s/^/##/gm if $noreb;\r | |
121 | \r | |
122 | # Make sure the rarely-used $(INST_ARCHLIB) directory exists:\r | |
123 | push @m, $self->dir_target('$(INST_ARCHLIB)');\r | |
124 | \r | |
125 | ##warn qq{$path[-1].pm should C<require "},\r | |
126 | ## join("/",@path,$final), qq{">.\n};\r | |
127 | # Install F<$final> whenever regular pm_to_blib target is built:\r | |
128 | push @m, "\r | |
129 | pm_to_blib: ${_final}_to_blib\r | |
130 | \r | |
131 | ${_final}_to_blib: $final\r | |
132 | " . '@$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \\\r | |
133 | "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \\\r | |
134 | -e "pm_to_blib({ ',neatvalue($final),',',\r | |
135 | neatvalue($self->catfile('$(INST_ARCHLIB)',@path,$final)), ' },',\r | |
136 | neatvalue($self->catfile(qw[$(INST_LIB) auto])), ')"\r | |
137 | @$(TOUCH) ', $_final, "_to_blib\r | |
138 | \r | |
139 | realclean ::\r | |
140 | $self->{RM_RF} ", $self->catfile('$(INST_ARCHLIB)', $path[0]), "\n";\r | |
141 | \r | |
142 | push( @clean, $outfile, $bin, $obj, $_final . "_to_blib" );\r | |
143 | push( @realclean, $final ) unless $noreb;\r | |
144 | } else {\r | |
145 | \r | |
146 | ##my $name= ( split /::/, $module )[-1];\r | |
147 | ##warn qq{$name.xs should C<#include "$final"> },\r | |
148 | ## qq{in the C<BOOT:> section\n};\r | |
149 | push( @realclean, $outfile ) unless $noreb;\r | |
150 | }\r | |
151 | }\r | |
152 | \r | |
153 | push @m, "\r | |
154 | clean ::\r | |
155 | $self->{RM_F} @clean\n" if @clean;\r | |
156 | push @m, "\r | |
157 | realclean ::\r | |
158 | $self->{RM_F} @realclean\n" if @realclean;\r | |
159 | return join('',@m);\r | |
160 | }\r | |
161 | \r | |
162 | \r | |
163 | sub WriteMakefile1 { #Compatibility code for old versions of EU::MM. Written by Alexandr Ciornii, version 0.23. Added by eumm-upgrade.\r | |
164 | my %params=@_;\r | |
165 | my $eumm_version=$ExtUtils::MakeMaker::VERSION;\r | |
166 | $eumm_version=eval $eumm_version;\r | |
167 | die "EXTRA_META is deprecated" if exists $params{EXTRA_META};\r | |
168 | die "License not specified" if not exists $params{LICENSE};\r | |
169 | if ($params{AUTHOR} and ref($params{AUTHOR}) eq 'ARRAY' and $eumm_version < 6.5705) {\r | |
170 | $params{META_ADD}->{author}=$params{AUTHOR};\r | |
171 | $params{AUTHOR}=join(', ',@{$params{AUTHOR}});\r | |
172 | }\r | |
173 | if ($params{TEST_REQUIRES} and $eumm_version < 6.64) {\r | |
174 | $params{BUILD_REQUIRES}={ %{$params{BUILD_REQUIRES} || {}} , %{$params{TEST_REQUIRES}} };\r | |
175 | delete $params{TEST_REQUIRES};\r | |
176 | }\r | |
177 | if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) {\r | |
178 | #EUMM 6.5502 has problems with BUILD_REQUIRES\r | |
179 | $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} };\r | |
180 | delete $params{BUILD_REQUIRES};\r | |
181 | }\r | |
182 | delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;\r | |
183 | delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48;\r | |
184 | delete $params{META_MERGE} if $eumm_version < 6.46;\r | |
185 | delete $params{META_ADD} if $eumm_version < 6.46;\r | |
186 | delete $params{LICENSE} if $eumm_version < 6.31;\r | |
187 | delete $params{AUTHOR} if $] < 5.005;\r | |
188 | delete $params{ABSTRACT_FROM} if $] < 5.005;\r | |
189 | delete $params{BINARY_LOCATION} if $] < 5.005;\r | |
190 | \r | |
191 | WriteMakefile(%params);\r | |
192 | }\r | |
193 | \r |