File: DependencyGenerator.pm

package info (click to toggle)
ace 6.0.3%2Bdfsg-0.1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 49,368 kB
  • sloc: cpp: 341,826; perl: 30,850; ansic: 20,952; makefile: 10,144; sh: 4,744; python: 828; exp: 787; yacc: 511; xml: 330; lex: 158; lisp: 116; csh: 48; tcl: 5
file content (67 lines) | stat: -rw-r--r-- 2,120 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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;