X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Futils%2Fhscpp%2Fhscpp.prl;h=8d753e5553d68c5dfdf36b2dce8b32d155ea0ab9;hb=a977810779813388908daa6dbe57d9d1a05baaa3;hp=12d4038126ad2572ceb2035f74f90df15eb3d687;hpb=d4c4c40fbf8ee006e0ecd1751be1ba8844162d57;p=ghc-hetmet.git diff --git a/ghc/utils/hscpp/hscpp.prl b/ghc/utils/hscpp/hscpp.prl index 12d4038..8d753e5 100644 --- a/ghc/utils/hscpp/hscpp.prl +++ b/ghc/utils/hscpp/hscpp.prl @@ -10,46 +10,36 @@ # $Verbose = 0; +$file = ''; +@args = (); -while ( $#ARGV >= 0 && $ARGV[0] eq '-v' ) { - if ($ARGV[0] eq '-v') { - $Verbose = 1; - } else { - die "hscpp: unrecognised argument: $$ARGV[0]\n"; - } - shift(@ARGV); -} -#ToDo: print a version number ? - -$OrigCpp = ${RAWCPP}; - -if ( $OrigCpp =~ /(\S+)\s+(.*)/ ) { - $cmd = $1; - $rest = $2; - if ( -x $cmd ) { # cool - $Cpp = $OrigCpp; - } else { # oops; try to guess - $GccV = `gcc -v 2>&1`; - if ( $GccV =~ /Reading specs from (.*)\/specs/ ) { - $Cpp = "$1/cpp $rest"; +$Cpp = ${RAWCPP}; + +foreach (@ARGV) { + /^-v$/ && do { $Verbose = 1; next; }; + + /^[^-]/ && do { + if ($file ne '') { + die "usage: hscpp [arg...] file"; } else { - die "hscpp: don't know how to run cpp: $OrigCpp\n"; - } - } -} else { - $Cpp = $OrigCpp; -} + $file = $_; + }; + next; + }; -print STDERR "hscpp:CPP invoked: $Cpp @ARGV\n" if $Verbose; + push @args, $_; +} -open(INPIPE, "$Cpp @ARGV |") || die "Can't open C pre-processor pipe\n"; +print STDERR "hscpp:CPP invoked: $Cpp @args - <$file\n" if $Verbose; +open(INPIPE, "$Cpp @args - <$file |") + || die "Can't open C pre-processor pipe\n"; while () { # line directives come in flavo[u]rs: # s/^#\s*line\s+\d+$/\{\-# LINE \-\}/; IGNORE THIS ONE FOR NOW - s/^#\s*line\s+(\d+)\s+(\".+\")$/\{\-# LINE \1 \2 \-\}/; - s/^#\s*(\d+)\s+(\".*\").*/\{\-# LINE \1 \2 \-\}/; + s/^#\s*line\s+(\d+)\s+(\".+\")$/\{\-# LINE \1 \"$file\" \-\}/; + s/^#\s*(\d+)\s+(\".*\").*/\{\-# LINE \1 \"$file\" \-\}/; print $_; }