| #!/bin/sh |
| # |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| # |
| # |
| # Attempt to figure out the minimum set of includes for our header files. |
| # |
| # ### this is incomplete. it merely lists the header files in order from |
| # ### "no dependencies on other svn headers" to the larger header files |
| # ### which have dependencies. manually working through the headers in |
| # ### this order will minimize includes. |
| # |
| # Each header file is test-compiled to ensure that it has enough headers. |
| # Of course, this could be false-positive because another header that |
| # has been included has further included something to enable compilation |
| # of the header in question. More sophisticated testing (e.g. filtering |
| # includes out of the included header) would be necessary for detection. |
| # |
| |
| files="*.h private/*.h" |
| deps="deps.$$" |
| |
| INCLUDES="-I. -I.. -I/usr/include/apr-1 -I/usr/include/apache2" |
| |
| rm -f "$deps" |
| for f in $files ; do |
| sed -n "s%#include \"\(svn_[a-z0-9_]*\.h\)\".*%$f \1%p" $f | fgrep -v svn_private_config.h >> "$deps" |
| done |
| |
| |
| function process_file () |
| { |
| echo "Processing $header" |
| |
| echo "#include \"$header\"" > "$deps".c |
| gcc -o /dev/null -S $INCLUDES "$deps".c |
| |
| ### monkey the includes and recompile to find the minimal set |
| } |
| |
| while test -s "$deps" ; do |
| #wc -l $deps |
| |
| for header in $files ; do |
| |
| if grep -q "^$header" "$deps" ; then |
| continue |
| fi |
| |
| process_file |
| |
| fgrep -v "$header" "$deps" > "$deps".new |
| mv "$deps".new "$deps" |
| |
| files="`echo $files | sed s%$header%%`" |
| break |
| done |
| |
| done |
| |
| for header in $files ; do |
| process_file |
| done |