[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/Module/Build/ -> ConfigData.pm (source)

   1  package Module::Build::ConfigData;
   2  use strict;
   3  my $arrayref = eval do {local $/; <DATA>}
   4    or die "Couldn't load ConfigData data: $@";
   5  close DATA;
   6  my ($config, $features, $auto_features) = @$arrayref;
   7  
   8  sub config { $config->{$_[1]} }
   9  
  10  sub set_config { $config->{$_[1]} = $_[2] }
  11  sub set_feature { $features->{$_[1]} = 0+!!$_[2] }  # Constrain to 1 or 0
  12  
  13  sub auto_feature_names { grep !exists $features->{$_}, keys %$auto_features }
  14  
  15  sub feature_names {
  16    my @features = (keys %$features, auto_feature_names());
  17    @features;
  18  }
  19  
  20  sub config_names  { keys %$config }
  21  
  22  sub write {
  23    my $me = __FILE__;
  24    require IO::File;
  25    require Data::Dumper;
  26  
  27    my $mode_orig = (stat $me)[2] & 07777;
  28    chmod($mode_orig | 0222, $me); # Make it writeable
  29    my $fh = IO::File->new($me, 'r+') or die "Can't rewrite $me: $!";
  30    seek($fh, 0, 0);
  31    while (<$fh>) {
  32      last if /^__DATA__$/;
  33    }
  34    die "Couldn't find __DATA__ token in $me" if eof($fh);
  35  
  36    local $Data::Dumper::Terse = 1;
  37    seek($fh, tell($fh), 0);
  38    $fh->print( Data::Dumper::Dumper([$config, $features, $auto_features]) );
  39    truncate($fh, tell($fh));
  40    $fh->close;
  41  
  42    chmod($mode_orig, $me)
  43      or warn "Couldn't restore permissions on $me: $!";
  44  }
  45  
  46  sub feature {
  47    my ($package, $key) = @_;
  48    return $features->{$key} if exists $features->{$key};
  49    
  50    my $info = $auto_features->{$key} or return 0;
  51    
  52    # Under perl 5.005, each(%$foo) isn't working correctly when $foo
  53    # was reanimated with Data::Dumper and eval().  Not sure why, but
  54    # copying to a new hash seems to solve it.
  55    my %info = %$info;
  56    
  57    require Module::Build;  # XXX should get rid of this
  58    while (my ($type, $prereqs) = each %info) {
  59      next if $type eq 'description' || $type eq 'recommends';
  60      
  61      my %p = %$prereqs;  # Ditto here.
  62      while (my ($modname, $spec) = each %p) {
  63        my $status = Module::Build->check_installed_status($modname, $spec);
  64        if ((!$status->{ok}) xor ($type =~ /conflicts$/)) { return 0; }
  65      }
  66    }
  67    return 1;
  68  }
  69  
  70  
  71  =head1 NAME
  72  
  73  Module::Build::ConfigData - Configuration for Module::Build
  74  
  75  
  76  =head1 SYNOPSIS
  77  
  78    use Module::Build::ConfigData;
  79    $value = Module::Build::ConfigData->config('foo');
  80    $value = Module::Build::ConfigData->feature('bar');
  81    
  82    @names = Module::Build::ConfigData->config_names;
  83    @names = Module::Build::ConfigData->feature_names;
  84    
  85    Module::Build::ConfigData->set_config(foo => $new_value);
  86    Module::Build::ConfigData->set_feature(bar => $new_value);
  87    Module::Build::ConfigData->write;  # Save changes
  88  
  89  
  90  =head1 DESCRIPTION
  91  
  92  This module holds the configuration data for the C<Module::Build>
  93  module.  It also provides a programmatic interface for getting or
  94  setting that configuration data.  Note that in order to actually make
  95  changes, you'll have to have write access to the C<Module::Build::ConfigData>
  96  module, and you should attempt to understand the repercussions of your
  97  actions.
  98  
  99  
 100  =head1 METHODS
 101  
 102  =over 4
 103  
 104  =item config($name)
 105  
 106  Given a string argument, returns the value of the configuration item
 107  by that name, or C<undef> if no such item exists.
 108  
 109  =item feature($name)
 110  
 111  Given a string argument, returns the value of the feature by that
 112  name, or C<undef> if no such feature exists.
 113  
 114  =item set_config($name, $value)
 115  
 116  Sets the configuration item with the given name to the given value.
 117  The value may be any Perl scalar that will serialize correctly using
 118  C<Data::Dumper>.  This includes references, objects (usually), and
 119  complex data structures.  It probably does not include transient
 120  things like filehandles or sockets.
 121  
 122  =item set_feature($name, $value)
 123  
 124  Sets the feature with the given name to the given boolean value.  The
 125  value will be converted to 0 or 1 automatically.
 126  
 127  =item config_names()
 128  
 129  Returns a list of all the names of config items currently defined in
 130  C<Module::Build::ConfigData>, or in scalar context the number of items.
 131  
 132  =item feature_names()
 133  
 134  Returns a list of all the names of features currently defined in
 135  C<Module::Build::ConfigData>, or in scalar context the number of features.
 136  
 137  =item auto_feature_names()
 138  
 139  Returns a list of all the names of features whose availability is
 140  dynamically determined, or in scalar context the number of such
 141  features.  Does not include such features that have later been set to
 142  a fixed value.
 143  
 144  =item write()
 145  
 146  Commits any changes from C<set_config()> and C<set_feature()> to disk.
 147  Requires write access to the C<Module::Build::ConfigData> module.
 148  
 149  =back
 150  
 151  
 152  =head1 AUTHOR
 153  
 154  C<Module::Build::ConfigData> was automatically created using C<Module::Build>.
 155  C<Module::Build> was written by Ken Williams, but he holds no
 156  authorship claim or copyright claim to the contents of C<Module::Build::ConfigData>.
 157  
 158  =cut
 159  
 160  __DATA__
 161  
 162  [
 163            {},
 164            {},
 165            {
 166              'YAML_support' => {
 167                                  'requires' => {
 168                                                  'YAML' => ' >= 0.35, != 0.49_01 '
 169                                                },
 170                                  'description' => 'Use YAML.pm to write META.yml files'
 171                                },
 172              'manpage_support' => {
 173                                     'requires' => {
 174                                                     'Pod::Man' => 0
 175                                                   },
 176                                     'description' => 'Create Unix man pages'
 177                                   },
 178              'C_support' => {
 179                               'requires' => {
 180                                               'ExtUtils::CBuilder' => '0.15'
 181                                             },
 182                               'recommends' => {
 183                                                 'ExtUtils::ParseXS' => '1.02'
 184                                               },
 185                               'description' => 'Compile/link C & XS code'
 186                             },
 187              'HTML_support' => {
 188                                  'requires' => {
 189                                                  'Pod::Html' => 0
 190                                                },
 191                                  'description' => 'Create HTML documentation'
 192                                }
 193            }
 194          ]


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1