Thanks, Ilya.  Committed to the repository trunk.

David

On Sun, Aug 9, 2009 at 5:42 PM, Ilya Zakharevich<nospam-ab...@ilyaz.org> wrote:
> 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