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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
package CCWorkspaceCreator;
# ************************************************************
# Description : A Code Composer Workspace creator
# Author : Chad Elliott
# Create Date : 9/18/2006
# ************************************************************
# ************************************************************
# Pragmas
# ************************************************************
use strict;
use CCProjectCreator;
use WinWorkspaceBase;
use WorkspaceCreator;
use vars qw(@ISA);
@ISA = qw(WinWorkspaceBase WorkspaceCreator);
# ************************************************************
# Subroutine Section
# ************************************************************
sub compare_output {
#my $self = shift;
return 1;
}
sub workspace_file_extension {
#my $self = shift;
return '.code_composer';
}
sub write_comps {
my($self, $fh, $creator) = @_;
my $crlf = $self->crlf();
## Workspace only consists of the name of the project. Really, Code
## Composer doesn't use a workspace. Each project contains the
## dependencies.
foreach my $project ($self->sort_dependencies($self->get_projects(), 0)) {
print $fh "$project$crlf";
$self->add_dependencies($creator, $project);
}
}
sub add_dependencies {
my($self, $creator, $proj) = @_;
my $fh = new FileHandle();
my $outdir = $self->get_outdir();
$outdir = $self->getcwd() if ($outdir eq '.');
if (open($fh, "$outdir/$proj")) {
my @read;
my $write;
my $cwd = $self->getcwd();
while(<$fh>) {
## This is a comment found in cc.mpd if the project contains the
## 'after' keyword setting.
if (/MPC\s+ADD\s+DEPENDENCIES/) {
my @projs;
my $crlf = $self->crlf();
my $deps = $self->get_validated_ordering($proj);
foreach my $dep (@$deps) {
my $relative = $self->get_relative_dep_file($creator,
"$cwd/$proj", $dep);
if (defined $relative) {
if (!$write) {
## Indicate that we need to re-write the file and add in
## the start of the project dependencies section
$write = 1;
push(@read, "[Project Dependencies]$crlf");
}
## Add in the dependency and save the project name for later.
push(@read, "Source=\"$relative\"$crlf");
push(@projs, $relative);
}
}
if ($write) {
## Finish off the dependency information for the current
## project.
push(@read, $crlf);
foreach my $proj (@projs) {
push(@read, "[\"$proj\" Settings]$crlf",
"MatchConfigName=true$crlf", $crlf);
}
}
else {
## We don't need to re-write the file, so we can stop reading
## it.
last;
}
}
else {
## Save the line to possibly be written out at the end.
push(@read, $_);
}
}
close($fh);
## If we need to re-write the file, then do so
if ($write && open($fh, ">$outdir/$proj")) {
foreach my $line (@read) {
print $fh $line;
}
close($fh);
}
}
}
1;
|