diff options
Diffstat (limited to 'ACE/bin/DependencyGenerator/DependencyGenerator.pm')
-rw-r--r-- | ACE/bin/DependencyGenerator/DependencyGenerator.pm | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/ACE/bin/DependencyGenerator/DependencyGenerator.pm b/ACE/bin/DependencyGenerator/DependencyGenerator.pm new file mode 100644 index 00000000000..58caa43b53e --- /dev/null +++ b/ACE/bin/DependencyGenerator/DependencyGenerator.pm @@ -0,0 +1,77 @@ +package DependencyGenerator; + +# ************************************************************ +# Description : Runs the correct dependency generator on the file. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use Preprocessor; +use DependencyWriterFactory; +use ObjectGeneratorFactory; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($macros) = shift; + my($ipaths) = shift; + my($replace) = shift; + my($type) = shift; + my($noinline) = shift; + my($exclude) = shift; + my($self) = bless {'pre' => new Preprocessor($macros, + $ipaths, $exclude), + 'replace' => $replace, + 'dwrite' => DependencyWriterFactory::create($type), + 'objgen' => ObjectGeneratorFactory::create($type), + 'noinline' => $noinline, + }, $class; + + ## Set the current working directory, but + ## escape regular expression special characters + $self->{'cwd'} = Cwd::getcwd() . '/'; + $self->{'cwd'} =~ s/([\+\-\\\$\[\]\(\)\.])/\\$1/g; + + ## Sort the replace keys to get the longest key first. This way + ## when we are replacing portions of the file path, we replace the + ## most we can. + my(@repkeys) = sort { length($b) <=> length($a) } keys %$replace; + $self->{'repkeys'} = \@repkeys; + + return $self; +} + + +sub process { + my($self) = shift; + my($file) = shift; + + ## Generate the dependency string + my($depstr) = $self->{'dwrite'}->process( + $self->{'objgen'}->process($file), + $self->{'pre'}->process($file, $self->{'noinline'})); + + ## Perform the replacements on the dependency string + if ($depstr =~ s/$self->{'cwd'}//go) { + } + else { + my($replace) = $self->{'replace'}; + foreach my $rep (@{$self->{'repkeys'}}) { + $depstr =~ s/$rep/$$replace{$rep}/g; + } + } + + return $depstr; +} + + +1; |