+++ /dev/null
-# call this script with a list of files it shall process for
-# class and struct declarations.
-
-
-#fill list of files to be processed
-while ($ARGV[0]) {
- @input_files = (@input_files, shift);
-}
-
-
-# generate a guard for the file to disallow multiple inclusion
-$guard = `pwd`;
-# in case the string gets longer than the number of significant
-# positions for the preprocessor is, it is safer to use the
-# last parts of the string fist. therefore, split the string
-# at the slashes and assemble it again backwards
-$guard = join("/", reverse(split(/\//, $guard)));
-$guard =~ s![^\w]!_!g;
-$guard .= "__guard";
-print "#ifndef $guard\n";
-print "#define $guard\n";
-print "\n";
-
-print "/* this file is automatically generated from the Makefile; do not\n";
-print " * change it by hand. */\n";
-print "\n\n";
-
-foreach $file (@input_files) {
- parse_class_declarations ($file);
-};
-
-print "\n\n";
-print "#endif // $guard\n";
-
-
-
-
-sub parse_class_declarations {
- local ($filename) = $_[0];
-
- open (FILE, $filename);
- while (<FILE>) {
- # if this is continued line, then strip the backslash and join
- # it with the following one as well
- while ( /\\$/ ) {
- $_ =~ s/\\$//;
- $_ = $_ . " " . <FILE>;
- }
-
- # if the lines contains a "template" at the
- # beginning and no semicolon at the end: join it
- # with the next line.
- if ( /^\s*template/ && !/;\s*$/ ) {
- # if this is a multiline template, then join following lines as well
- # find out by looking at the last char of the line
- while ( ! />\s*$/ ) {
- # more concise check: find out whether the number of '<' is
- # not equal to the number of '>'
- my ( $tmp1, $tmp2 ) = ($_, $_);
- $tmp1 =~ s/[^<]//g;
- $tmp2 =~ s/[^>]//g;
- if ( length ($tmp1) == length ($tmp2) ) {
- last;
- }
- else
- {
- s/\n//;
- $_ = $_ . " " . <FILE>;
- s/ \s+/ /g;
- }
- }
- s/\n//;
- s/ \s+/ /g;
- $_ = $_ . " " . <FILE>;
- }
-
- if ( /^\s*((template\s*<
- (
- ([-\w,_=:\s] |
- <([-\w_,=:\s])+> )*
- )>\s*)?
- (class|struct))(.*)/x ) {
- # this is the declaration of a class, possibly a template
- $basepart = $1;
- $rest = $7;
-
- # test whether it is a forward declaration or something else.
- # if it is a forward declaration, then skip it, as it must
- # be declared somewhere else properly
- # (note that $rest contains the name of the class and what
- # comes after that)
- if ( $rest =~ /;\s*$/ ) {
- next;
- }
-
- # first extract the name of the class
- $rest =~ /([\w_]+(\s*<(([-\w,_\s]|<([-\w,\s])+>)+)>)?)(.*)/;
-
- $name = $1;
- $rest = $6;
-
- # we look for declarations, where after the name comes a colon
- # or an open-brace, maybe also a semicolon or just nothing
- #
- # the colon might be of an inheritance list, but we do not
- # want it to come from a nested class declaration
- if (($rest =~ /^\s*([\{;]|:[^:])/) || ($rest =~ /^\s*$/)) {
- $declaration = $basepart . " " . $name;
- # strip double spaces etc.
- $declaration =~ s/\s\s+/ /g;
- $declaration =~ s/^\s+//g;
- $declaration =~ s/\s+$//g;
-
- # strip default template parameters
- while ( $declaration =~ s/<(.*)=\s*[-\w,_:\s]+(<[^.]*>)?(.*)>/<$1 $3 > / ) {
- }
-
- # impose a negativ-list of names we do not want to
- # have in this file. this is due to a compiler bug in
- # egcs 1.1.2, which does not gracefully handle local
- # template classes if their name is globally defined,
- # for example
- #
- # template <int dim> struct Y;
- # struct X {template <int dim> struct Y{}; };
- # X::Y<1> y;
- #
- # does not work. So we filter out these classes at
- # present. A better way would certainly be to only
- # allow those classes into the forward-declarations.h
- # file that are global, but that would mean parsing
- # the include files instead of just searching for
- # small bits...
- if ( ! ($declaration =~ /EpsFlags|Patch|Mem_Fun_Data|Fun_Data/ ))
- {
- print $declaration, ";\n";
- }
- }
- }
- }
-}
+++ /dev/null
-#!/bin/sh
-# $Id$
-# author: Ralf Hartmann, 2004
-
-
-echo Running `pwd`/minimize_boost
-
-# path of the (original) boost library, e.g.
-O=/home/rhartman/boost/boost_1_33_1
-# directory of the deal.II library
-Dtmp=`pwd`/../..
-cd $Dtmp && \
-D=`pwd`
-# minimized boost library in deal.II
-B=$D/contrib/boost/include
-
-# when following files compile we assume that the whole library compiles
-F="$D/lib/base/data_out_base.g.o $D/lib/base/polynomial.g.o $D/lib/base/subscriptor.g.o $D/lib/base/thread_management.g.o"
-
-######################################################################
-# Before using this script:
-# - set include-path-contrib-boost=$O in common/Make.global_options
-# and start compiling. After the Makefile.dep files are produced the
-# compilation can be stopped
-# - set back to include-path-contrib-boost=$D/contrib/boost/include
-# - add 2>&1 to CXXFLAGS.g in common/Make.global_options
-# - in lines 116... include compiler specific grep and perl commands
-# which extract the names of missing boost include files from stderr
-# of the compiler. This is already implemented for gcc and MIPSPro7.4
-#
-# Based on a full (original) boost distribution at $O this script
-# creates a boost directory at $B which includes the minimal but
-# complete set of boost files needed for the deal.II library to be
-# compiled on the current platform and compiler.
-#
-# For the case, that the $B/boost directory already exists all needed
-# boost files are updated in $B. No files in $B are removed!
-#
-# Output of this script:
-# $B/dirs_start.txt all directories which exist at start
-# $B/dirs_end.txt all directories which exist at end
-# $B/files_start.txt all files which exist at start
-# $B/files_end.txt all files which exist at end
-#
-# depending on the behaviour of the `find' command following files
-# might not include what they promise to:
-# $B/dirs_new.txt: all directories which were newly created
-# $B/files_new.txt: all files which were added to $B
-# $B/dirs_notneeded.txt: all directories which (on this platform
-# and compiler) weren't needed
-# $B/files_notneeded.txt: all files which (on this platform
-# and compiler) weren't needed
-#
-# Not yet implemented: version update of boost
-######################################################################
-
-
-# get versions:
-if test -f $B/boost/version.hpp; then
- Bversion=`grep "define BOOST_VERSION " $B/boost/version.hpp | perl -p -e 's/.define BOOST_VERSION //g;'`
-else
- Bversion=none
-fi
-if test -f $O/boost/version.hpp; then
- Oversion=`grep "define BOOST_VERSION " $O/boost/version.hpp | perl -p -e 's/.define BOOST_VERSION //g;'`
-fi
-
-# output paths and versions
-if test -d $O; then
- echo "boost (version $Oversion) library path:"
- echo " $O"
-else
- echo "Error (Line 9)"
- echo "Path of original boost library not set!"
- exit
-fi
-echo "deal.II library path:"
-echo " $D"
-echo "path of boost (version $Bversion) in deal.II:"
-echo " $B"
-echo
-
-# version controls:
-if test $Oversion -eq $Bversion; then
- echo "version numbers match"
-elif test $Oversion -lt $Bversion; then
- echo "Error: deal.II already uses a higher version of boost"
- exit
-elif test $Oversion -gt $Bversion; then
- echo "Updating $B/boost"
- echo "from boost version $Bversion to $Oversion ..."
-elif [ $Bversion = "none" ]; then
- echo "There is currently no version of boost in deal.II"
-fi
-
-# If there is already a boost directory:
-# 1. take inventory, which will be compared with the inventory at the end
-# 2. move the boost directory out of the way
-cd $B && find boost -type d > $B/dirs_start.txt
-cd $B && find boost -type f > $B/files_start.txt
-if test -d $B/boost; then
- mv boost boost._bak
-fi
-
-# Create all directories and subdirectories
-echo Creating subdirectories
-cd $O && find boost -type d > $B/dirs.txt
-cd $B && mkdir `cat dirs.txt`
-rm $B/dirs.txt
-
-# make sure that while loop below starts
-echo irgendwas > $B/files.txt
-
-# make the base library and cp all needed boost files from $O to $B
-# redo this until no boost file is missing
-while test -s $B/files.txt; do
- # remove the object files in order to force recompilation
- cd $D/lib && rm -f libbase.g.so
- cd $D/lib && rm -f $F
- echo "Recompile..."
- # recompile and keep track of missing boost files
- # create files.txt which includes a list of all missing boost files
-# CHANGE FOLLOWING TWO LINES ACCORDING TO THE OUTPUT OF YOUR SPECIFIC COMPILER
-# linux, gcc2.95.3:
- cd $D/base && make $F | grep "No such file" > $B/files.txt
- perl -pi -e 's&^[^ ]* ([^:]*): .*&$1&g;' $B/files.txt
-# sgi, MIPSpro7.4:
-# cd $D/base && gmake $F | grep "source file" > $B/files.txt
-# perl -pi -e 's&.*\"(.*)\".*&$1&g;' $B/files.txt
- # if there are some boost files missing
- if test -s $B/files.txt; then
- # collect them from the original boost directory
- cd $O && tar cvf $B/files.tar `cat $B/files.txt`
- # and write them into the minimized boost directory
- cd $B && tar xf files.tar
- fi
-done
-rm $B/files.tar $B/files.txt
-echo "Success: The files $F are now compiled"
-
-# remove empty directories
-echo Remove empty directories
-cd $B && find boost -type d > dirs.txt
-cp $B/dirs.txt $B/diff.txt
-while test -s $B/diff.txt; do
- cd $B && rmdir `cat dirs.txt`
- cp $B/dirs.txt $B/dirs.old.txt
- cd $B && find boost -type d > dirs.txt
- rm $B/diff.txt
- diff $B/dirs.old.txt $B/dirs.txt > $B/diff.txt
-done
-rm $B/dirs.old.txt $B/dirs.txt $B/diff.txt
-
-#copy version information
-cd $B && cp $O/boost/version.hpp boost
-#copy whole config directory
-cd $B && cp -r $O/boost/config boost
-
-echo "The $B/boost directory is now complete"
-
-# Take inventory of new boost directory
-cd $B && find boost -type d > $B/dirs_end.txt
-cd $B && find boost -type f > $B/files_end.txt
-
-# cp new boost files to old boost directory
-if test -d boost._bak; then
- cd $B && tar cf boost._tar boost
- cd $B && rm -rf boost; mv boost._bak boost
- cd $B && tar xf boost._tar
- cd $B && rm boost._tar
-fi
-
-# output of diffs
-echo "Output of log files in $B ..."
-echo " dirs_start.txt"
-echo " dirs_end.txt"
-echo " dirs_new.txt"
-cd $B && diff dirs_start.txt dirs_end.txt | \
- perl -p -e 's/^[^>].*$/LineToBeRemoved/g; s/^> //g;' | grep -v "LineToBeRemoved" > dirs_new.txt
-echo " dirs_notneeded.txt"
-cd $B && diff dirs_start.txt dirs_end.txt | \
- perl -p -e 's/^[^<].*$/LineToBeRemoved/g; s/^< //g;' | \
- grep -v "LineToBeRemoved" | grep -v CVS > dirs_notneeded.txt
-echo " files_start.txt"
-echo " files_end.txt"
-echo " files_new.txt"
-cd $B && diff files_start.txt files_end.txt | \
- perl -p -e 's/^[^>].*$/LineToBeRemoved/g; s/^> //g;' | grep -v "LineToBeRemoved" > files_new.txt
-echo " files_notneeded.txt"
-cd $B && diff files_start.txt files_end.txt | \
- perl -p -e 's/^[^<].*$/LineToBeRemoved/g; s/^< //g;' | \
- grep -v "LineToBeRemoved" | grep -v CVS > files_notneeded.txt
-
-echo done