--- a/perl5lib/LinuxDocTools.pm +++ b/perl5lib/LinuxDocTools.pm @@ -499,6 +499,7 @@ # Set common base name for temp files and temp file names my $tmpbase = $global->{tmpbase} = $tmpdir . '/sgmltmp.' . $filename; + my $precmdout = "$tmpbase.0.precmdout"; my $nsgmlsout = "$tmpbase.1"; # Was $tmpbase.1 my $preaspout = "$tmpbase.2"; # Was $tmpbase.2 my $aspout = "$tmpbase.3"; # Was $tmpbase.3 @@ -537,22 +538,27 @@ || die "$error_header: Could not open $global->{file} for reading. Aborting ...\n"; } - # Pipe to nsgmls. Write exit status to $nsgmls_error_flag if not 0. - my $nsgmls_error_flag = "$tmpdir/nsgmls.error-flag"; - my $nsgmls_command = "$precmd | ( $main::progs->{NSGMLS} $global->{NsgmlsOpts} $ENV{SGMLDECL} || echo \$? > $nsgmls_error_flag ) > $nsgmlsout"; + # Create a temp file with $precmd output + my $precmd_command = "$precmd > $precmdout"; - unlink $nsgmls_error_flag; - open (my $WRITENSGMLS, "$nsgmls_command") - or die "$error_header: Could not open pipe to $nsgmlsout. Aborting ...\n"; + open (my $PRECMDOUT, "$precmd_command") + or die "$error_header: Could not open pipe to $precmdout. Aborting ...\n"; if ($global->{charset} eq "latin") { - print $WRITENSGMLS ldt_latin1tosgml($IFILE); + print $PRECMDOUT ldt_latin1tosgml($IFILE); } else { - copy($IFILE,$WRITENSGMLS); + copy($IFILE,$PRECMDOUT); } close $IFILE; - close $WRITENSGMLS; + close $PRECMDOUT; + + # Process with nsgmls. Write exit status to $nsgmls_error_flag if not 0. + my $nsgmls_error_flag = "$tmpdir/nsgmls.error-flag"; + my $nsgmls_command = "( $main::progs->{NSGMLS} $global->{NsgmlsOpts} $ENV{SGMLDECL} $precmdout || echo \$? > $nsgmls_error_flag ) > $nsgmlsout"; + + unlink $nsgmls_error_flag; + system($nsgmls_command); # If $nsgmls_error_flag exists an error happened. Return status and die. if ( -e $nsgmls_error_flag ){