From 079bbda50166a03707274ada20e76b195075a494 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Fri, 6 Mar 1998 16:06:26 +0000 Subject: [PATCH] Add a script to remake makefile dependencies. git-svn-id: https://svn.dealii.org/trunk@35 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/lac/Make_dep.pl | 141 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 deal.II/lac/Make_dep.pl diff --git a/deal.II/lac/Make_dep.pl b/deal.II/lac/Make_dep.pl new file mode 100644 index 0000000000..3a4f8b343a --- /dev/null +++ b/deal.II/lac/Make_dep.pl @@ -0,0 +1,141 @@ +#Make a dependency file tree +#usage: make_dep library_base_name -Iinc_path1 -Iinc_path2 ... files + +#This program makes for each of the given files a makefile dependency +#list, also considering nested includes. It only considers included +#files which are located in the given include pathes (you can give any +#number of pathes). The output looks like this: +# +#lib_base_name.a(.o-file): file included_files +# +#secondly, a similar entry is created for the .g.a library with the +#.go-file. + +#Author: Wolfgang Bangerth, March 1998 + + +# list of include pathes (from command line) +@include_path = (); +# list of files to be checked (from command line) +@input_files = (); +# associate list of files together with the files they include +%include_files = (); + + +$library_base_name = shift; + + +# fill include pathes +while ($ARGV[0] =~ /^-I/) { + $_ = shift; + /^-I(.*)/; + $_ = $1; + if (m![^/]$!) { + @include_path = (@include_path, $_ . "/"); + } else { + @include_path = (@include_path, $_); + } +} + +#fill list of files to be processed +while ($ARGV[0]) { + @input_files = (@input_files, shift); +} + + +foreach $file (@input_files) { + make_include_tree ($file); +}; + + +foreach $file (keys %include_files) { + # complete list of included files by nested include files + foreach $include (split(' ',$include_files{$file})) { + complete ($file, $include); + } +} + +# print dependency list +foreach $file (@input_files) { + $file =~ /(.*)\.(cc)/; + + print "$library_base_name.a($1.o):"; + print "\\\n $file"; + foreach $f (split (' ', $include_files{$file})) { + print "\\\n $f"; + } + print "\n"; + + print "$library_base_name.g.a($1.go):"; + print "\\\n $file"; + foreach $f (split (' ', $include_files{$file})) { + print "\\\n $f"; + } + print "\n"; +} + + + + + + + + +# complete the list of included files by the files +# included by a file included by the original one +sub complete { + local ($file, $include) = ($_[0], $_[1]); + foreach $second_include (split(' ',$include_files{$include})) { + if (! ($include_files{$file} =~ $second_include)) { + #second_include not yet in list of included files + $include_files{$file} = + join(' ', $second_include, $include_files{$file}); + complete ($file, $second_include); + } + } +} + + + + +# make the include tree for a file +sub make_include_tree { + local ($filename) = $_[0]; + + open (FILE, $filename); + while () { + # look out for include statements + if (/^#\s*include\s*(["<])([^">]*)[">]/) { + local($include) = $2; + if ($1 =~ /. Try to find real path + for $include_dir (@include_path) { + $if = $include_dir . $include; + if (-r $if) { + # file found; delete ./ at beginning + if ($if =~ m!^\./(.*)!) { + $if = $1; + } + $include_files{$filename} = + join (' ', $if, $include_files{$filename}); + } + } + } else { + # included by "..." + # only append file if it exists + if (-r $if) { + $include_files{$filename} = + join (' ', $include, $include_files{$filename}); + } + } + } + } + + # for each file included here: make up include tree itself + for $if (split(/ /,$include_files{$filename})) { + # if include file list not yet made up + if (! defined ($include_files{$if})) { + make_include_tree($if); + } + } +} -- 2.39.5