in reply to How do I configure Module::Build to build multiple packages from the same lib directory?

Maybe you can write multiple Build.PL and MANIFEST files (e.g. Build.PL.p1, MANIFEST.p1, Build.PL.p2, MANIFEST.p2, etc.), one for each package you want to produce, and write a script to copy these to the standard names before building each package. The MANIFEST can include only the files you want in the package.

Update: Here is a very crude script which demonstrates my suggestion.

#!/usr/bin/perl # use strict; use warnings; my $package = shift; my @FILES = ('Build.PL', 'MANIFEST'); # Check that required files are available before making any changes foreach my $file (@FILES) { die "$file.$package not found" unless(-e "$file.$package"); die "$file not a symlink" unless(! -e "$file" or -l "$file"); } # Re-link files foreach my $file (@FILES) { unlink($file) or die "unlink $file: $!" if(-l "$file"); symlink("$file.$package", "$file") or die "link $file: $!"; } system("perl Build.PL");
  • Comment on Re: How do I configure Module::Build to build multiple packages from the same lib directory?
  • Download Code

Replies are listed 'Best First'.
Re^2: How do I configure Module::Build to build multiple packages from the same lib directory?
by ELISHEVA (Prior) on Nov 04, 2008 at 14:17 UTC
    Thanks for the concrete example!

    I'm thinking though it might be easier to link the codebase lib directory into the build directory rather than the other way around, e.g.

    #error checking, use... omitted #may have typos - read as perl-ish pseudocode my @buildirs = ("foo1", "foo2"); my $repo="myrepo"; my $startdir=File::Spec::curdir(); foreach my $buildme (@buildirs) { chdir($buildme); symlink($repo, "lib"); system("perl Build.PL"); unlink("lib"); } chdir($startdir);
    The advantage of this approach is that I don't have to have to make assumptions about the support files used by the build process, e.g. is there a MANIFEST.SKIP? is there a special subclass of Module::Build that needs other kinds of support files?, etc, etc.

    The main disadvantage of any linking approach is that it isn't well behaved on MS-Win platforms. Although I do most of my development on Linux, there are situations when I need to work on MS machines. Cygwin/Vista has a particularly nasty bug where un-linking a symbolic link defined in Vista via anything using cygwin libraries not only removes the link, but also the underlying file or directory!

    beth