summaryrefslogtreecommitdiff
path: root/bin/MakeProjectCreator/modules/Driver.pm
diff options
context:
space:
mode:
Diffstat (limited to 'bin/MakeProjectCreator/modules/Driver.pm')
-rw-r--r--bin/MakeProjectCreator/modules/Driver.pm355
1 files changed, 0 insertions, 355 deletions
diff --git a/bin/MakeProjectCreator/modules/Driver.pm b/bin/MakeProjectCreator/modules/Driver.pm
deleted file mode 100644
index 91c70830a5d..00000000000
--- a/bin/MakeProjectCreator/modules/Driver.pm
+++ /dev/null
@@ -1,355 +0,0 @@
-package Driver;
-
-# ************************************************************
-# Description : Functionality to call a workspace or project creator
-# Author : Chad Elliott
-# Create Date : 5/28/2002
-# ************************************************************
-
-# ************************************************************
-# Pragmas
-# ************************************************************
-
-use strict;
-use File::Basename;
-
-use Options;
-use Parser;
-
-use vars qw(@ISA);
-@ISA = qw(Parser Options);
-
-# ************************************************************
-# Data Section
-# ************************************************************
-
-my($index) = 0;
-my(@progress) = ('|', '/', '-', '\\');
-my($cmdenv) = 'MPC_COMMANDLINE';
-
-# ************************************************************
-# Subroutine Section
-# ************************************************************
-
-sub new {
- my($class) = shift;
- my($path) = shift;
- my($name) = shift;
- my(@creators) = @_;
- my($self) = $class->SUPER::new();
-
- $self->{'path'} = $path;
- $self->{'name'} = $name;
- $self->{'version'} = 1.9;
- $self->{'types'} = {};
- $self->{'creators'} = \@creators;
- $self->{'default'} = $creators[0];
- $self->{'reldefs'} = {};
- $self->{'relorder'} = [];
-
- return $self;
-}
-
-
-sub convert_slashes {
- #my($self) = shift;
- return 0;
-}
-
-
-sub parse_line {
- my($self) = shift;
- my($ih) = shift;
- my($line) = shift;
- my($status) = 1;
- my($errorString) = '';
-
- if ($line eq '') {
- }
- elsif ($line =~ /^(\w+)(\s*,\s*(.*))?$/) {
- my($name) = $1;
- my($value) = $3;
- if (defined $value) {
- $value =~ s/^\s+//;
- $value =~ s/\s+$//;
- }
- $self->{'reldefs'}->{$name} = $value;
- push(@{$self->{'relorder'}}, $name);
- }
- else {
- $status = 0;
- $errorString = "ERROR: Unrecognized line: $line";
- }
-
- return $status, $errorString;
-}
-
-
-sub optionError {
- my($self) = shift;
- my($line) = shift;
- my($base) = $self->{'name'};
-
- if (defined $line) {
- print STDERR "$line\n";
- }
- my($spaces) = (' ' x (length($base) + 8));
- print STDERR "$base v$self->{'version'}\n" .
- "Usage: $base [-global <file>] [-include <directory>] [-recurse]\n" .
- $spaces . "[-ti <dll | lib | dll_exe | lib_exe>:<file>]\n" .
- $spaces . "[-template <file>] [-relative NAME=VAR] [-base <project>]\n" .
- $spaces . "[-noreldefs] [-notoplevel] [-static] [-static_only]\n" .
- $spaces . "[-value_template <NAME+=VAL | NAME=VAL | NAME-=VAL>]\n" .
- $spaces . "[-value_project <NAME+=VAL | NAME=VAL | NAME-=VAL>]\n" .
- $spaces . "[-type <";
-
- my(@keys) = sort keys %{$self->{'types'}};
- for(my $i = 0; $i <= $#keys; $i++) {
- print STDERR $keys[$i];
- if ($i != $#keys) {
- print STDERR ' | ';
- }
- if ((($i + 1) % 6) == 0) {
- print STDERR "\n$spaces ";
- }
- }
- print STDERR ">]\n" .
- $spaces . "[files]\n\n";
-
- my($default) = $self->extractType($self->{'default'});
- print STDERR
-" -base Add <project> as a base project to each generated\n" .
-" project file.\n" .
-" -global Specifies the global input file. Values stored\n" .
-" within this file are applied to all projects.\n" .
-" -include Specifies a directory to search when looking for base\n" .
-" projects, template input files and templates. This\n" .
-" option can be used multiple times to add directories.\n" .
-" -ti Specifies the template input file (with no extension)\n" .
-" for the specific type as shown above\n" .
-" (ex. -ti dll_exe:vc8exe)\n" .
-" -template Specifies the template name (with no extension).\n" .
-" -static Specifies that static projects will be generated in\n" .
-" addition to dynamic projects.\n" .
-" -static_only Specifies that only static projects will be generated.\n" .
-" -recurse Recurse from the current directory and generate from\n" .
-" all found input files.\n" .
-" -relative Any \$() variable in an mpc that is matched to NAME\n" .
-" is replaced by VAR only if VAR can be made into a\n" .
-" relative path based on the current working directory.\n" .
-" -noreldefs Do not try to generate default relative definitions.\n" .
-" -notoplevel Do not generate the top level target file. Files\n" .
-" are still process, but no top level file is created.\n" .
-" -value_template This option allows modification of a template input\n" .
-" name value pair. Use += to add VAL to the NAME's\n" .
-" value. Use -= to subtract and = to override the value.\n" .
-" It is important to note that this will only modify\n" .
-" existing template input name value pairs and can not\n" .
-" be used to introduce new name value pairs.\n" .
-" -value_project This option allows modification of a project variable\n" .
-" assignment . Use += to add VAL to the NAME's value.\n" .
-" Use -= to subtract and = to override the value.\n" .
-" This can be used to introduce new name value pairs to\n" .
-" a project. However, it must be a valid project\n" .
-" assignment.\n" .
-" -type Specifies the type of project file to generate. This\n" .
-" option can be used multiple times to generate multiple\n" .
-" types. If -type is not used, it defaults to '$default'.\n";
-
- exit(0);
-}
-
-
-sub run {
- my($self) = shift;
- my(@args) = @_;
- my($status) = 0;
-
- ## Dynamically load in each perl module and set up
- ## the type tags and project creators
- my($creators) = $self->{'creators'};
- foreach my $creator (@$creators) {
- my($tag) = $self->extractType($creator);
- $self->{'types'}->{$tag} = $creator;
- }
-
- ## Before we process the arguments, we will prepend the $cmdenv
- ## environment variable.
- if (defined $ENV{$cmdenv}) {
- my($envargs) = $self->create_array($ENV{$cmdenv});
- unshift(@args, @$envargs);
- }
-
- my($options) = $self->options($self->{'name'},
- $self->{'types'},
- 1,
- @args);
- if (!defined $options) {
- return $status;
- }
-
- ## Set up a hash that we can use to keep track of what
- ## has been 'required'
- my(%loaded) = ();
-
- ## Set up the default generator, if no type is selected
- if (!defined $options->{'generators'}->[0]) {
- push(@{$options->{'generators'}}, $self->{'default'});
- }
-
- if ($options->{'recurse'}) {
- if (defined $options->{'input'}->[0]) {
- ## This is an error.
- ## -recurse was used and input files were specified.
- $self->optionError('No files should be ' .
- 'specified when using -recurse');
- }
- else {
- ## We have to load at least one generator here in order
- ## to call the generate_recursive_input_list virtual function.
- my($name) = $options->{'generators'}->[0];
- if (!$loaded{$name}) {
- require "$name.pm";
- $loaded{$name} = 1;
- }
-
- ## Generate the recursive input list
- my($generator) = $name->new();
- my(@input) = $generator->generate_recursive_input_list('.');
- $options->{'input'} = \@input;
-
- ## If no files were found above, then we issue a warning
- ## that we are going to use the default input
- if (!defined $options->{'input'}->[0]) {
- print "WARNING: No files were found using the -recurse option.\n" .
- " Using the default input.\n";
- }
- }
- }
-
- ## Set up default values
- if (!defined $options->{'input'}->[0]) {
- push(@{$options->{'input'}}, '');
- }
- if (!defined $options->{'global'}) {
- my($global) = $self->{'path'} . '/config/global.mpb';
- if (-r $global) {
- $options->{'global'} = $global;
- }
- }
- ## Save the original directory outside of the loop
- ## to avoid calling it multiple times.
- my($orig_dir) = $self->getcwd();
-
- ## Always add the default include paths
- unshift(@{$options->{'include'}}, $orig_dir);
- unshift(@{$options->{'include'}}, $self->{'path'} . '/templates');
- unshift(@{$options->{'include'}}, $self->{'path'} . '/config');
-
- if ($options->{'reldefs'}) {
- ## Only try to read the file if it exists
- my($rel) = $self->{'path'} . '/config/default.rel';
- if (-r $rel) {
- my($srel, $errorString) = $self->read_file($rel);
- if (!$srel) {
- print STDERR "$errorString\nin $rel\n";
- return $status;
- }
- }
-
- foreach my $key (@{$self->{'relorder'}}) {
- if (defined $ENV{$key} &&
- !defined $options->{'relative'}->{$key}) {
- $options->{'relative'}->{$key} = $ENV{$key};
- }
- if (defined $self->{'reldefs'}->{$key} &&
- !defined $options->{'relative'}->{$key}) {
- my($value) = $self->{'reldefs'}->{$key};
- if ($value =~ /\$(\w+)(.*)?/) {
- my($var) = $1;
- my($extra) = $2;
- $options->{'relative'}->{$key} =
- (defined $options->{'relative'}->{$var} ?
- $options->{'relative'}->{$var} : '') .
- (defined $extra ? $extra : '');
- }
- else {
- $options->{'relative'}->{$key} = $value;
- }
- }
- }
- }
-
- ## Set up un-buffered output for the progress callback
- $| = 1;
-
- ## Generate the files
- foreach my $cfile (@{$options->{'input'}}) {
- ## To correctly reference any pathnames in the input file, chdir to
- ## its directory if there's any directory component to the specified path.
- my($base) = basename($cfile);
-
- if (-d $cfile) {
- $base = '';
- }
-
- foreach my $name (@{$options->{'generators'}}) {
- if (!$loaded{$name}) {
- require "$name.pm";
- $loaded{$name} = 1;
- }
- my($file) = $cfile;
- my($generator) = $name->new($options->{'global'},
- $options->{'include'},
- $options->{'template'},
- $options->{'ti'},
- $options->{'dynamic'},
- $options->{'static'},
- $options->{'relative'},
- $options->{'addtemp'},
- $options->{'addproj'},
- (-t 1 ? \&progress : undef),
- $options->{'toplevel'},
- $options->{'baseprojs'});
- if ($base ne $file) {
- my($dir) = ($base eq '' ? $file : dirname($file));
- if (!$generator->cd($dir)) {
- print STDERR "ERROR: Unable to change to directory: $dir\n";
- $status++;
- last;
- }
- $file = $base;
- }
- print 'Generating output using ' .
- ($file eq '' ? 'default input' : $file) . "\n";
- print 'Start Time: ' . scalar(localtime(time())) . "\n";
- if (!$generator->generate($file)) {
- print STDERR "ERROR: Unable to process: " .
- ($file eq '' ? 'default input' : $file) . "\n";
- $status++;
- last;
- }
- print ' End Time: ' . scalar(localtime(time())) . "\n";
- $generator->cd($orig_dir);
- }
- if ($status) {
- last;
- }
- }
-
- return $status;
-}
-
-
-sub progress {
- ## This method will be called before each output
- ## file (or set of output files in vc6's case) is written.
- print "$progress[$index]\r";
- $index++;
- if ($index > $#progress) {
- $index = 0;
- }
-}
-
-
-1;