summaryrefslogtreecommitdiff
path: root/ACE/MPC/modules/Depgen/DependencyGenerator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/MPC/modules/Depgen/DependencyGenerator.pm')
-rw-r--r--ACE/MPC/modules/Depgen/DependencyGenerator.pm67
1 files changed, 67 insertions, 0 deletions
diff --git a/ACE/MPC/modules/Depgen/DependencyGenerator.pm b/ACE/MPC/modules/Depgen/DependencyGenerator.pm
new file mode 100644
index 00000000000..77c0eee81f7
--- /dev/null
+++ b/ACE/MPC/modules/Depgen/DependencyGenerator.pm
@@ -0,0 +1,67 @@
+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, $macros, $ipaths, $replace, $type, $noinline, $exclude) = @_;
+ 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, $file) = @_;
+
+ ## 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
+ $depstr =~ s/$self->{'cwd'}//go;
+ my $replace = $self->{'replace'};
+ foreach my $rep (@{$self->{'repkeys'}}) {
+ $depstr =~ s/$rep/$$replace{$rep}/g;
+ }
+
+ return $depstr;
+}
+
+
+1;