- Timestamp:
- 12/09/05 04:08:27 (3 years ago)
- Location:
- inc/Module/Install
- Files:
-
- 2 modified
-
Metadata.pm (modified) (11 diffs)
-
Win32.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
inc/Module/Install/Metadata.pm
r973 r8126 1 #line 1 "inc/Module/Install/Metadata.pm - / Users/ingy/local/lib/perl5/site_perl/5.8.6/Module/Install/Metadata.pm"1 #line 1 "inc/Module/Install/Metadata.pm - /usr/local/lib/perl5/site_perl/5.8.7/Module/Install/Metadata.pm" 2 2 package Module::Install::Metadata; 3 use Module::Install::Base; @ISA = qw(Module::Install::Base); 3 use Module::Install::Base; 4 @ISA = qw(Module::Install::Base); 4 5 5 6 $VERSION = '0.04'; … … 10 11 sub Meta { shift } 11 12 12 my @scalar_keys = qw (13 my @scalar_keys = qw< 13 14 name module_name version abstract author license 14 distribution_type sign perl_version 15 ); 16 my @tuple_keys = qw(build_requires requires recommends bundles); 15 distribution_type perl_version tests 16 >; 17 my @tuple_keys = qw< 18 build_requires requires recommends bundles 19 >; 17 20 18 21 foreach my $key (@scalar_keys) { … … 25 28 } 26 29 30 sub sign { 31 my $self = shift; 32 $self->{'values'}{'sign'} = ( @_ ? $_[0] : 1 ); 33 return $self; 34 } 35 27 36 foreach my $key (@tuple_keys) { 28 37 *$key = sub { 29 38 my $self = shift; 30 39 return $self->{'values'}{$key} unless @_; 40 31 41 my @rv; 32 42 while (@_) { 33 my $module = shift or last;43 my $module = shift or last; 34 44 my $version = shift || 0; 35 if ( $module eq 'perl') {45 if ( $module eq 'perl' ) { 36 46 $version =~ s{^(\d+)\.(\d+)\.(\d+)} 37 47 {$1 + $2/1_000 + $3/1_000_000}e; … … 39 49 next; 40 50 } 41 my $rv = [$module, $version]; 42 push @{$self->{'values'}{$key}}, $rv; 51 my $rv = [ $module, $version ]; 43 52 push @rv, $rv; 44 53 } 45 return @rv; 54 push @{ $self->{'values'}{$key} }, @rv; 55 @rv; 46 56 }; 47 57 } 48 58 59 sub all_from { 60 my ( $self, $file ) = @_; 61 62 $self->version_from($file); 63 $self->perl_version_from($file); 64 65 # The remaining probes read from POD sections; if the file 66 # has an accompanying .pod, use that instead 67 my $pod = $file; 68 if ( $pod =~ s/\.pm$/.pod/i and -e $pod ) { 69 $file = $pod; 70 } 71 72 $self->abstract_from($file); 73 $self->license_from($file); 74 } 75 76 sub feature { 77 my $self = shift; 78 my $name = shift; 79 my $features = ( $self->{'values'}{'features'} ||= [] ); 80 81 my $mods; 82 83 if ( @_ == 1 and ref( $_[0] ) ) { 84 # The user used ->feature like ->features by passing in the second 85 # argument as a reference. Accomodate for that. 86 $mods = $_[0]; 87 } 88 else { 89 $mods = \@_; 90 } 91 92 my $count = 0; 93 push @$features, ( 94 $name => [ 95 map { 96 ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ 97 : @$_ 98 : $_ 99 } @$mods 100 ] 101 ); 102 103 return @$features; 104 } 105 49 106 sub features { 50 107 my $self = shift; 51 while (my ($name, $mods) = splice(@_, 0, 2)) { 52 my $count = 0; 53 push @{$self->{'values'}{'features'}}, ($name => [ 54 map { (++$count % 2 and ref($_) and ($count += $#$_)) ? @$_ : $_ } @$mods 55 ] ); 56 } 57 return @{$self->{'values'}{'features'}}; 108 while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { 109 $self->feature( $name, @$mods ); 110 } 111 return @{ $self->{'values'}{'features'} }; 58 112 } 59 113 … … 61 115 my $self = shift; 62 116 my $type = shift; 63 push @{ $self->{'values'}{'no_index'}{$type}}, @_ if $type;117 push @{ $self->{'values'}{'no_index'}{$type} }, @_ if $type; 64 118 return $self->{'values'}{'no_index'}; 65 119 } 66 120 67 121 sub _dump { 68 my $self = shift;69 my $package = ref( $self->_top);122 my $self = shift; 123 my $package = ref( $self->_top ); 70 124 my $version = $self->_top->VERSION; 71 my %values = %{$self->{'values'}};125 my %values = %{ $self->{'values'} }; 72 126 73 127 delete $values{sign}; 74 if ( my $perl_version = delete $values{perl_version}) {75 # Always canonical to three-dot version 76 $perl_version =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2), int($3))}e77 if $perl_version >= 5.006;78 $values{requires} = [79 [perl => $perl_version],80 @{$values{requires}||[]},81 ];128 if ( my $perl_version = delete $values{perl_version} ) { 129 130 # Always canonical to three-dot version 131 $perl_version =~ 132 s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2), int($3))}e 133 if $perl_version >= 5.006; 134 $values{requires} = 135 [ [ perl => $perl_version ], @{ $values{requires} || [] }, ]; 82 136 } 83 137 84 138 warn "No license specified, setting license = 'unknown'\n" 85 unless $values{license};86 87 $values{license} ||= 'unknown';139 unless $values{license}; 140 141 $values{license} ||= 'unknown'; 88 142 $values{distribution_type} ||= 'module'; 89 $values{name} ||= do {143 $values{name} ||= do { 90 144 my $name = $values{module_name}; 91 145 $name =~ s/::/-/g; … … 93 147 } if $values{module_name}; 94 148 95 if ( $values{name} =~ /::/) {149 if ( $values{name} =~ /::/ ) { 96 150 my $name = $values{name}; 97 151 $name =~ s/::/-/g; … … 106 160 next unless exists $values{$key}; 107 161 $dump .= "$key:\n"; 108 foreach ( @{$values{$key}}) {162 foreach ( @{ $values{$key} } ) { 109 163 $dump .= " $_->[0]: $_->[1]\n"; 110 164 } 111 165 } 112 166 113 if ( my $no_index = $values{no_index}) {114 push @{ $no_index->{'directory'}}, 'inc';167 if ( my $no_index = $values{no_index} ) { 168 push @{ $no_index->{'directory'} }, 'inc'; 115 169 require YAML; 116 170 local $YAML::UseHeader = 0; 117 $dump .= YAML::Dump( { no_index => $no_index});171 $dump .= YAML::Dump( { no_index => $no_index } ); 118 172 } 119 173 else { … … 124 178 META 125 179 } 126 180 127 181 $dump .= "generated_by: $package version $version\n"; 128 182 return $dump; … … 132 186 my $self = shift; 133 187 $self->include_deps( 'YAML', 0 ); 188 134 189 require YAML; 135 my $data = YAML::LoadFile( 'META.yml' ); 190 my $data = YAML::LoadFile('META.yml'); 191 136 192 # Call methods explicitly in case user has already set some values. 137 while ( my ( $key, $value) = each %$data ) {138 next unless $self->can( $key);139 if ( ref $value eq 'HASH') {140 while ( my ($module, $version) = each %$value) {141 $self-> $key($module => $version );193 while ( my ( $key, $value ) = each %$data ) { 194 next unless $self->can($key); 195 if ( ref $value eq 'HASH' ) { 196 while ( my ( $module, $version ) = each %$value ) { 197 $self->can($key)->($self, $module => $version ); 142 198 } 143 199 } 144 200 else { 145 $self-> $key( $value);201 $self->can($key)->($self, $value); 146 202 } 147 203 } … … 153 209 return $self unless $self->is_admin; 154 210 155 META_NOT_OURS: {211 META_NOT_OURS: { 156 212 local *FH; 157 if ( open FH, "META.yml") {213 if ( open FH, "META.yml" ) { 158 214 while (<FH>) { 159 215 last META_NOT_OURS if /^generated_by: Module::Install\b/; … … 163 219 } 164 220 165 warn "Writing META.yml\n"; 221 print "Writing META.yml\n"; 222 223 local *META; 166 224 open META, "> META.yml" or warn "Cannot write to META.yml: $!"; 167 225 print META $self->_dump; 168 226 close META; 227 169 228 return $self; 170 229 } 171 230 172 231 sub version_from { 173 my ( $self, $version_from) = @_;232 my ( $self, $file ) = @_; 174 233 require ExtUtils::MM_Unix; 175 my $version = ExtUtils::MM_Unix->parse_version($version_from); 176 177 if ($version !~ /^[\w\-\+\.]+/ and $] >= 5.006) { 178 $version = sprintf '%vd', $version; 179 } 180 181 $self->version($version); 234 $self->version( ExtUtils::MM_Unix->parse_version($file) ); 182 235 } 183 236 184 237 sub abstract_from { 185 my ( $self, $abstract_from) = @_;238 my ( $self, $file ) = @_; 186 239 require ExtUtils::MM_Unix; 187 240 $self->abstract( 188 bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix') 189 ->parse_abstract($abstract_from) 190 ); 241 bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix' ) 242 ->parse_abstract($file) ); 243 } 244 245 sub _slurp { 246 my ( $self, $file ) = @_; 247 248 local *FH; 249 open FH, "< $file" or die "Cannot open $file.pod: $!"; 250 do { local $/; <FH> }; 251 } 252 253 sub perl_version_from { 254 my ( $self, $file ) = @_; 255 256 if ( 257 $self->_slurp($file) =~ m/ 258 ^ 259 use \s* 260 v? 261 ([\d\.]+) 262 \s* ; 263 /ixms 264 ) 265 { 266 $self->perl_version($1); 267 } 268 else { 269 warn "Cannot determine perl version info from $file\n"; 270 return; 271 } 272 } 273 274 sub license_from { 275 my ( $self, $file ) = @_; 276 277 if ( 278 $self->_slurp($file) =~ m/ 279 =head \d \s+ 280 (?:licen[cs]e|licensing|copyright|legal)\b 281 (.*?) 282 (=head\\d.*|=cut.*|) 283 \z 284 /ixms 285 ) 286 { 287 my $license_text = $1; 288 my @phrases = ( 289 'under the same (?:terms|license) as perl itself' => 'perl', 290 'GNU public license' => 'gpl', 291 'GNU lesser public license' => 'gpl', 292 'BSD license' => 'bsd', 293 'Artistic license' => 'artistic', 294 'GPL' => 'gpl', 295 'LGPL' => 'lgpl', 296 'BSD' => 'bsd', 297 'Artistic' => 'artistic', 298 ); 299 while ( my ( $pattern, $license ) = splice( @phrases, 0, 2 ) ) { 300 $pattern =~ s{\s+}{\\s+}g; 301 if ( $license_text =~ /\b$pattern\b/i ) { 302 $self->license($license); 303 return 1; 304 } 305 } 306 } 307 308 warn "Cannot determine license info from $file\n"; 309 return 'unknown'; 191 310 } 192 311 -
inc/Module/Install/Win32.pm
r4321 r8126 1 #line 1 "inc/Module/Install/Win32.pm - / Users/ingy/local/lib/perl5/site_perl/5.8.6/Module/Install/Win32.pm"1 #line 1 "inc/Module/Install/Win32.pm - /usr/local/lib/perl5/site_perl/5.8.7/Module/Install/Win32.pm" 2 2 package Module::Install::Win32; 3 3 use Module::Install::Base; @ISA = qw(Module::Install::Base); … … 18 18 $Config::Config{make} =~ /^nmake\b/i and 19 19 $^O eq 'MSWin32' and 20 !$self->can_run('nmake .exe')20 !$self->can_run('nmake') 21 21 ); 22 22
