Fixes for spaces in current dir (Windows and cygwin mostly)

diff -u  ./C/C.pm.orig
--- ./C/C.pm.orig	2011-02-21 08:46:27.000000000 +0100
+++ ./C/C.pm	2011-03-29 14:51:10.502111300 +0200
@@ -43,7 +43,7 @@
     $o->{ILSM}{MAKEFILE} ||= {};
     if (not $o->UNTAINT) {
 	require FindBin;
-	$o->{ILSM}{MAKEFILE}{INC} = "-I$FindBin::Bin";
+	$o->{ILSM}{MAKEFILE}{INC} = "-I\"$FindBin::Bin\"";
     }
     $o->{ILSM}{AUTOWRAP} = 0 if not defined $o->{ILSM}{AUTOWRAP};
     $o->{ILSM}{XSMODE} = 0 if not defined $o->{ILSM}{XSMODE};
@@ -79,8 +79,11 @@
 	    $o->add_list($o->{ILSM}{MAKEFILE}, $key, $value, []);
 	    next;
 	}
-	if ($key eq 'INC' or
-	    $key eq 'MYEXTLIB' or
+	if ($key eq 'INC') {
+	    $o->add_string($o->{ILSM}{MAKEFILE}, $key, quote_space($value), '');
+	    next;
+	}
+	if ($key eq 'MYEXTLIB' or
 	    $key eq 'OPTIMIZE' or
 	    $key eq 'CCFLAGS' or
 	    $key eq 'LDDLFLAGS') {
@@ -91,17 +94,17 @@
           unless(ref($value) eq 'ARRAY') {
 	      croak "TYPEMAPS file '$value' not found"
 	        unless -f $value;
-	      $value = File::Spec->rel2abs($value);
+	      $value = fix_space(File::Spec->rel2abs($value));
           }
           else {
-          for (my $i = 0; $i < scalar(@$value); $i++) {
+            for (my $i = 0; $i < scalar(@$value); $i++) {
 	      croak "TYPEMAPS file '${$value}[$i]' not found"
 	        unless -f ${$value}[$i];
-            ${$value}[$i] = File::Spec->rel2abs(${$value}[$i]);
+              ${$value}[$i] = fix_space(File::Spec->rel2abs(${$value}[$i]));
             }
           }
-	    $o->add_list($o->{ILSM}{MAKEFILE}, $key, $value, []);
-	    next;
+	  $o->add_list($o->{ILSM}{MAKEFILE}, $key, $value, []);
+	  next;
 	}
 	if ($key eq 'AUTO_INCLUDE') {
 	    $o->add_text($o->{ILSM}, $key, $value, '');
@@ -348,12 +351,14 @@
     warn "Can't find the default system typemap file"
       if (not $typemap and $^W);
 
-    unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $typemap) if $typemap;
+    unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, quote_space($typemap)) if $typemap;
 
     if (not $o->UNTAINT) {
 	require FindBin;
 	$file = File::Spec->catfile($FindBin::Bin,"typemap");
-	push(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $file) if -f $file;
+        if ( -f $file ) {
+	   push(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, quote_space($file));
+        }
     }
 }
 
@@ -847,7 +852,9 @@
 	if (/^(\w+)\s*=\s*\S+.*$/ and
 	    $fix = $fixes{$1}
 	   ) {
-	    print MAKEFILE "$1 = $o->{ILSM}{$fix}\n"
+	    my $fixed = $o->{ILSM}{$fix};
+	    $fixed = fix_space($fixed) if $fix eq 'install_lib';
+	    print MAKEFILE "$1 = $fixed\n";
 	}
 	else {
 	    print MAKEFILE;
@@ -856,6 +863,16 @@
     close MAKEFILE;
 }
 
+sub quote_space {
+    $_[0] = '"'.$_[0].'"' if $_[0] and $_[0] =~ /\s/;
+    $_[0];
+}
+
+sub fix_space {
+    $_[0] =~ s/ /\\ /g if $_[0] =~ / /;
+    $_[0];
+}
+
 #==============================================================================
 # This routine used by C/t/09parser to test that the expected parser is in use
 #==============================================================================