Please try my second attempt at fixing the problem, attached.

kid51
Index: lib/Parrot/Configure/Step/Methods.pm
===================================================================
--- lib/Parrot/Configure/Step/Methods.pm        (.../trunk)     (revision 28442)
+++ lib/Parrot/Configure/Step/Methods.pm        (.../branches/handledarwin)     
(revision 28471)
@@ -69,13 +69,7 @@
                     ldflags   => "-L$fink_lib_dir",
                     ccflags   => "-I$fink_include_dir",
                 );
-                foreach my $flag (keys %intended) {
-                    my $flagstr = $conf->data->get($flag);
-                    my @elements = split /\s+/, $flagstr;
-                    my %seen = map {$_, 1} @elements;
-                    $conf->data->add( ' ', $flag => $intended{$flag} )
-                        unless $seen{$intended{$flag}};
-                }
+                _add_flags_not_yet_seen($conf, \%intended);
             }
         }
     }
@@ -100,13 +94,18 @@
 sub _handle_darwin_for_macports {
     my ($self, $conf, $osname, $file) = @_;
     if ( $osname =~ /darwin/ ) {
-        my $ports_root = $conf->data->get( 'ports_base_dir' );
-        my $ports_lib_dir = $conf->data->get( 'ports_lib_dir' );
-        my $ports_include_dir = $conf->data->get( 'ports_include_dir' );
-        if ( $ports_include_dir && -f qq{$ports_include_dir/$file} ) {
-            $conf->data->add( ' ', linkflags => "-L$ports_lib_dir" );
-            $conf->data->add( ' ', ldflags   => "-L$ports_lib_dir" );
-            $conf->data->add( ' ', ccflags   => "-I$ports_include_dir" );
+#        my $ports_root          = $conf->data->get( 'ports_base_dir' );
+        my $ports_lib_dir       = $conf->data->get( 'ports_lib_dir' );
+        my $ports_include_dir   = $conf->data->get( 'ports_include_dir' );
+        if ( defined $ports_lib_dir && defined $ports_include_dir ) {
+            if ( -f qq{$ports_include_dir/$file} ) {
+                my %intended = (
+                    linkflags => "-L$ports_lib_dir",
+                    ldflags   => "-L$ports_lib_dir",
+                    ccflags   => "-I$ports_include_dir",
+                );
+                _add_flags_not_yet_seen($conf, \%intended);
+            }
         }
     }
     return 1;
@@ -210,7 +209,18 @@
     return 1;
 }
 
+sub _add_flags_not_yet_seen {
+    my ($conf, $intended) = @_;
+    foreach my $flag (keys %{ $intended }) {
+        my $flagstr = $conf->data->get($flag);
+        my @elements = split /\s+/, $flagstr;
+        my %seen = map {$_, 1} @elements;
+        $conf->data->add( ' ', $flag => $intended->{$flag} )
+            unless $seen{$intended->{$flag}};
+    }
+}
 
+
 =head1 SEE ALSO
 
 Parrot::Configure::Step.
Index: t/steps/auto_readline-01.t
===================================================================
--- t/steps/auto_readline-01.t  (.../trunk)     (revision 28442)
+++ t/steps/auto_readline-01.t  (.../branches/handledarwin)     (revision 28471)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More qw(no_plan); # tests => 52;
+use Test::More tests => 72;
 use Carp;
 use Cwd;
 use File::Spec;
@@ -109,12 +109,12 @@
 
 my $cwd = cwd();
 {
-    my $tdir = tempdir( CLEANUP => 1 );
-    ok(chdir $tdir, "Able to change to temporary directory");
+    my $tdir1 = tempdir( CLEANUP => 1 );
+    ok(chdir $tdir1, "Able to change to temporary directory");
     ok( (mkdir 'lib'), "Able to make lib directory");
     ok( (mkdir 'include'), "Able to make include directory");
-    my $libdir = File::Spec->catdir( $tdir, 'lib' );
-    my $includedir = File::Spec->catdir( $tdir, 'include' );
+    my $libdir = File::Spec->catdir( $tdir1, 'lib' );
+    my $includedir = File::Spec->catdir( $tdir1, 'include' );
     $conf->data->set('fink_lib_dir' => $libdir);
     $conf->data->set('fink_include_dir' => $includedir);
     $osname = 'darwin';
@@ -122,7 +122,8 @@
     ok($step->_handle_darwin_for_fink($conf, $osname, 'readline/readline.h'),
         "handle_darwin_for_fink() returned true value");
     $flagsafter = $conf->data->get( 'linkflags' );
-    is($flagsbefore, $flagsafter, "No change in linkflags, as expected");
+    is($flagsbefore, $flagsafter,
+        "No change in linkflags, as expected, where Fink lib and include 
directories exist but readline/readline.h does not");
 
     ok(chdir $cwd, "Able to change back to original directory after testing");
 }
@@ -149,11 +150,56 @@
     $flagsafter = $conf->data->get( 'linkflags' );
     isnt($flagsbefore, $flagsafter, "Change in linkflags, as expected");
     like($conf->data->get( 'linkflags' ), qr/-L\Q$libdir\E/,
-        "'linkflags' modified as expected");
+        "'linkflags' modified as expected, in case where Fink lib and include 
dirs exist and readline/readline.h exists");
+    $conf->data->set( linkflags => $flagsbefore ); #reset for next test
 
     ok(chdir $cwd, "Able to change back to original directory after testing");
 }
 
+{
+    my $tdir3 = tempdir( CLEANUP => 1 );
+    ok(chdir $tdir3, "Able to change to temporary directory");
+    ok( (mkdir 'lib'), "Able to make lib directory");
+    ok( (mkdir 'include'), "Able to make include directory");
+    ok( (mkdir 'include/readline'), "Able to make include/readline directory");
+    my $libdir = File::Spec->catdir( $tdir3, 'lib' );
+    my $includedir = File::Spec->catdir( $tdir3, 'include' );
+    $conf->data->set('fink_lib_dir' => $libdir);
+    $conf->data->set('fink_include_dir' => undef);
+
+    $osname = 'darwin';
+    $flagsbefore = $conf->data->get( 'linkflags' );
+    ok($step->_handle_darwin_for_fink($conf, $osname, 'readline/readline.h'),
+        "handle_darwin_for_fink() returned true value");
+    $flagsafter = $conf->data->get( 'linkflags' );
+    is($flagsbefore, $flagsafter,
+        "No change in linkflags, as expected, where Fink include directory 
does not exist");
+
+    ok(chdir $cwd, "Able to change back to original directory after testing");
+}
+
+{
+    my $tdir4 = tempdir( CLEANUP => 1 );
+    ok(chdir $tdir4, "Able to change to temporary directory");
+    ok( (mkdir 'lib'), "Able to make lib directory");
+    ok( (mkdir 'include'), "Able to make include directory");
+    ok( (mkdir 'include/readline'), "Able to make include/readline directory");
+    my $libdir = File::Spec->catdir( $tdir4, 'lib' );
+    my $includedir = File::Spec->catdir( $tdir4, 'include' );
+    $conf->data->set('fink_lib_dir' => undef );
+    $conf->data->set('fink_include_dir' => $includedir );
+
+    $osname = 'darwin';
+    $flagsbefore = $conf->data->get( 'linkflags' );
+    ok($step->_handle_darwin_for_fink($conf, $osname, 'readline/readline.h'),
+        "handle_darwin_for_fink() returned true value");
+    $flagsafter = $conf->data->get( 'linkflags' );
+    is($flagsbefore, $flagsafter,
+        "No change in linkflags, as expected, where Fink lib directory does 
not exist");
+
+    ok(chdir $cwd, "Able to change back to original directory after testing");
+}
+
 $osname = 'foobar';
 $flagsbefore = $conf->data->get( 'linkflags' );
 ok($step->_handle_darwin_for_macports($conf, $osname, 'readline/readline.h'),
@@ -161,84 +207,108 @@
 $flagsafter = $conf->data->get( 'linkflags' );
 is($flagsbefore, $flagsafter, "No change in linkflags, as expected");
 # Get ready for the next test
-$conf->data->set( 'linkflags' => undef );
+$conf->data->set( linkflags => $flagsbefore );
 
 $cwd = cwd();
 {
-    my $tdir3 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
-    ok(chdir $tdir3, "Able to change to temporary directory");
+    my $xtdir1 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
+    ok(chdir $xtdir1, "Able to change to temporary directory");
     ok( (mkdir 'lib'), "Able to make lib directory");
     ok( (mkdir 'include'), "Able to make include directory");
-    my $libdir = File::Spec->catdir( $tdir3, 'lib' );
-    my $includedir = File::Spec->catdir( $tdir3, 'include' );
-    $conf->data->set( ports_base_dir => $tdir3 );
+    my $libdir = File::Spec->catdir( $xtdir1, 'lib' );
+    my $includedir = File::Spec->catdir( $xtdir1, 'include' );
+    $conf->data->set( ports_base_dir => $xtdir1 );
     $conf->data->set( ports_lib_dir => $libdir );
     $conf->data->set( ports_include_dir => $includedir );
     ok( (mkdir 'include/readline'), "Able to make include/readline directory");
-    my $file = qq{$includedir/readline/readline.h};
-    open my $FH, ">", $file or croak "Unable to open $file for writing";
-    print $FH qq{Hello Darwin\n};
-    close $FH or croak "Unable to close $file after writing";
     $osname = 'darwin';
-    ok($step->_handle_darwin_for_macports(
-        $conf, $osname, 'readline/readline.h'),
+    $flagsbefore = $conf->data->get( 'linkflags' );
+    ok($step->_handle_darwin_for_macports($conf, $osname, 
'readline/readline.h'),
         "handle_darwin_for_macports() returned true value");
-    like(
-        File::Spec->canonpath( $conf->data->get( 'linkflags' ) ),
-        qr/\Q$libdir\E/,
-        "'linkflags' modified as expected" );
+    $flagsafter = $conf->data->get( 'linkflags' );
+    is($flagsbefore, $flagsafter,
+        "No change in linkflags, as expected, where macports lib and include 
directories exist but readline/readline.h does not");
+
     chdir $cwd or croak "Unable to change back to original directory";
 }
 
 $cwd = cwd();
-#{
-#    my $tdir3 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
-#    ok(chdir $tdir3, "Able to change to temporary directory");
-#    ok( (mkdir 'lib'), "Able to make lib directory");
-#    ok( (mkdir 'include'), "Able to make include directory");
-#    my $libdir = File::Spec->catdir( $tdir3, 'lib' );
-#    my $includedir = File::Spec->catdir( $tdir3, 'include' );
-#    $conf->data->set( ports_base_dir => $tdir3 );
-#    $conf->data->set( ports_lib_dir => $libdir );
-#    $conf->data->set( ports_include_dir => $includedir );
-#    ok( (mkdir 'include/readline'), "Able to make include/readline 
directory");
-##    my $file = qq{$includedir/readline/readline.h};
-#    my $file = q{readline/readline.h};
-#    $osname = 'darwin';
-#    $flagsbefore = $conf->data->get( 'linkflags' );
-#print STDERR "flbefore:  $flagsbefore\n";
-#    ok($step->_handle_darwin_for_macports(
-#        $conf, $osname, 'readline/readline.h'),
-#        "handle_darwin_for_macports() returned true value");
-#    $flagsafter = $conf->data->get( 'linkflags' );
-#print STDERR "flafter:  $flagsafter\n";
-#    is($flagsbefore, $flagsafter, "As expected, no change in 'linkflags'");
-#
-#    chdir $cwd or croak "Unable to change back to original directory";
-#}
+{
+    my $xtdir2 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
+    ok(chdir $xtdir2, "Able to change to temporary directory");
+    ok( (mkdir 'lib'), "Able to make lib directory");
+    ok( (mkdir 'include'), "Able to make include directory");
+    my $libdir = File::Spec->catdir( $xtdir2, 'lib' );
+    my $includedir = File::Spec->catdir( $xtdir2, 'include' );
+    $conf->data->set( ports_base_dir => $xtdir2 );
+    $conf->data->set( ports_lib_dir => $libdir );
+    $conf->data->set( ports_include_dir => $includedir );
+    ok( (mkdir 'include/readline'), "Able to make include/readline directory");
+    my $foo = File::Spec->catfile( $includedir, 'readline', 'readline.h' );
+    open my $FH, ">", $foo or croak "Could not open for writing";
+    print $FH "Hello world\n";
+    close $FH or croak "Could not close after writing";
 
+    $osname = 'darwin';
+    $flagsbefore = $conf->data->get( 'linkflags' );
+    ok($step->_handle_darwin_for_macports($conf, $osname, 
'readline/readline.h'),
+        "handle_darwin_for_macports() returned true value");
+    $flagsafter = $conf->data->get( 'linkflags' );
+    isnt($flagsbefore, $flagsafter, "Change in linkflags, as expected");
+    like($conf->data->get( 'linkflags' ), qr/-L\Q$libdir\E/,
+        "'linkflags' modified as expected, in case where macports lib and 
include dirs exist and readline/readline.h exists");
+    $conf->data->set( linkflags => $flagsbefore );
+
+    chdir $cwd or croak "Unable to change back to original directory";
+}
+
+
 $cwd = cwd();
-#{
-#    my $tdir4 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
-#    ok(chdir $tdir4, "Able to change to temporary directory");
-#    ok( (mkdir 'lib'), "Able to make lib directory");
-#    ok( (mkdir 'include'), "Able to make include directory");
-#    my $libdir = File::Spec->catdir( $tdir4, 'lib' );
-#    my $includedir = File::Spec->catdir( $tdir4, 'include' );
-#    $conf->data->set( ports_base_dir => $tdir4 );
-#    $conf->data->set( ports_lib_dir => $libdir );
-#    $conf->data->set( ports_include_dir => undef );
-#    $osname = 'darwin';
-#    $flagsbefore = $conf->data->get( 'linkflags' );
-#    ok($step->_handle_darwin_for_macports(
-#        $conf, $osname, 'readline/readline.h'),
-#        "handle_darwin_for_macports() returned true value");
-#    $flagsafter = $conf->data->get( 'linkflags' );
-#    is($flagsbefore, $flagsafter, "As expected, no change in 'linkflags'");
-#
-#    chdir $cwd or croak "Unable to change back to original directory";
-#}
+{
+    my $xtdir3 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
+    ok(chdir $xtdir3, "Able to change to temporary directory");
+    ok( (mkdir 'lib'), "Able to make lib directory");
+    ok( (mkdir 'include'), "Able to make include directory");
+    my $libdir = File::Spec->catdir( $xtdir3, 'lib' );
+    my $includedir = File::Spec->catdir( $xtdir3, 'include' );
+    $conf->data->set( ports_base_dir => $xtdir3 );
+    $conf->data->set( ports_lib_dir => $libdir );
+    $conf->data->set( ports_include_dir => undef );
 
+    $osname = 'darwin';
+    $flagsbefore = $conf->data->get( 'linkflags' );
+    ok($step->_handle_darwin_for_macports($conf, $osname, 
'readline/readline.h'),
+        "handle_darwin_for_macports() returned true value");
+    $flagsafter = $conf->data->get( 'linkflags' );
+    is($flagsbefore, $flagsafter,
+        "No change in linkflags, as expected, where Macports include directory 
does not exist");
+
+    chdir $cwd or croak "Unable to change back to original directory";
+}
+
+$cwd = cwd();
+{
+    my $xtdir4 = File::Spec->canonpath( tempdir( CLEANUP => 1 ) );
+    ok(chdir $xtdir4, "Able to change to temporary directory");
+    ok( (mkdir 'lib'), "Able to make lib directory");
+    ok( (mkdir 'include'), "Able to make include directory");
+    my $libdir = File::Spec->catdir( $xtdir4, 'lib' );
+    my $includedir = File::Spec->catdir( $xtdir4, 'include' );
+    $conf->data->set( ports_base_dir => $xtdir4 );
+    $conf->data->set( ports_lib_dir => undef );
+    $conf->data->set( ports_include_dir => $includedir );
+
+    $osname = 'darwin';
+    $flagsbefore = $conf->data->get( 'linkflags' );
+    ok($step->_handle_darwin_for_macports($conf, $osname, 
'readline/readline.h'),
+        "handle_darwin_for_macports() returned true value");
+    $flagsafter = $conf->data->get( 'linkflags' );
+    is($flagsbefore, $flagsafter,
+        "No change in linkflags, as expected, where Macports lib directory 
does not exist");
+
+    chdir $cwd or croak "Unable to change back to original directory";
+}
+
 pass("Completed all tests in $0");
 
 ################### DOCUMENTATION ###################

Reply via email to