2 # reads CPP output and turns #line things into appropriate Haskell
5 # considered to be GHC-project specific
8 # NOTE: this script needs RAWCPP set in order to do something
20 /^-v$/ && do { $Verbose = 1; shift(@ARGV); next; };
21 /^[^-]/ && $#ARGV == 0 && do { $file = $_; shift(@ARGV); next; };
26 die "usage: hscpp [arg...] file" if ($file eq '');
28 print STDERR "hscpp:CPP invoked: $Cpp @args - <$file\n" if $Verbose;
29 open(INPIPE, "$Cpp @args - <$file |")
30 || die "Can't open C pre-processor pipe\n";
34 s/^#\s*line\s+(\d+)\s+\"\"$/\{\-# LINE \1 \"$file\" \-\}/;
35 s/^#\s*(\d+)\s+\"\".*/\{\-# LINE \1 \"$file\" \-\}/;
37 # line directives come in flavo[u]rs:
39 # s/^#\s*line\s+\d+$/\{\-# LINE \-\}/; IGNORE THIS ONE FOR NOW
40 s/^#\s*line\s+(\d+)\s+(\".+\")$/\{\-# LINE \1 \2 \-\}/;
41 s/^#\s*(\d+)\s+(\".*\").*/\{\-# LINE \1 \2 \-\}/;
46 close(INPIPE) || exit(1); # exit is so we reflect any errors.