#!/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