[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