OSDN Git Service

2014-05-07 Richard Biener <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / contrib / uninclude
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
8 # by the Free Software Foundation; either version 3, or (at your option)
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;
41   printf "%s\n", "#include <" gensub(cppline, "\\2", "", $0) ">"
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+"$@"}