Skip test for changing TZ if running in a pseudo-fork (on Win32)
[p5sagit/p5-mst-13.2.git] / utils / h2xs.PL
index d62e96e..125dbf4 100644 (file)
@@ -66,6 +66,9 @@ the library path determined by Configure.  That path can be augmented
 by including arguments of the form B<-L/another/library/path> in the
 extra-libraries argument.
 
+In spite of its name, I<h2xs> may also be used to create a skeleton pure
+Perl module. See the B<-X> option.
+
 =head1 OPTIONS
 
 =over 5
@@ -105,8 +108,8 @@ Omit the autogenerated stub POD section.
 
 =item B<-X>, B<--omit-XS>
 
-Omit the XS portion.  Used to generate templates for a module which is not
-XS-based.  C<-c> and C<-f> are implicitly enabled.
+Omit the XS portion. Used to generate a skeleton pure Perl module.
+C<-c> and C<-f> are implicitly enabled.
 
 =item B<-a>, B<--gen-accessors>
 
@@ -306,6 +309,9 @@ also the section on L<LIMITATIONS of B<-x>>.
     # Extension is ONC::RPC.
     h2xs -cfn ONC::RPC
 
+    # Extension is a pure Perl module with no XS code.
+    h2xs -X My::Module
+
     # Extension is Lib::Foo which works at least with Perl5.005_03.
     # Constants are created for all #defines and enums h2xs can find
     # in foo.h.
@@ -652,9 +658,7 @@ if( $opt_b ){
            $sub ? sprintf("%d.%03d%02d",$maj,$min,$sub) :
                   sprintf("%d.%03d",    $maj,$min);
     } else {
-        $compat_version =
-           $sub ? sprintf("%d.%03d%03d",$maj,$min,$sub) :
-                  sprintf("%d.%03d",    $maj,$min);
+        $compat_version = sprintf("%d.%03d%03d",$maj,$min,$sub);
     }
 } else {
     my ($maj,$min,$sub) = $compat_version =~ /(\d+)\.(\d\d\d)(\d*)/;
@@ -897,6 +901,7 @@ if( @path_h ){
 
         # Remove C and C++ comments
         $src =~ s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#$2#gs;
+        $src =~ s#//.*$##gm;
 
        while ($src =~ /\benum\s*([\w_]*)\s*\{\s([^}]+)\}/gsc) {
            my ($enum_name, $enum_body) = ($1, $2);
@@ -908,7 +913,7 @@ if( @path_h ){
                 my ($key, $declared_val) = $item =~ /(\w+)\s*(?:=\s*(.*))?/;
                 $val = defined($declared_val) && length($declared_val) ? $declared_val : 1 + $val;
                 $seen_define{$key} = $val;
-                $const_names{$key}++;
+                $const_names{$key} = { name => $key, macro => 1 };
             }
         } # while (...)
       } # if (!defined $opt_e or $opt_e)
@@ -1072,7 +1077,14 @@ if( ! $opt_X ){  # use XS, unless it was disabled
     }
   }
 }
-my @const_names = sort keys %const_names;
+my (@const_specs, @const_names);
+
+for (sort(keys(%const_names))) {
+    my $v = $const_names{$_};
+    
+    push(@const_specs, ref($v) ? $v : $_);
+    push(@const_names, $_);
+}
 
 -d $modpmdir || mkpath([$modpmdir], 0, 0775);
 open(PM, ">$modpmname") || die "Can't create $ext$modpname/$modpmname: $!\n";
@@ -1461,7 +1473,7 @@ if( ! $opt_c ) {
                    XS_FILE =>      $xsfallback,
                    DEFAULT_TYPE => $opt_t,
                    NAME =>         $module,
-                   NAMES =>        \@const_names,
+                   NAMES =>        \@const_specs,
                  );
   print XS "#include \"$constscfname\"\n";
 }
@@ -1946,7 +1958,7 @@ if (!$opt_c) {
                            XS_FILE =>      $constsxsfname,
                            DEFAULT_TYPE => $opt_t,
                            NAME =>         $module,
-                           NAMES =>        \@const_names,
+                           NAMES =>        \@const_specs,
                  );
   print PL <<"END";
 if  (eval {require ExtUtils::Constant; 1}) {