| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #!/usr/bin/perl
- # SYNTAX:
- # build_perl_modules -d dest_dir [-c] [-m] [-t] [-i] tarball_dir
- #
- # DESCRIPTION:
- # Installs perl modules found in tarball_dir
- # Expects a file called install_order, containing one line per distribution name
- # Will take action against each distribution in turn
- # -d is a necessary destination directory for the perl mods
- # If -c is set, will remove the module build directories and exit
- # If -m is set, will run perl Makefile.PL and make
- # If -t is set, will run make test
- # If -i is set, will run make install
- # Options are discrete. This is because an overall ./configure, make, make test, make install
- # are run in different invocations. Obviously, you can't run a -t without a -m, but there's no
- # checking here for that
- # Can only use base modules
- use warnings;
- use strict;
- use Config;
- use Getopt::Std;
- use Cwd;
- use File::Path;
- my $opts = {};
- getopts('d:cmti', $opts) || die "Invalid options";
- my $moddir = shift @ARGV or die "Must specify a directory where tarballs exist";
- my $destdir = $opts->{d};
- die "Must set a destination directory" unless $destdir;
- chdir $moddir or die "Cannot change to $moddir";
- open F, "install_order" or die "Cannot open install_order file";
- my @files = grep { ! /^#/ && chop } <F>;
- close F;
- my @tarballs;
- foreach my $f (@files) {
- # Needs to be better. Also, what if there are two with same name?
- my $tarball;
- eval '$tarball = <'."$f".'*.tar.gz>';
- die unless ($tarball);
- print "Got $f, with file: $tarball",$/;
- push @tarballs, $tarball;
- (my $dir = $tarball) =~ s/\.tar.gz//;
- # Need to do cleaning before doing each module in turn
- if ($opts->{c}) {
- print "Cleaning $dir",$/;
- rmtree($dir);
- }
- }
- if ($opts->{c}) {
- print "Finished cleaning",$/;
- exit;
- }
- my $topdir = cwd();
- foreach my $tarball (@tarballs) {
- (my $dir = $tarball) =~ s/\.tar.gz//;
- if ($opts->{m}) {
- # Don't compile if already done - this is because of invocating this
- # script at different stages
- unless (-e $dir) {
- system("gunzip -c $tarball | tar -xf -") == 0 or die "Cannot extract $tarball";
- chdir $dir or die "Can't chdir into $dir";
- system("perl Makefile.PL PREFIX=$destdir INSTALLDIRS=site LIB=$destdir/lib") == 0 or die "Can't run perl Makefile.PL";
- system("make") == 0 or die "Can't run make";
- chdir $topdir or die "Can't chdir to top";;
- }
- }
- chdir $dir or die "Can't chdir into $dir";
- # Need to add this so this module is found for subsequent ones
- my @dirs = split(":", $ENV{PERL5LIB} || "");
- unshift @dirs, "$topdir/$dir/blib/lib";
- $ENV{PERL5LIB}=join(":", @dirs);
- if ($opts->{t}) {
- system("make test") == 0 or die "Can't run make test failed";
- }
- if ($opts->{i}) {
- system("make install SITEPREFIX=$destdir") == 0 or die "Can't run make install";
- }
- chdir $topdir or die "Can't go back to $topdir";
- }
|