diff options
Diffstat (limited to 'contrib/perl5/utils/h2ph.PL')
-rw-r--r-- | contrib/perl5/utils/h2ph.PL | 106 |
1 files changed, 4 insertions, 102 deletions
diff --git a/contrib/perl5/utils/h2ph.PL b/contrib/perl5/utils/h2ph.PL index 6011d98f1f1e..356aa892bcd8 100644 --- a/contrib/perl5/utils/h2ph.PL +++ b/contrib/perl5/utils/h2ph.PL @@ -46,7 +46,7 @@ die "-r and -a options are mutually exclusive\n" if ($opt_r and $opt_a); my $Exit = 0; -my $Dest_dir = $opt_d || $Config{installsitearch}; +my $Dest_dir = $opt_d || $Config{installarchlib}; die "Destination directory $Dest_dir doesn't exist or isn't a directory\n" unless -d $Dest_dir; @@ -63,8 +63,6 @@ $inif = 0; @ARGV = ('-') unless @ARGV; -build_preamble_if_necessary(); - while (defined ($file = next_file())) { if (-l $file and -d $file) { link_if_possible($file) if ($opt_l); @@ -99,8 +97,6 @@ while (defined ($file = next_file())) { open(IN,"$file") || (($Exit = 1),(warn "Can't open $file: $!\n"),next); open(OUT,">$Dest_dir/$outfile") || die "Can't create $outfile: $!\n"; } - - print OUT "require '_h2ph_pre.ph';\n\n"; while (<IN>) { chop; while (/\\$/) { @@ -109,7 +105,6 @@ while (defined ($file = next_file())) { chop; } print OUT "# $_\n" if $opt_D; - if (s:/\*:\200:g) { s:\*/:\201:g; s/\200[^\201]*\201//g; # delete single line comments @@ -163,7 +158,6 @@ while (defined ($file = next_file())) { $args = reindent($args); if ($t ne '') { $new =~ s/(['\\])/\\$1/g; #']); - if ($opt_h) { print OUT $t,"eval \"\\n#line $eval_index $outfile\\n\" . 'sub $name () {",$new,";}' unless defined(\&$name);\n"; $eval_index++; @@ -171,9 +165,6 @@ while (defined ($file = next_file())) { print OUT $t,"eval 'sub $name () {",$new,";}' unless defined(\&$name);\n"; } } else { - # Shunt around such directives as `#define FOO FOO': - next if " \&$name" eq $new; - print OUT $t,"unless(defined(\&$name)) {\n sub $name () {\t",$new,";}\n}\n"; } } @@ -239,12 +230,10 @@ while (defined ($file = next_file())) { print OUT $t,"}\n"; } elsif(/^undef\s+(\w+)/) { print OUT $t, "undef(&$1) if defined(&$1);\n"; - } elsif(/^error\s+(".*")/) { - print OUT $t, "die($1);\n"; } elsif(/^error\s+(.*)/) { - print OUT $t, "die(\"", quotemeta($1), "\");\n"; + print OUT $t, "die(\"$1\");\n"; } elsif(/^warning\s+(.*)/) { - print OUT $t, "warn(\"", quotemeta($1), "\");\n"; + print OUT $t, "warn(\"$1\");\n"; } elsif(/^ident\s+(.*)/) { print OUT $t, "# $1\n"; } @@ -523,71 +512,6 @@ sub inc_dirs } -# Create "_h2ph_pre.ph", if it doesn't exist or was built by a different -# version of h2ph. -sub build_preamble_if_necessary -{ - # Increment $VERSION every time this function is modified: - my $VERSION = 1; - my $preamble = "$Dest_dir/_h2ph_pre.ph"; - - # Can we skip building the preamble file? - if (-r $preamble) { - # Extract version number from first line of preamble: - open PREAMBLE, $preamble or die "Cannot open $preamble: $!"; - my $line = <PREAMBLE>; - $line =~ /(\b\d+\b)/; - close PREAMBLE or die "Cannot close $preamble: $!"; - - # Don't build preamble if a compatible preamble exists: - return if $1 == $VERSION; - } - - my (%define) = _extract_cc_defines(); - - open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; - print PREAMBLE "# This file was created by h2ph version $VERSION\n"; - - foreach (sort keys %define) { - if ($opt_D) { - print PREAMBLE "# $_=$define{$_}\n"; - } - - if ($define{$_} =~ /^\d+$/) { - print PREAMBLE - "unless (defined &$_) { sub $_() { $define{$_} } }\n\n"; - } else { - print PREAMBLE - "unless (defined &$_) { sub $_() { \"", - quotemeta($define{$_}), "\" } }\n\n"; - } - } - close PREAMBLE or die "Cannot close $preamble: $!"; -} - - -# %Config contains information on macros that are pre-defined by the -# system's compiler. We need this information to make the .ph files -# function with perl as the .h files do with cc. -sub _extract_cc_defines -{ - my %define; - my $allsymbols = join " ", @Config{ccsymbols, cppsymbols, cppccsymbols}; - - # Split compiler pre-definitions into `key=value' pairs: - foreach (split /\s+/, $allsymbols) { - /(.*?)=(.*)/; - $define{$1} = $2; - - if ($opt_D) { - print STDERR "$_: $1 -> $2\n"; - } - } - - return %define; -} - - 1; ############################################################################## @@ -627,7 +551,7 @@ If run with no arguments, filters standard input to standard output. =item -d destination_dir Put the resulting B<.ph> files beneath B<destination_dir>, instead of -beneath the default Perl library location (C<$Config{'installsitsearch'}>). +beneath the default Perl library location (C<$Config{'installarchlib'}>). =item -r @@ -666,10 +590,6 @@ However, the B<.ph> files almost double in size when built using B<-h>. Include the code from the B<.h> file as a comment in the B<.ph> file. This is primarily used for debugging I<h2ph>. -=item -Q - -``Quiet'' mode; don't print out the names of the files being converted. - =back =head1 ENVIRONMENT @@ -706,24 +626,6 @@ that it can translate. It's only intended as a rough tool. You may need to dicker with the files produced. -Doesn't run with C<use strict> - -You have to run this program by hand; it's not run as part of the Perl -installation. - -Doesn't handle complicated expressions built piecemeal, a la: - - enum { - FIRST_VALUE, - SECOND_VALUE, - #ifdef ABC - THIRD_VALUE - #endif - }; - -Doesn't necessarily locate all of your C compiler's internally-defined -symbols. - =cut !NO!SUBS! |