On Thursday 06 April 2006 22:34, Adam Kennedy wrote: > Wow, what great timing :) > > To add to your use case, on the project I'm currently working on, we > have 5 CPAN-style dists, probably 10 by the time we are done, but they > all need to be installed in a particular order. > > Due to the peculiarities of the situation, doing a CPAN::Inject style > setup isn't going to work for us. > > Is this usable in that sort of situation? >
I think so. > If so could you demonstrate the usage? > Just specify the directories in which these distributions reside in the order in which you want to have them installed. (as arguments to --dir for the script). Then type make to build, test and install all of them. You may need to tweak the script a little to add various parameters at various stages. Regards, Shlomi Fish > Thanks > > Adam K > > Shlomi Fish wrote: > > Hi all! > > > > As part of developing Test::Run, I maintain several CPAN modules and > > install them to a directory under my home-dir. Now, until today what I > > did was write a bash function to run the installation commands ("perl > > Makefile.PL PREFIX=$FOO", "make", "make test", make install", or the > > Module::Build equivalents), one by one for each of the modules. However, > > if one of the commands would have failed, it would still proceed. > > > > A long time ago, I thought of a better idea in which I generate a > > makefile that will run the commands and break if one of them fails. > > Today, when I needed to update the list of installed modules, I decided > > to catch two birds with one stone, and wrote the makefile generator. I > > wrote it in Perl and it is included below. (it is licensed under the MIT > > X11 licence). > > > > Now here's how I'm using it. In my bash theme ([1]), I have: > > > > <<< > > __prepare_install_all_to_temp_makefile() > > { > > ( > > perl ~/bin/gen-perl-modules-inst-makefile.pl \ > > --prefix="$inst_modules_dir" \ > > -o "$modules_makefile" \ > > --dir="$test_run" \ > > --dir="$cmdline" \ > > > > --dir="$modules_dir/plugins/backend/Test-Run-Plugin-ColorSummary" \ > > > > --dir="$modules_dir/plugins/cmdline/Test-Run-CmdLine-Plugin-ColorSummary" > > ) > > } > > > > > > This is the function that calls the generator script to prepare the > > makefile. > > > > And then I use this makefile by calling "make all" to build, test and > > install all the modules one by one, or "make $(pwd)" to build one of > > them. > > > > I hope you'll find this piece of advice useful. > > > > Regards, > > > > Shlomi Fish > > > > [1] - http://www.onlamp.com/pub/a/onlamp/2006/02/02/bash_themes.html > > > > Here's the script: > > > > <<<<<<<<<< > > #!/usr/bin/perl > > > > use strict; > > use warnings; > > > > use Getopt::Long; > > > > my $o_fn = "-"; > > my $prefix = "/usr"; > > my @dirs; > > > > GetOptions ( > > "o=s" => \$o_fn, > > "prefix=s" => \$prefix, > > "dir=s\@" => [EMAIL PROTECTED], > > ); > > > > my $text = ""; > > > > sub process_dir > > { > > my $dir = shift; > > if (-e "$dir/Build.PL") > > { > > process_mb_dir($dir); > > } > > elsif (-e "$dir/Makefile.PL") > > { > > process_eumm_dir($dir); > > } > > else > > { > > die "Unknown install method for directory $dir."; > > } > > } > > > > sub process_eumm_dir > > { > > my $dir = shift; > > handle_deps($dir, > > [ > > "perl Makefile.PL PREFIX=\"$prefix\"", > > "make", > > "make test", > > "make install", > > ] > > ); > > } > > > > sub process_mb_dir > > { > > my $dir = shift; > > handle_deps($dir, > > [ > > "perl Build.PL", > > "./Build", > > "./Build test", > > "./Build install prefix=\"$prefix\"", > > ] > > ); > > } > > > > my $id_num = 1; > > > > sub handle_deps > > { > > my ($dir, $deps_ref) = @_; > > my @deps = reverse(@$deps_ref); > > my $id = "target" . ($id_num++); > > $text .= "${dir}: $id-step0\n\n"; > > foreach my $i (0 .. $#deps) > > { > > $text .= "$id-step${i}: " . > > (($i == $#deps) ? "" : ("$id-step" . ($i+1))) . > > "\n"; > > $text .= "\t(cd $dir && " . $deps[$i] . ")\n"; > > $text .= "\n"; > > } > > } > > > > foreach my $d (@dirs) > > { > > process_dir($d); > > } > > > > if ($o_fn eq "-") > > { > > open O, ">&STDOUT"; > > } > > else > > { > > open O, ">", $o_fn; > > } > > print O "all: ", join(" ", @dirs) . "\n\n"; > > print O $text; > > close(O); -- --------------------------------------------------------------------- Shlomi Fish [EMAIL PROTECTED] Homepage: http://www.shlomifish.org/ 95% of the programmers consider 95% of the code they did not write, in the bottom 5%.