[PATCH] Module-Build-0.34 on OS/2

Ilya Zakharevich <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.module-build
Message-ID <[email protected]>
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': $!";
 }
 ########################################################################
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.