[svn:parrot] r37329 - branches/install_tools/tools/dev
jkeenan at svn.parrot.org
jkeenan at svn.parrot.org
Wed Mar 11 22:53:09 UTC 2009
Author: jkeenan
Date: Wed Mar 11 22:53:09 2009
New Revision: 37329
URL: https://trac.parrot.org/parrot/changeset/37329
Log:
Code has been extracted and placed in lib/Parrot/Install.pm.
Modified:
branches/install_tools/tools/dev/install_dev_files.pl
Modified: branches/install_tools/tools/dev/install_dev_files.pl
==============================================================================
--- branches/install_tools/tools/dev/install_dev_files.pl Wed Mar 11 22:52:12 2009 (r37328)
+++ branches/install_tools/tools/dev/install_dev_files.pl Wed Mar 11 22:53:09 2009 (r37329)
@@ -1,4 +1,4 @@
-#! perl
+#! perl -Ilib
################################################################################
# Copyright (C) 2001-2009, Parrot Foundation.
# $Id$
@@ -57,9 +57,8 @@
use strict;
use warnings;
-use File::Basename qw(dirname basename);
-use File::Copy;
-use File::Spec;
+use File::Basename qw(basename);
+use Parrot::Install;
# When run from the makefile, which is probably the only time this
# script will ever be used, all of these defaults will get overridden.
@@ -75,6 +74,7 @@
datadir => '/usr/share/', # parrot/ subdir added below
srcdir => '/usr/src/', # parrot/ subdir added below
'dry-run' => 0,
+ packages => 'devel|pct|tge|nqp',
);
my @manifests;
@@ -89,118 +89,75 @@
my $parrotdir = $options{versiondir};
-# We'll report multiple occurrences of the same file
-my %seen;
-
-my @files;
-my @installable_exe;
-my %directories;
- at ARGV = @manifests;
-while (<>) {
- chomp;
-
- s/\#.*//; # Ignore comments
- next if /^\s*$/; # Skip blank lines
-
- my ( $src, $meta, $dest ) = split( /\s+/, $_ );
- $dest ||= $src;
-
- if ( $seen{$src}++ ) {
- print STDERR "$ARGV:$.: Duplicate entry $src\n";
- }
-
- # Parse out metadata
- die "Malformed line in MANIFEST: $_" if not defined $meta;
- my $generated = $meta =~ s/^\*//;
- my ($package) = $meta =~ /^\[(.*?)\]/;
- $meta =~ s/^\[(.*?)\]//;
- next unless $package; # Skip if this file belongs to no package
-
- next unless $package =~ /devel|pct|tge|nqp/;
-
- my %meta;
- @meta{ split( /,/, $meta ) } = ();
- $meta{$_} = 1 for ( keys %meta ); # Laziness
-
- if ( $meta{lib} ) {
- $dest = File::Spec->catdir( $options{libdir}, $parrotdir, "tools", $dest );
- }
- elsif ( $meta{share} ) {
- $dest = File::Spec->catdir( $options{datadir}, $parrotdir, basename($dest) );
- }
- elsif ( $meta{include} ) {
- $dest =~ s/^src//; # strip off leading src/ dir
- $dest =~ s/^include//;
- $dest = File::Spec->catdir( $options{includedir}, $parrotdir, $dest );
- }
- elsif ( $meta{src} ) {
- $dest =~ s/^src//; # strip off leading src/ dir
- $dest = File::Spec->catdir( $options{srcdir}, $parrotdir, $dest );
- }
- elsif ( $meta{doc} ) {
- $dest =~ s/^docs/pod/; # docs dir are actually raw Pod
- $dest = File::Spec->catdir( $options{docdir}, $parrotdir, $dest );
- }
- elsif ( /^runtime/ ) {
- $dest =~ s/^runtime\/parrot\///;
- $dest = File::Spec->catdir( $options{libdir}, $parrotdir, $dest );
- }
- elsif ( /^tools/ ) {
- $dest = File::Spec->catdir( $options{libdir}, $parrotdir, $dest );
- }
- elsif ( /^VERSION/ ) {
- $dest = File::Spec->catdir( $options{libdir}, $parrotdir, $dest );
- }
- elsif ( /^compilers/ ) {
- $dest =~ s/^compilers/languages/;
- $dest = File::Spec->catdir( $options{libdir}, $parrotdir, $dest );
- }
- else {
- die "Unknown file type in MANIFEST: $_";
- }
+# Set up transforms on filenames
+my(%metatransforms) = (
+ lib => {
+ optiondir => 'lib',
+ transform => sub {
+ my($dest) = @_;
+ $parrotdir, "tools", $dest;
+ },
+ },
+ share => {
+ optiondir => 'data',
+ transform => sub {
+ my($dest) = @_;
+ $parrotdir, basename($dest);
+ },
+ },
+ include => {
+ optiondir => 'include',
+ transform => sub {
+ my($dest) = @_;
+ $dest =~ s/^src//; # strip off leading src/ dir
+ $dest =~ s/^include//;
+ $parrotdir, $dest;
+ },
+ },
+ src => {
+ optiondir => 'src',
+ transform => sub {
+ my($dest) = @_;
+ $dest =~ s/^src//; # strip off leading src/ dir
+ $parrotdir, $dest;
+ },
+ },
+ doc => {
+ optiondir => 'doc',
+ transform => sub {
+ my($dest) = @_;
+ $dest =~ s/^docs/pod/; # other docs are actually raw Pod
+ $parrotdir, $dest;
+ },
+ },
+);
- $dest = File::Spec->catdir( $options{buildprefix}, $dest )
- if $options{buildprefix};
+my(%othertransforms) = (
+ '^(tools|VERSION)' => {
+ optiondir => 'lib',
+ transform => sub {
+ my($dest) = @_;
+ $parrotdir, $dest;
+ },
+ },
+ '^compilers' => {
+ optiondir => 'lib',
+ transform => sub {
+ my($dest) = @_;
+ $dest =~ s/^compilers/languages/;
+ $parrotdir, $dest;
+ },
+ },
+);
- $directories{ dirname($dest) } = 1;
- push( @files, [ $src => $dest ] );
-}
-continue {
- close ARGV if eof; # Reset line numbering for each input file
-}
+my($files, $installable_exe, $directories) = Parrot::Install::lines_to_files(
+ \%metatransforms, \%othertransforms, \@manifests, \%options, $parrotdir
+);
unless ( $options{'dry-run'} ) {
- for my $dir ( map { $options{destdir} . $_ } keys %directories ) {
- unless ( -d $dir ) {
-
- # Make full path to the directory $dir
- my @dirs;
- while ( !-d $dir ) { # Scan up to nearest existing ancestor
- unshift @dirs, $dir;
- $dir = dirname($dir);
- }
- foreach (@dirs) {
- mkdir( $_, 0777 ) or die "mkdir $_: $!\n";
- }
- }
- }
-}
-print("Installing ...\n");
-foreach ( @files, @installable_exe ) {
- my ( $src, $dest ) = @$_;
- $dest = $options{destdir} . $dest;
- if ( $options{'dry-run'} ) {
- print "$src -> $dest\n";
- next;
- }
- else {
- next unless -e $src;
- copy( $src, $dest ) or die "copy $src to $dest: $!\n";
- print "$dest\n";
- }
- my $mode = ( stat($src) )[2];
- chmod $mode, $dest;
+ Parrot::Install::create_directories($options{destdir}, $directories);
}
+Parrot::Install::install_files($options{destdir}, $options{'dry-run'}, @$files, @$installable_exe);
# Local Variables:
# mode: cperl
More information about the parrot-commits
mailing list