package PugsConfig; use strict; use warnings; use Cwd; use Config(); use File::Spec; use FindBin; our %Config = %Config::Config; sub get_config { my $self = shift; if ( -e ( my $build_config = File::Spec->catfile( $FindBin::RealBin, 'current.build.yml' ) ) ) { open my $fh, $build_config or die "Cannot read from $build_config"; my $config = {}; while (<$fh>) { next if /^#/; $config->{$1} = /^(\S+):\s(.*)$/ && ( @+ > 1 ? $2 : ''); } return $config; } my %args = @_; my $config = { perl_revision => '6', perl_version => '0', perl_subversion => '0', perl_compiler => 'pugs', osname => $^O, sourcedir => Cwd::abs_path(), }; if ( @_ ) { $config->{$_} = $args{$_} for keys %args; } $config->{perl5_path} = $Config{perlpath}; for ( qw/path_sep privlib archlib siteprefix sitebin sitescript sitearch sitelib installbin installscript installman1dir installman3dir installsitebin installsiteman1dir installsiteman3dir archname bin exe_ext installarchlib installprivlib installsitearch installsitelib pager prefix scriptdir / ) { $config->{$_} ||= $_ =~ /(lib|arch)$/ ? add_path( $_, $Config{$_} ) : $Config{$_}; } $config->{installsiteman1dir} ||= $Config{installman1dir}; $config->{installsiteman3dir} ||= $Config{installman3dir}; for (qw/installsitescript installscript/) { $config->{sitescript} ||= $Config{$_} } $config->{installsitebin} ||= $Config{installsbin}; $config->{pugspath} = File::Spec->catfile($config->{installbin}, "pugs$Config{exe_ext}"); ($config->{file_sep}) = ($config->{sitelib} =~ /([\/\\])/) or die "Can't determine file_sep"; return $config; } sub add_path { my ($name, $path) = @_; $path =~ s/([\/\\])[^\/\\]*(perl)[^\/\\]*([\/\\]?)/$1${2}6$3/i or $path =~ s/([\/\\])(lib)(?=[\/\\]|$)/$1$2${1}perl6/i # or $path =~ m/\bman\d\b/ or die <<"."; Can't generate the correct Perl6 equivalent for: $path field name: $name osname: $Config{osname} Please notify the maintainer of this code. (Brian Ingerson for now) . # XXX Not sure about the above heuristic. So die if incorrect. $path =~ s/\/\d+\.\d+\.\d+//g; $path; } sub write_config_module { my $config = get_config(); my $template = do { local $/; }; my $all_fields = join ",\n ", map { "config_$_"; } sort keys %$config; $template =~ s/#all_fields#/$all_fields/; my $all_definitions = join ",\n ", map { my $name = $_; my $value = $config->{$name}; $value =~ s{\\}{\\\\}g; qq{("$name", "$value")}; } sort keys %$config; $template =~ s/#all_definitions#/$all_definitions/; print $template; } sub __test__ { $Config{privlib} = 'C:\usr\lib'; $Config{archlib} = 'C:\usr\lib'; $Config{sitearch} = 'C:\usr\site\lib'; $Config{sitelib} = 'C:\usr\site\lib'; require Data::Dumper; print Data::Dumper::Dumper(get_config()); } #__test__; 1; __DATA__ {-# OPTIONS -fglasgow-exts #-} {- *** NOTE *** DO NOT EDIT THIS FILE. This module is generated by util/PugsConfig.pm. -} {-| Pugs System Configuration. > Alive without breath; > as cold as death; > never thirsting, ever drinking; > clad in mail, never clinking. -} module Pugs.Config ( config, getConfig ) where import qualified Data.Map as Map import qualified Pugs.Version config :: Map.Map String String config = Map.fromList [#all_definitions# ,("pugs_versnum", Pugs.Version.versnum) ,("pugs_version", Pugs.Version.version) ,("pugs_revision", Pugs.Version.revnum) ] getConfig :: String -> String getConfig key = Map.findWithDefault "" key config