A lot of thanks for maintaining Module::Build.  The patches below make
it pass the test suite on OS/2, and make it not leave temporary dirs
in $TMP.

Comments:

 *) by default, makefiles use DOSISH shell, which would choke on '/' in
    filenames.  So we switch to 'sh'.

 *) OS/2 maintains "one current directory on a drive"; all of them are
    not deletable.  So if current drive is D: and current directories
    are c:/foo and d:/bar, then chdir('c:/baz') would make current
    directories c:/baz and d:/bar, and the current drive C:.

    As a result, "the old current directory" d:/bar is still "active",
    and not deletable.  ===> we need an extra "chdir '/'" first...

 *) On OS/2 by default we have only one user.  So `all users' have the
    same HOME directory.  In particular, '~foo' is always present.

Thanks again,
Ilya

--- ./lib/Module/Build/Compat.pm-pre    Tue Jul  7 13:59:10 2009
+++ ./lib/Module/Build/Compat.pm        Sun Aug  9 13:10:36 2009
@@ -318,7 +318,9 @@ sub fake_makefile {
   my $unlink = $class->oneliner('1 while unlink $ARGV[0]', [], 
[$args{makefile}]);
   $unlink =~ s/\$/\$\$/g unless $class->is_vmsish;
 
-  my $maketext = <<"EOF";
+  my $maketext = ($^O eq 'os2' ? "SHELL = sh\n\n" : '');
+
+  $maketext .= <<"EOF";
 all : force_do_it
        $perl $Build
 realclean : force_do_it
--- ./t/add_property.t-pre      Tue Jul  7 13:59:10 2009
+++ ./t/add_property.t  Sun Aug  9 13:48:56 2009
@@ -91,3 +91,5 @@ eval { $build->installdirs('foo') };
 ok $err = $@, 'Should catch exception for invalid "installdirs" value';
 like $err, qr/ERROR: installdirs must be one of "core", "site", or "vendor"/,
   'And it should suggest the proper values in the error message';
+
+$dist->chdir_original if $dist->did_chdir;
--- ./t/help.t-pre      Tue Jul  7 13:59:10 2009
+++ ./t/help.t  Sun Aug  9 14:26:14 2009
@@ -22,7 +22,7 @@ $dist->regen;
 
 my $restart = sub {
   $dist->clean();
-  chdir( $cwd );
+  DistGen::chdir_all( $cwd );
   File::Path::rmtree( $tmp );
   # we're redefining the same package as we go, so...
   delete($::{'MyModuleBuilder::'});
@@ -274,7 +274,7 @@ is($mb->get_action_docs('batz'), undef, 
 
 # cleanup
 $dist->clean();
-chdir( $cwd );
+DistGen::chdir_all($cwd);
 File::Path::rmtree( $tmp );
 
 # vim:ts=2:sw=2:et:sta
--- ./t/PL_files.t-pre  Tue Jul  7 13:59:10 2009
+++ ./t/PL_files.t      Sun Aug  9 13:48:20 2009
@@ -82,5 +82,5 @@ END
     my %cleanup = map { $_ => 1 } $mb->cleanup;
     is($cleanup{foo}, undef, "generated special file not added to cleanup");
 
-
+    $dist->chdir_original if $dist->did_chdir;
 }
--- ./t/script_dist.t-pre       Tue Jul  7 13:59:10 2009
+++ ./t/script_dist.t   Sun Aug  9 14:06:38 2009
@@ -77,3 +77,4 @@ SKIP: {
   my $yml = YAML::LoadFile('META.yml');
   is_deeply($yml->{provides}, \%meta_provides);
 }
+$dist->chdir_original if $dist->did_chdir;
--- ./t/tilde.t-pre     Tue Jul  7 13:59:10 2009
+++ ./t/tilde.t Sun Aug  9 12:41:54 2009
@@ -55,10 +55,6 @@ SKIP: {
 
     is( run_sample( $p => '~/foo' )->$p(),  "$home/foo" );
 
-    is( run_sample( $p => '~~'    )->$p(),  '~~' );
-
-    is( run_sample( $p => '~ foo' )->$p(),  '~ foo' );
-
     is( run_sample( $p => '~/ foo')->$p(),  "$home/ foo" );
       
     is( run_sample( $p => '~/fo o')->$p(),  "$home/fo o" );
@@ -91,6 +87,10 @@ SKIP: {
 
     $mb->$p('~');
     is( $mb->$p(),      '~', 'API does not expand tildes' );
+
+    skip "On OS/2 EMX all users are equal", 2 if $^O eq 'os2';
+    is( run_sample( $p => '~~'    )->$p(),  '~~' );
+    is( run_sample( $p => '~ foo' )->$p(),  '~ foo' );
 }
 
 # Again, with named users
--- ./t/write_default_maniskip.t-pre    Tue Jul  7 13:59:10 2009
+++ ./t/write_default_maniskip.t        Sun Aug  9 14:16:12 2009
@@ -5,11 +5,14 @@ use warnings;
 
 use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
 use MBTest 'no_plan';
+use DistGen;
+use Cwd;
 
 use_ok 'Module::Build';
 ensure_blib 'Module::Build';
 
 {
+    my $cwd = Cwd::cwd;
     chdir MBTest->tmpdir();
 
     my $build = Module::Build->new(
@@ -34,4 +37,6 @@ ensure_blib 'Module::Build';
     like $have, qr/^\Q$head\E/, "default MANIFEST.SKIP used";
     like $have, qr/^# Avoid Module::Build generated /ms, "Module::Build 
specific entries";
     like $have, qr/Foo-Bar-/, "distribution tarball entry";
+
+    DistGen::chdir_all($cwd);
 }
--- ./t/lib/DistGen.pm-pre      Tue Jul  7 13:59:10 2009
+++ ./t/lib/DistGen.pm  Sun Aug  9 13:59:16 2009
@@ -62,6 +62,13 @@ sub undent {
 
   return($string);
 }
+
+sub chdir_all ($) {
+  # OS/2 has "current directory per disk", undeletable; 
+  # doing chdir() to another disk won't change cur-dir of initial disk...
+  chdir('/') if $^O eq 'os2';
+  chdir shift;
+}
 ########################################################################
 
 sub new {
@@ -388,7 +395,7 @@ sub clean {
     }
   }, ($^O eq 'VMS' ? './' : File::Spec->curdir) );
 
-  chdir( $here );
+  chdir_all( $here );
 }
 
 sub remove {
@@ -478,7 +485,7 @@ sub chdir_original {
 
   croak("never called chdir_in()") unless($self->{original_dir});
   my $dir = $self->{original_dir};
-  chdir($dir) or die "Can't chdir to '$dir': $!";
+  chdir_all($dir) or die "Can't chdir to '$dir': $!";
 }
 ########################################################################
 

Reply via email to