4 use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
5 use MBTest tests => 34;
9 my $tmp = File::Spec->catdir( $cwd, 't', '_tmp' );
12 my $dist = DistGen->new( dir => $tmp );
15 chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
17 #########################
23 $dist->add_file( 'script', <<'---' );
25 print "Hello, World!\n";
27 $dist->change_file( 'Build.PL', <<"---" );
30 my \$build = new Module::Build(
31 module_name => @{[$dist->name]},
32 scripts => [ 'script' ],
34 requires => { 'File::Spec' => 0 },
36 \$build->create_build_script;
41 use File::Spec::Functions qw( catdir );
43 my $mb = Module::Build->new_from_context(
44 # need default install paths to ensure manpages & HTML get generated
45 installdirs => 'site',
47 installman1dir => catdir($tmp, 'man', 'man1'),
48 installman3dir => catdir($tmp, 'man', 'man3'),
49 installhtml1dir => catdir($tmp, 'html'),
50 installhtml3dir => catdir($tmp, 'html'),
52 installsiteman1dir => catdir($tmp, 'site', 'man', 'man1'),
53 installsiteman3dir => catdir($tmp, 'site', 'man', 'man3'),
54 installsitehtml1dir => catdir($tmp, 'site', 'html'),
55 installsitehtml3dir => catdir($tmp, 'site', 'html'),
63 my $destdir = File::Spec->catdir($cwd, 't', 'install_test');
64 $mb->add_to_cleanup($destdir);
67 eval {$mb->dispatch('install', destdir => $destdir)};
70 my $libdir = strip_volume( $mb->install_destination('lib') );
71 my $install_to = File::Spec->catfile($destdir, $libdir, $dist->name ) . '.pm';
72 file_exists($install_to);
74 local @INC = (@INC, File::Spec->catdir($destdir, $libdir));
75 eval "require @{[$dist->name]}";
78 # Make sure there's a packlist installed
79 my $archdir = $mb->install_destination('arch');
80 my ($v, $d) = File::Spec->splitpath($archdir, 1);
81 my $packlist = File::Spec->catdir($destdir, $d, 'auto', $dist->name, '.packlist');
82 is -e $packlist, 1, "$packlist should be written";
86 eval {$mb->dispatch('install', installdirs => 'core', destdir => $destdir)};
88 my $libdir = strip_volume( $Config{installprivlib} );
89 my $install_to = File::Spec->catfile($destdir, $libdir, $dist->name ) . '.pm';
90 file_exists($install_to);
94 my $libdir = File::Spec->catdir(File::Spec->rootdir, 'foo', 'bar');
95 eval {$mb->dispatch('install', install_path => {lib => $libdir}, destdir => $destdir)};
97 my $install_to = File::Spec->catfile($destdir, $libdir, $dist->name ) . '.pm';
98 file_exists($install_to);
102 my $libdir = File::Spec->catdir(File::Spec->rootdir, 'foo', 'base');
103 eval {$mb->dispatch('install', install_base => $libdir, destdir => $destdir)};
105 my $install_to = File::Spec->catfile($destdir, $libdir, 'lib', 'perl5', $dist->name ) . '.pm';
106 file_exists($install_to);
110 # Test the ConfigData stuff
112 $mb->config_data(foo => 'bar');
113 $mb->features(baz => 1);
114 $mb->auto_features(auto_foo => {requires => {'File::Spec' => 0}});
115 eval {$mb->dispatch('install', destdir => $destdir)};
118 my $libdir = strip_volume( $mb->install_destination('lib') );
119 local @INC = (@INC, File::Spec->catdir($destdir, $libdir));
120 eval "require @{[$dist->name]}::ConfigData";
122 is $mb->feature('auto_foo'), 1;
127 # Make sure the values are present
128 my $config = $dist->name . '::ConfigData';
129 is( $config->config('foo'), 'bar' );
130 ok( $config->feature('baz') );
131 ok( $config->feature('auto_foo') );
132 ok( not $config->feature('nonexistent') );
134 # Add a new value to the config set
135 $config->set_config(floo => 'bhlar');
136 is( $config->config('floo'), 'bhlar' );
138 # Make sure it actually got written
140 delete $INC{"@{[$dist->name]}/ConfigData.pm"};
142 local $^W; # Avoid warnings for subroutine redefinitions
143 eval "require $config";
145 is( $config->config('floo'), 'bhlar' );
150 eval {$mb->dispatch('realclean')};
154 # Try again by running the script rather than with programmatic interface
155 my $libdir = File::Spec->catdir('', 'foo', 'lib');
156 eval {$mb->run_perl_script('Build.PL', [], ['--install_path', "lib=$libdir"])};
159 eval {$mb->run_perl_script('Build', [], ['install', '--destdir', $destdir])};
161 my $install_to = File::Spec->catfile($destdir, $libdir, $dist->name ) . '.pm';
162 file_exists($install_to);
164 my $basedir = File::Spec->catdir('', 'bar');
165 eval {$mb->run_perl_script('Build', [], ['install', '--destdir', $destdir,
166 '--install_base', $basedir])};
169 $install_to = File::Spec->catfile($destdir, $libdir, $dist->name ) . '.pm';
170 is -e $install_to, 1, "Look for file at $install_to";
172 eval {$mb->dispatch('realclean')};
177 # Make sure 'install_path' overrides 'install_base'
178 my $mb = Module::Build->new( module_name => $dist->name,
179 install_base => File::Spec->catdir('', 'foo'),
181 lib => File::Spec->catdir('', 'bar')
185 is $mb->install_destination('lib'), File::Spec->catdir('', 'bar');
189 $dist->add_file( 'lib/Simple/Docs.pod', <<'---' );
192 Simple::Docs - Simple pod
196 Simple Man <simple@example.com>
202 # _find_file_by_type() isn't a public method, but this is currently
203 # the only easy way to test that it works properly.
204 my $pods = $mb->_find_file_by_type('pod', 'lib');
206 my $expect = $mb->localize_file_path('lib/Simple/Docs.pod');
207 is $pods->{$expect}, $expect;
209 my $pms = $mb->_find_file_by_type('awefawef', 'lib');
213 $pms = $mb->_find_file_by_type('pod', 'awefawef');
217 # revert to pristine state
218 chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
220 $dist = DistGen->new( dir => $tmp );
222 chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
227 (undef, $dir) = File::Spec->splitpath( $dir, 1 );
233 ok -e $file or diag("Expected $file to exist, but it doesn't");
238 chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";