summaryrefslogtreecommitdiff
path: root/ACE/MPC/modules/NMakeWorkspaceCreator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/MPC/modules/NMakeWorkspaceCreator.pm')
-rw-r--r--ACE/MPC/modules/NMakeWorkspaceCreator.pm108
1 files changed, 108 insertions, 0 deletions
diff --git a/ACE/MPC/modules/NMakeWorkspaceCreator.pm b/ACE/MPC/modules/NMakeWorkspaceCreator.pm
new file mode 100644
index 00000000000..80e39a898f6
--- /dev/null
+++ b/ACE/MPC/modules/NMakeWorkspaceCreator.pm
@@ -0,0 +1,108 @@
+package NMakeWorkspaceCreator;
+
+# ************************************************************
+# Description : A NMake Workspace (Makefile) creator
+# Author : Chad Elliott
+# Create Date : 6/10/2002
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+
+use NMakeProjectCreator;
+use MakeWorkspaceBase;
+use WinWorkspaceBase;
+use WorkspaceCreator;
+
+use vars qw(@ISA);
+@ISA = qw(MakeWorkspaceBase WinWorkspaceBase WorkspaceCreator);
+
+# ************************************************************
+# Data Section
+# ************************************************************
+
+my $targets = 'clean depend generated realclean $(CUSTOM_TARGETS)';
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub workspace_file_extension {
+ #my $self = shift;
+ return '.mak';
+}
+
+
+sub pre_workspace {
+ my($self, $fh) = @_;
+ $self->workspace_preamble($fh, $self->crlf(), 'NMAKE Workspace',
+ '$Id$');
+}
+
+
+sub write_project_targets {
+ my($self, $fh, $crlf, $target, $list) = @_;
+ my $cwd = $self->getcwd();
+
+ ## Print out a make command for each project
+ foreach my $project (@$list) {
+ my $dir = $self->mpc_dirname($project);
+ my $chdir = ($dir ne '.');
+
+ print $fh ($chdir ? "\t\@cd $dir$crlf\t\@echo Directory: $dir$crlf" : ''),
+ "\t\@echo Project: ", $self->mpc_basename($project), $crlf,
+ "\t\$(MAKE) /\$(MAKEFLAGS) /f ", $self->mpc_basename($project),
+ " $target$crlf",
+ ($chdir ? "\t\@cd \$(MAKEDIR)$crlf" : '');
+ }
+}
+
+
+sub write_comps {
+ my($self, $fh) = @_;
+ my %targnum;
+ my $pjs = $self->get_project_info();
+ my @list = $self->number_target_deps($self->get_projects(), $pjs,
+ \%targnum, 0);
+ my $crlf = $self->crlf();
+ my $default = 'Win32 Debug';
+
+ ## Determine the default configuration. We want to get the Debug
+ ## configuration (if available). It just so happens that Debug comes
+ ## before Release so sorting the configurations works in our favor.
+ foreach my $project (keys %$pjs) {
+ my($name, $deps, $pguid, $lang, $custom_only, $nocross, $managed, @cfgs) = @{$pjs->{$project}};
+ @cfgs = sort @cfgs;
+ if (defined $cfgs[0]) {
+ $default = $cfgs[0];
+
+ ## The configuration comes out in the form that is usable to Visual
+ ## Studio. We need it to be in the form that was chosen for the
+ ## nmake configuration. So, we just swap the parts and remove the
+ ## '|' character.
+ $default =~ s/(.*)\|(.*)/$2 $1/;
+ last;
+ }
+ }
+
+ ## Print out the content
+ print $fh '!IF "$(CFG)" == ""', $crlf,
+ 'CFG=', $default, $crlf,
+ '!MESSAGE No configuration specified. ',
+ 'Defaulting to ', $default, '.', $crlf,
+ '!ENDIF', $crlf, $crlf,
+ '!IF "$(CUSTOM_TARGETS)" == ""', $crlf,
+ 'CUSTOM_TARGETS=_EMPTY_TARGET_', $crlf,
+ '!ENDIF', $crlf;
+
+ ## Send all the information to our base class method
+ $self->write_named_targets($fh, $crlf, \%targnum, \@list,
+ $targets, 'CFG="$(CFG)" ', '',
+ $self->project_target_translation());
+}
+
+
+1;