Home | History | Annotate | Line # | Download | only in contrib
      1 #! /bin/sh
      2 
      3 # (C) 1998, 2007 Free Software Foundation
      4 # Originally by Alexandre Oliva <oliva (at] 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", 1, $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+"$@"}
     53