summaryrefslogtreecommitdiff
path: root/ACE/MPC/modules/CCWorkspaceCreator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/MPC/modules/CCWorkspaceCreator.pm')
-rw-r--r--ACE/MPC/modules/CCWorkspaceCreator.pm117
1 files changed, 117 insertions, 0 deletions
diff --git a/ACE/MPC/modules/CCWorkspaceCreator.pm b/ACE/MPC/modules/CCWorkspaceCreator.pm
new file mode 100644
index 00000000000..5cb7bf7200d
--- /dev/null
+++ b/ACE/MPC/modules/CCWorkspaceCreator.pm
@@ -0,0 +1,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;