| #! /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+"$@"} |