X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Futils%2Fhscpp%2Fhscpp.prl;h=03a839876dcb2f00395db183dd312d0a1130d570;hb=511ec7f33db67d0daa4919bc06043b1e92879318;hp=12d4038126ad2572ceb2035f74f90df15eb3d687;hpb=ee1fdf9bd21bf6cfa2889854e253f3a661d692fe;p=ghc-hetmet.git diff --git a/ghc/utils/hscpp/hscpp.prl b/ghc/utils/hscpp/hscpp.prl index 12d4038..03a8398 100644 --- a/ghc/utils/hscpp/hscpp.prl +++ b/ghc/utils/hscpp/hscpp.prl @@ -10,43 +10,32 @@ # $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"; - } +$Cpp = ${RAWCPP}; + +while (@ARGV) { + $_ = $ARGV[0]; + /^-v$/ && do { $Verbose = 1; shift(@ARGV); next; }; + /^[^-]/ && $#ARGV == 0 && do { $file = $_; shift(@ARGV); next; }; + push @args, $_; 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"; - } else { - die "hscpp: don't know how to run cpp: $OrigCpp\n"; - } - } -} else { - $Cpp = $OrigCpp; -} -print STDERR "hscpp:CPP invoked: $Cpp @ARGV\n" if $Verbose; +die "usage: hscpp [arg...] file" if ($file eq ''); -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 () { + s/^#\s*line\s+(\d+)\s+\"\"$/\{\-# LINE \1 \"$file\" \-\}/; + s/^#\s*(\d+)\s+\"\".*/\{\-# LINE \1 \"$file\" \-\}/; + # 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 \-\}/;