]>
Commit | Line | Data |
---|---|---|
a8af9c34 HPN |
1 | #! /bin/sh |
2 | ||
3 | # (C) 1998, 2007 Free Software Foundation | |
4 | # Originally by Alexandre Oliva <oliva@lsd.ic.unicamp.br> | |
5 | ||
6 | # This gawk/shell script is free software; you can redistribute it and/or | |
7 | # modify it under the terms of the GNU General Public License as published | |
3dfb41c5 | 8 | # by the Free Software Foundation; either version 3, or (at your option) |
a8af9c34 HPN |
9 | # any later version. |
10 | ||
11 | # Given a preprocessed C/C++ code snippet, this script will replace any | |
12 | # standard header files with an actual #include <...> directive. | |
13 | ||
14 | # Example: | |
15 | # # 1 "test.c" | |
16 | # # 1 "/usr/include/stdio.h" 1 3 | |
17 | # <snip> | |
18 | # # 1 "test.c" 2 | |
19 | # | |
20 | # main() { printf("Hello world!\n"); } | |
21 | ||
22 | # is replaced with | |
23 | # # 1 "test.c" | |
24 | # #include <stdio.h> | |
25 | # main() { printf("Hello world!\n"); } | |
26 | ||
27 | ||
28 | # Header files whose pathnames contain any of the following patterns | |
29 | # are considered as standard headers: usr/include, g++-include, | |
30 | # include/g++, include/c++/<version>, gcc-lib/<anything>/include. | |
31 | ||
32 | gawk ${EXCLUDEPATT+-vexclude="$EXCLUDEPATT"} \ | |
33 | ${INCLUDEPATT+-vinclude="$INCLUDEPATT"} ' | |
34 | BEGIN { | |
35 | skipping = 0; | |
36 | cppline = "^# [0-9]+ \"[^\"]*/(usr/include|g\\+\\+-include|include/g\\+\\+|include/c\\+\\+/[^/]+|gcc-lib/[^\"]+/include|gcc/include)/([^\"]+)\"( [1-4])*$" | |
37 | } | |
38 | !skipping && $0 ~ cppline && | |
39 | (exclude == "" || $3 !~ exclude) && (include == "" || $3 ~ include) { | |
40 | skipping = 1; | |
4a8c29cc | 41 | printf "%s\n", "#include <" gensub(cppline, "\\2", 1, $0) ">" |
a8af9c34 HPN |
42 | next; |
43 | } | |
44 | skipping && /^# [0-9]+ / && $3 == lastincluded { | |
45 | skipping = 0; | |
46 | next; | |
47 | } | |
48 | !skipping && /^# [0-9]+ / { | |
49 | lastincluded = $3; | |
50 | } | |
51 | !skipping { print } | |
52 | ' ${1+"$@"} |