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