]> git.ipfire.org Git - thirdparty/gcc.git/blame - contrib/uninclude
PR c++/87554 - ICE with extern template and reference member.
[thirdparty/gcc.git] / contrib / uninclude
CommitLineData
e3b2e075 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
030ffd5e 8# by the Free Software Foundation; either version 3, or (at your option)
e3b2e075 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
32gawk ${EXCLUDEPATT+-vexclude="$EXCLUDEPATT"} \
33 ${INCLUDEPATT+-vinclude="$INCLUDEPATT"} '
34BEGIN {
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;
27dcfa6a 41 printf "%s\n", "#include <" gensub(cppline, "\\2", 1, $0) ">"
e3b2e075 42 next;
43}
44skipping && /^# [0-9]+ / && $3 == lastincluded {
45 skipping = 0;
46 next;
47}
48!skipping && /^# [0-9]+ / {
49 lastincluded = $3;
50}
51!skipping { print }
52' ${1+"$@"}