Changeset 8126 for inc

Show
Ignore:
Timestamp:
12/09/05 04:08:27 (3 years ago)
Author:
autrijus
Message:

* bring more stuff forward from M::I 0.40.

Location:
inc/Module/Install
Files:
2 modified

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" 
    22package Module::Install::Metadata; 
    3 use Module::Install::Base; @ISA = qw(Module::Install::Base); 
     3use Module::Install::Base; 
     4@ISA = qw(Module::Install::Base); 
    45 
    56$VERSION = '0.04'; 
     
    1011sub Meta { shift } 
    1112 
    12 my @scalar_keys = qw( 
     13my @scalar_keys = qw< 
    1314    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>; 
     17my @tuple_keys = qw< 
     18    build_requires requires recommends bundles 
     19>; 
    1720 
    1821foreach my $key (@scalar_keys) { 
     
    2528} 
    2629 
     30sub sign { 
     31    my $self = shift; 
     32    $self->{'values'}{'sign'} = ( @_ ? $_[0] : 1 ); 
     33    return $self; 
     34} 
     35 
    2736foreach my $key (@tuple_keys) { 
    2837    *$key = sub { 
    2938        my $self = shift; 
    3039        return $self->{'values'}{$key} unless @_; 
     40 
    3141        my @rv; 
    3242        while (@_) { 
    33             my $module  = shift or last; 
     43            my $module = shift or last; 
    3444            my $version = shift || 0; 
    35             if ($module eq 'perl') { 
     45            if ( $module eq 'perl' ) { 
    3646                $version =~ s{^(\d+)\.(\d+)\.(\d+)} 
    3747                             {$1 + $2/1_000 + $3/1_000_000}e; 
     
    3949                next; 
    4050            } 
    41             my $rv = [$module, $version]; 
    42             push @{$self->{'values'}{$key}}, $rv; 
     51            my $rv = [ $module, $version ]; 
    4352            push @rv, $rv; 
    4453        } 
    45         return @rv; 
     54        push @{ $self->{'values'}{$key} }, @rv; 
     55        @rv; 
    4656    }; 
    4757} 
    4858 
     59sub 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 
     76sub 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 
    49106sub features { 
    50107    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'} }; 
    58112} 
    59113 
     
    61115    my $self = shift; 
    62116    my $type = shift; 
    63     push @{$self->{'values'}{'no_index'}{$type}}, @_ if $type; 
     117    push @{ $self->{'values'}{'no_index'}{$type} }, @_ if $type; 
    64118    return $self->{'values'}{'no_index'}; 
    65119} 
    66120 
    67121sub _dump { 
    68     my $self = shift; 
    69     my $package = ref($self->_top); 
     122    my $self    = shift; 
     123    my $package = ref( $self->_top ); 
    70124    my $version = $self->_top->VERSION; 
    71     my %values = %{$self->{'values'}}; 
     125    my %values  = %{ $self->{'values'} }; 
    72126 
    73127    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))}e 
    77             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} || [] }, ]; 
    82136    } 
    83137 
    84138    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'; 
    88142    $values{distribution_type} ||= 'module'; 
    89     $values{name} ||= do { 
     143    $values{name}              ||= do { 
    90144        my $name = $values{module_name}; 
    91145        $name =~ s/::/-/g; 
     
    93147    } if $values{module_name}; 
    94148 
    95     if ($values{name} =~ /::/) { 
     149    if ( $values{name} =~ /::/ ) { 
    96150        my $name = $values{name}; 
    97151        $name =~ s/::/-/g; 
     
    106160        next unless exists $values{$key}; 
    107161        $dump .= "$key:\n"; 
    108         foreach (@{$values{$key}}) { 
     162        foreach ( @{ $values{$key} } ) { 
    109163            $dump .= "  $_->[0]: $_->[1]\n"; 
    110164        } 
    111165    } 
    112166 
    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'; 
    115169        require YAML; 
    116170        local $YAML::UseHeader = 0; 
    117         $dump .= YAML::Dump({ no_index => $no_index}); 
     171        $dump .= YAML::Dump( { no_index => $no_index } ); 
    118172    } 
    119173    else { 
     
    124178META 
    125179    } 
    126      
     180 
    127181    $dump .= "generated_by: $package version $version\n"; 
    128182    return $dump; 
     
    132186    my $self = shift; 
    133187    $self->include_deps( 'YAML', 0 ); 
     188 
    134189    require YAML; 
    135     my $data = YAML::LoadFile( 'META.yml' ); 
     190    my $data = YAML::LoadFile('META.yml'); 
     191 
    136192    # 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 ); 
    142198            } 
    143199        } 
    144200        else { 
    145             $self->$key( $value ); 
     201            $self->can($key)->($self, $value); 
    146202        } 
    147203    } 
     
    153209    return $self unless $self->is_admin; 
    154210 
    155     META_NOT_OURS: { 
     211  META_NOT_OURS: { 
    156212        local *FH; 
    157         if (open FH, "META.yml") { 
     213        if ( open FH, "META.yml" ) { 
    158214            while (<FH>) { 
    159215                last META_NOT_OURS if /^generated_by: Module::Install\b/; 
     
    163219    } 
    164220 
    165     warn "Writing META.yml\n"; 
     221    print "Writing META.yml\n"; 
     222 
     223    local *META; 
    166224    open META, "> META.yml" or warn "Cannot write to META.yml: $!"; 
    167225    print META $self->_dump; 
    168226    close META; 
     227 
    169228    return $self; 
    170229} 
    171230 
    172231sub version_from { 
    173     my ($self, $version_from) = @_; 
     232    my ( $self, $file ) = @_; 
    174233    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) ); 
    182235} 
    183236 
    184237sub abstract_from { 
    185     my ($self, $abstract_from) = @_; 
     238    my ( $self, $file ) = @_; 
    186239    require ExtUtils::MM_Unix; 
    187240    $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 
     245sub _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 
     253sub 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 
     274sub 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'; 
    191310} 
    192311 
  • 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" 
    22package Module::Install::Win32; 
    33use Module::Install::Base; @ISA = qw(Module::Install::Base); 
     
    1818        $Config::Config{make} =~ /^nmake\b/i    and 
    1919        $^O eq 'MSWin32'                        and 
    20         !$self->can_run('nmake.exe') 
     20        !$self->can_run('nmake') 
    2121    ); 
    2222