#!perl -w # Contributed by: Thorben Jaendling use strict; use lib 't/lib'; use MBTest tests => 6; blib_load('Module::Build'); use File::Spec::Functions qw( catdir catfile ); my $tmp = MBTest->tmpdir; my $output; use DistGen; my $dist = DistGen->new( dir => $tmp ); # note("Dist is in $tmp\n"); $dist->add_file("Build.PL", <<'===EOF==='); #!perl -w use strict; use Module::Build; my $subclass = Module::Build->subclass(code => <<'=EOF='); sub copy_files { my $self = shift; my $dir = shift; my $files = $self->rscan_dir($dir, sub {-f $_ and not m!/\.|[#~]$!}); foreach my $file (@$files) { $self->copy_if_modified(from => $file, to_dir => "blib"); } } #Copy etc files to blib sub process_etc_files { my $self = shift; $self->copy_files("etc"); } #Copy share files to blib sub process_shared_files { my $self = shift; $self->copy_files("shared"); } 1; =EOF= my $build = $subclass->new( module_name => 'Simple', license => 'perl' ); $build->add_build_element('etc'); $build->add_build_element('shared'); my $distdir = lc $build->dist_name(); foreach my $id ('core', 'site', 'vendor') { #Where to install these build types when using prefix symantics $build->prefix_relpaths($id, 'shared' => "shared/$distdir"); $build->prefix_relpaths($id, 'etc' => "etc/$distdir"); #Where to install these build types when using default symantics my $set = $build->install_sets($id); $set->{'shared'} = '/usr/'.($id eq 'site' ? 'local/':'')."shared/$distdir"; $set->{'etc'} = ($id eq 'site' ? '/usr/local/etc/':'/etc/').$distdir; } #Where to install these types when using install_base symantics $build->install_base_relpaths('shared' => "shared/$distdir"); $build->install_base_relpaths('etc' => "etc/$distdir"); $build->create_build_script(); ===EOF=== #Test Build.PL exists ok? $dist->add_file("etc/config", <<'===EOF==='); [main] Foo = bar Jim = bob [supplemental] stardate = 1234344 ===EOF=== $dist->add_file("shared/data", <<'===EOF==='); 7 * 9 = 42? ===EOF=== $dist->add_file("shared/html/index.html", <<'===EOF===');

Hello World!

===EOF=== $dist->regen; $dist->chdir_in; my $installdest = catdir($tmp, 't', "install_extra_targets-$$"); $output = stdout_of sub { $dist->run_build_pl("--install_base=$installdest") }; $output .= stdout_of sub { $dist->run_build }; my $error; $error++ unless ok(-e "blib/etc/config", "Built etc/config"); $error++ unless ok(-e "blib/shared/data", "Built shared/data"); $error++ unless ok(-e "blib/shared/html/index.html", "Built shared/html"); diag "OUTPUT:\n$output" if $error; $output = stdout_of sub { $dist->run_build('install') }; $error = 0; $error++ unless ok(-e catfile($installdest, qw/etc simple config/), "installed etc/config"); $error++ unless ok(-e catfile($installdest, qw/shared simple data/), "installed shared/data"); $error++ unless ok(-e catfile($installdest, qw/shared simple html index.html/), "installed shared/html"); diag "OUTPUT:\n$output" if $error;