|  | #! /bin/sh | 
|  |  | 
|  | # (C) 1998, 2007 Free Software Foundation | 
|  | # Originally by Alexandre Oliva <oliva@lsd.ic.unicamp.br> | 
|  |  | 
|  | # This gawk/shell script is free software; you can redistribute it and/or | 
|  | # modify it under the terms of the GNU General Public License as published | 
|  | # by the Free Software Foundation; either version 3, or (at your option) | 
|  | # any later version. | 
|  |  | 
|  | # Given a preprocessed C/C++ code snippet, this script will replace any | 
|  | # standard header files with an actual #include <...> directive. | 
|  |  | 
|  | # Example: | 
|  | #     # 1 "test.c" | 
|  | #     # 1 "/usr/include/stdio.h" 1 3 | 
|  | #     <snip> | 
|  | #     # 1 "test.c" 2 | 
|  | # | 
|  | #     main() { printf("Hello world!\n"); } | 
|  |  | 
|  | # is replaced with | 
|  | #     # 1 "test.c" | 
|  | #     #include <stdio.h> | 
|  | #     main() { printf("Hello world!\n"); } | 
|  |  | 
|  |  | 
|  | # Header files whose pathnames contain any of the following patterns | 
|  | # are considered as standard headers: usr/include, g++-include, | 
|  | # include/g++, include/c++/<version>, gcc-lib/<anything>/include. | 
|  |  | 
|  | gawk ${EXCLUDEPATT+-vexclude="$EXCLUDEPATT"} \ | 
|  | ${INCLUDEPATT+-vinclude="$INCLUDEPATT"} ' | 
|  | BEGIN { | 
|  | skipping = 0; | 
|  | cppline = "^# [0-9]+ \"[^\"]*/(usr/include|g\\+\\+-include|include/g\\+\\+|include/c\\+\\+/[^/]+|gcc-lib/[^\"]+/include|gcc/include)/([^\"]+)\"( [1-4])*$" | 
|  | } | 
|  | !skipping && $0 ~ cppline && | 
|  | (exclude == "" || $3 !~ exclude) && (include == "" || $3 ~ include) { | 
|  | skipping = 1; | 
|  | printf "%s\n", "#include <" gensub(cppline, "\\2", 1, $0) ">" | 
|  | next; | 
|  | } | 
|  | skipping && /^# [0-9]+ / && $3 == lastincluded { | 
|  | skipping = 0; | 
|  | next; | 
|  | } | 
|  | !skipping && /^# [0-9]+ / { | 
|  | lastincluded = $3; | 
|  | } | 
|  | !skipping { print } | 
|  | ' ${1+"$@"} |