use strict; use warnings; use Config; BEGIN { my $cpp; my $sep; if ($^O eq 'MSWin32') { $cpp = 'cpp.exe' ; $sep = ';'; } else { ($cpp) = $Config{cppstdin} =~ /^(\S+)/; $sep = ':'; } if (! $cpp) { print "1..0 # Skipping cpp not found on this system.\n" ; exit 0 ; } # Check if cpp is installed if ( ! -x $cpp) { my $foundCPP = 0 ; foreach my $dir (split($sep, $ENV{PATH}), '') { if (-x "$dir/$cpp") { $foundCPP = 1; last ; } } if (! $foundCPP) { print "1..0 # Skipping cpp not found on this system.\n" ; exit 0 ; } } } use vars qw( $Inc $Perl ) ; require "./filter-util.pl" ; my $script = <<'EOF' ; use Filter::cpp ; #define FRED 1 #define JOE #a perl comment, not a cpp line $a = FRED + 2 ; print "a = $a\n" ; require "./fred" ; #ifdef JOE print "Hello Joe\n" ; #else print "Where is Joe?\n" ; #endif EOF my $cpp_script = 'cpp.script' ; writeFile($cpp_script, $script) ; writeFile('fred', 'print "This is FRED, not JOE\n" ; 1 ;') ; my $expected_output = <<'EOM' ; a = 3 This is FRED, not JOE Hello Joe EOM $a = `$Perl $Inc $cpp_script 2>&1` ; print "1..2\n" ; ok(1, ($? >>8) == 0) ; #print "|$a| vs |$expected_output|\n"; ok(2, $a eq $expected_output) ; unlink $cpp_script ; unlink 'fred' ;