diff options
Diffstat (limited to 'tools/dev/min-includes.sh')
-rwxr-xr-x | tools/dev/min-includes.sh | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tools/dev/min-includes.sh b/tools/dev/min-includes.sh new file mode 100755 index 0000000..53dfb84 --- /dev/null +++ b/tools/dev/min-includes.sh @@ -0,0 +1,80 @@ +#!/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 |