#! /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,
# lib/gcc/<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|lib/gcc/[^\"]+/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+"$@"}
