diff options
Diffstat (limited to 'bin/MakeProjectCreator/modules')
28 files changed, 0 insertions, 7202 deletions
diff --git a/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm b/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm deleted file mode 100644 index 98d5073705f..00000000000 --- a/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm +++ /dev/null @@ -1,76 +0,0 @@ -package BorlandProjectCreator; - -# ************************************************************ -# Description : A Borland Project Creator -# Author : Chad Elliott -# Create Date : 3/14/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use ProjectCreator; -use File::Basename; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub fill_value { - my($self) = shift; - my($name) = shift; - my($value) = undef; - - if ($name eq 'cppdir') { - my(%dirnames) = (); - foreach my $file ($self->get_component_list('source_files')) { - my($dirname) = dirname($file); - if ($dirname eq '') { - $dirname = '.'; - } - $dirnames{$dirname} = 1; - } - $value = join(';', sort keys %dirnames); - } - - return $value; -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return 'Makefile' . ($name eq '' ? '' : ".$name") . '.bor'; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'borexe'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'bordll'; -} - - -sub get_template { - #my($self) = shift; - return 'bor'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm b/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm deleted file mode 100644 index 83b0c57a346..00000000000 --- a/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm +++ /dev/null @@ -1,94 +0,0 @@ -package BorlandWorkspaceCreator; - -# ************************************************************ -# Description : A Borland Workspace (Makefile.bor) creator -# Author : Chad Elliott -# Create Date : 7/02/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use File::Basename; - -use BorlandProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub workspace_file_name { - my($self) = shift; - return $self->get_modified_workspace_name('Makefile', '.bor'); -} - - -sub workspace_per_project { - #my($self) = shift; - return 1; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "#----------------------------------------------------------------------------$crlf" . - "# Borland Workspace$crlf" . - "#----------------------------------------------------------------------------$crlf" . - $crlf; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - - print $fh "!include <\$(ACE_ROOT)\\include\\makeinclude\\make_flags.bor>$crlf"; - - foreach my $target ('all', 'clean', 'realclean', 'install') { - print $fh $crlf . - "$target\:$crlf"; - foreach my $project (@list) { - my($dir) = dirname($project); - my($chdir) = 0; - my($back) = 1; - - ## If the directory isn't "." then we need - ## to figure out how to get back to our starting point - if ($dir ne '.') { - $chdir = 1; - my($length) = length($dir); - for(my $i = 0; $i < $length; $i++) { - if (substr($dir, $i, 1) eq '/') { - $back++; - } - } - } - - print $fh ($chdir ? "\t\@cd $dir$crlf" : '') . - "\t\$(MAKE) -\$(MAKEFLAGS) \$(MAKE_FLAGS) -f " . basename($project) . " $target$crlf" . - ($chdir ? "\t\@cd " . ('../' x $back) . $crlf : ''); - } - } - - # Generate a convenient rule for regenerating the workspace. - print $fh $crlf . - "regenerate:$crlf" . - "\t$^X $0 @ARGV$crlf"; -} - - - -1; diff --git a/bin/MakeProjectCreator/modules/Creator.pm b/bin/MakeProjectCreator/modules/Creator.pm deleted file mode 100644 index c1400ddaceb..00000000000 --- a/bin/MakeProjectCreator/modules/Creator.pm +++ /dev/null @@ -1,711 +0,0 @@ -package Creator; - -# ************************************************************ -# Description : Base class for workspace and project creators -# Author : Chad Elliott -# Create Date : 5/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use FileHandle; -use File::Basename; - -use Parser; - -use vars qw(@ISA); -@ISA = qw(Parser); - -# ************************************************************ -# Data Section -# ************************************************************ - -my(@statekeys) = ('global', 'include', 'template', 'ti', - 'dynamic', 'static', 'relative', 'addtemp', - 'addproj', 'progress', 'toplevel', 'baseprojs', - ); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($global) = shift; - my($inc) = shift; - my($template) = shift; - my($ti) = shift; - my($dynamic) = shift; - my($static) = shift; - my($relative) = shift; - my($addtemp) = shift; - my($addproj) = shift; - my($progress) = shift; - my($toplevel) = shift; - my($baseprojs) = shift; - my($type) = shift; - my($self) = Parser::new($class, $inc); - - $self->{'relative'} = $relative; - $self->{'template'} = $template; - $self->{'ti'} = $ti; - $self->{'global'} = $global; - $self->{'grammar_type'} = $type; - $self->{'type_check'} = $type . '_defined'; - $self->{'global_read'} = 0; - $self->{'current_input'} = ''; - $self->{'progress'} = $progress; - $self->{'addtemp'} = $addtemp; - $self->{'addproj'} = $addproj; - $self->{'toplevel'} = $toplevel; - $self->{'files_written'} = []; - $self->{'reading_global'} = 0; - $self->{'global_assign'} = {}; - $self->{'assign'} = {}; - $self->{'baseprojs'} = $baseprojs; - $self->{'dynamic'} = $dynamic; - $self->{'static'} = $static; - - return $self; -} - - -sub collect_line { - my($self) = shift; - my($fh) = shift; - my($lref) = shift; - my($line) = shift; - my($status) = 1; - my($errorString) = ''; - - $$lref .= $self->strip_line($line); - - if ($$lref =~ /\\$/) { - $$lref =~ s/\\$/ /; - } - else { - ($status, $errorString) = $self->parse_line($fh, $$lref); - $$lref = ""; - } - - return $status, $errorString; -} - - -sub generate_default_input { - my($self) = shift; - $self->parse_line(undef, "$self->{'grammar_type'} {"); - $self->parse_line(undef, '}'); - return 1; -} - - -sub parse_file { - my($self) = shift; - my($input) = shift; - my($typecheck) = $self->{'type_check'}; - my($oline) = $self->line_number(); - - ## Read the input file and get the last line number - my($status, $errorString) = $self->read_file($input); - my($linenumber) = $self->line_number(); - - if (!$status) { - print STDERR "$input: line $linenumber: $errorString\n"; - } - elsif ($status && $self->{$typecheck}) { - ## If we are at the end of the file and the type we are looking at - ## is still defined, then we have an error - print STDERR "$input: line $linenumber: ERROR: Did not " . - "find the end of the $self->{'grammar_type'}\n"; - $status = 0; - } - $self->line_number($oline); - - return $status; -} - - -sub generate { - my($self) = shift; - my($input) = shift; - my($status) = 1; - - ## Reset the files_written array between processing each file - $self->{'files_written'} = []; - - ## Allow subclasses to reset values before - ## each call to generate(). - $self->reset_values(); - - ## Read the global configuration file - if (!$self->{'global_read'}) { - $status = $self->read_global_configuration(); - $self->{'global_read'} = 1; - } - - if ($status) { - $self->{'current_input'} = $input; - - ## An empty input file name says that we - ## should generate a default input file and use that - if ($input eq '') { - $status = $self->generate_default_input(); - } - else { - $status = $self->parse_file($input); - } - } - - return $status; -} - - -sub parse_assignment { - my($self) = shift; - my($line) = shift; - my($values) = shift; - my($status) = 1; - - if ($line =~ /^(\w+)\s*=\s*(.*)?/) { - my($name) = lc($1); - my($value) = $2; - push(@$values, 'assignment', $name, $value); - } - elsif ($line =~ /^(\w+)\s*\+=\s*(.*)?/) { - my($name) = lc($1); - my($value) = $2; - push(@$values, 'assign_add', $name, $value); - } - elsif ($line =~ /^(\w+)\s*\-=\s*(.*)?/) { - my($name) = lc($1); - my($value) = $2; - push(@$values, 'assign_sub', $name, $value); - } - else { - $status = 0; - } - - return $status; -} - - -sub parse_known { - my($self) = shift; - my($line) = shift; - my($status) = 1; - my($errorString) = ''; - my($type) = $self->{'grammar_type'}; - my(@values) = (); - my($typecheck) = $self->{'type_check'}; - - ## - ## Each regexp that looks for the '{' looks for it at the - ## end of the line. It is purposely this way to decrease - ## the amount of extra lines in each file. This - ## allows for the most compact file as human readably - ## possible. - ## - if ($line eq '') { - } - elsif ($line =~ /^$type\s*(\([^\)]+\))?\s*(:.*)?\s*{$/) { - my($name) = $1; - my($parents) = $2; - if ($self->{$typecheck}) { - $errorString = "ERROR: Did not find the end of the $type"; - $status = 0; - } - else { - if (defined $parents) { - my(@parents) = (); - foreach my $parent (split(/[:,]/, $parents)) { - $parent =~ s/^\s+//; - $parent =~ s/\s+$//; - if ($parent ne '') { - push(@parents, $parent); - } - } - if (!defined $parents[0]) { - ## The : was used, but no parents followed. This - ## is an error. - $errorString = 'ERROR: No parents listed'; - $status = 0; - } - $parents = \@parents; - } - push(@values, $type, $name, $parents); - } - } - elsif ($line =~ /^}$/) { - if ($self->{$typecheck}) { - push(@values, $type, $line); - } - else { - $errorString = "ERROR: Did not find the beginning of the $type"; - $status = 0; - } - } - elsif (!$self->{$typecheck}) { - $errorString = "ERROR: No $type was defined"; - $status = 0; - } - elsif ($self->parse_assignment($line, \@values)) { - ## If this returns true, then we've found an assignment - } - elsif ($line =~ /^(\w+)\s*(\([^\)]+\))?\s*{$/) { - my($comp) = lc($1); - my($name) = $2; - - if (defined $name) { - $name =~ s/^\(\s*//; - $name =~ s/\s*\)$//; - } - else { - $name = 'default'; - } - push(@values, 'component', $comp, $name); - } - else { - $errorString = "ERROR: Unrecognized line: $line"; - $status = -1; - } - - return $status, $errorString, @values; -} - - -sub parse_scope { - my($self) = shift; - my($fh) = shift; - my($name) = shift; - my($type) = shift; - my($validNames) = shift; - my($flags) = shift; - my($status) = 0; - my($errorString) = "ERROR: Unable to process $name"; - - if (!defined $flags) { - $flags = {}; - } - - while(<$fh>) { - my($line) = $self->strip_line($_); - - if ($line eq '') { - } - elsif ($line =~ /^}/) { - $status = 1; - $errorString = ''; - $self->handle_scoped_end($type, $flags); - last; - } - else { - my(@values) = (); - if ($self->parse_assignment($line, \@values)) { - if (defined $$validNames{$values[1]}) { - if ($values[0] eq 'assignment') { - $self->process_assignment($values[1], $values[2], $flags); - } - elsif ($values[0] eq 'assign_add') { - $self->process_assignment_add($values[1], $values[2], $flags); - } - elsif ($values[0] eq 'assign_sub') { - $self->process_assignment_sub($values[1], $values[2], $flags); - } - } - else { - $status = 0; - $errorString = "ERROR: Invalid assignment name: $values[1]"; - last; - } - } - else { - ($status, $errorString) = $self->handle_scoped_unknown($fh, - $type, - $flags, - $line); - if (!$status) { - last; - } - } - } - } - return $status, $errorString; -} - - -sub base_directory { - my($self) = shift; - return basename($self->getcwd()); -} - - -sub generate_default_file_list { - my($self) = shift; - my($dir) = shift; - my($dh) = new FileHandle(); - my(@files) = (); - - if (!defined $dir) { - $dir = '.'; - } - - if (opendir($dh, $dir)) { - @files = grep(!/^\.\.?$/, readdir($dh)); - if ($self->sort_files()) { - @files = sort { $self->file_sorter($a, $b) } @files; - } - - ## Prefix each file name with the directory - ## only if it's not . - if ($dir ne '.') { - for(my $i = 0; $i <= $#files; $i++) { - $files[$i] = "$dir/$files[$i]"; - } - } - - closedir($dh); - } - return @files; -} - - -sub windows_crlf { - #my($self) = shift; - if ($^O eq 'MSWin32' || $^O eq 'cygwin') { - return "\n"; - } - else { - return "\r\n"; - } -} - - -sub transform_file_name { - my($self) = shift; - my($name) = shift; - - $name =~ s/[\s\/\\]/_/g; - return $name; -} - - -sub add_file_written { - my($self) = shift; - my($file) = shift; - - foreach my $written (@{$self->{'files_written'}}) { - if ($written eq $file) { - print "WARNING: $file has been overwritten by a " . - "$self->{'grammar_type'} with a duplicate name.\n"; - last; - } - } - push(@{$self->{'files_written'}}, $file); -} - - -sub extension_recursive_input_list { - my($self) = shift; - my($dir) = shift; - my($ext) = shift; - my($fh) = new FileHandle(); - my(@files) = (); - - if (opendir($fh, $dir)) { - foreach my $file (grep(!/^\.\.?$/, readdir($fh))) { - my($full) = ($dir ne '.' ? "$dir/" : '') . $file; - if (-d $full) { - push(@files, $self->extension_recursive_input_list($full, $ext)); - } - elsif ($full =~ /$ext$/) { - push(@files, $full); - } - } - closedir($fh); - } - - return @files; -} - - -sub modify_assignment_value { - my($self) = shift; - my($value) = shift; - - if ($self->convert_slashes()) { - $value = $self->slash_to_backslash($value); - } - return $value; -} - - -sub process_assignment { - my($self) = shift; - my($name) = shift; - my($value) = shift; - my($assign) = shift; - my($tag) = ($self->{'reading_global'} ? 'global_assign' : 'assign'); - - ## If no hash table was passed in - if (!defined $assign) { - $assign = $self->{$tag}; - } - - ## If we haven't yet defined the hash table in this project - if (!defined $assign) { - $assign = {}; - $self->{$tag} = $assign; - } - - if (defined $value) { - $value =~ s/^\s+//; - $value =~ s/\s+$//; - - ## Modify the assignment value before saving it - $value = $self->modify_assignment_value($value); - } - - $$assign{$name} = $value; -} - - -sub process_assignment_add { - my($self) = shift; - my($name) = shift; - my($value) = shift; - my($assign) = shift; - my($nval) = $self->get_assignment($name, $assign); - - if (defined $nval) { - $nval = "$value $nval"; - } - else { - $nval = $value; - } - $self->process_assignment($name, $nval, $assign); - $self->process_duplicate_modification($name, $assign); -} - - -sub process_assignment_sub { - my($self) = shift; - my($name) = shift; - my($value) = shift; - my($assign) = shift; - my($nval) = $self->get_assignment($name, $assign); - - if (defined $nval) { - my($parts) = $self->create_array($nval); - $nval = ''; - foreach my $part (@$parts) { - if ($part ne $value && $part ne '') { - $nval .= "$part "; - } - } - $self->process_assignment($name, $nval, $assign); - } -} - - -sub save_state { - my($self) = shift; - my(%state) = (); - - ## Make a deep copy of each state value. That way our array - ## references and hash references do not get accidentally modified. - foreach my $skey (@statekeys) { - if (UNIVERSAL::isa($self->{$skey}, 'ARRAY')) { - $state{$skey} = []; - foreach my $element (@{$self->{$skey}}) { - push(@{$state{$skey}}, $element); - } - } - elsif (UNIVERSAL::isa($self->{$skey}, 'HASH')) { - $state{$skey} = {}; - foreach my $key (keys %{$self->{$skey}}) { - $state{$skey}->{$key} = $self->{$skey}->{$key}; - } - } - else { - $state{$skey} = $self->{$skey}; - } - } - - return %state; -} - - -sub restore_state { - my($self) = shift; - my($state) = shift; - - ## Overwrite each state value - foreach my $skey (@statekeys) { - $self->{$skey} = $$state{$skey}; - } -} - - -sub get_global_cfg { - my($self) = shift; - return $self->{'global'}; -} - - -sub get_template_override { - my($self) = shift; - return $self->{'template'}; -} - - -sub get_ti_override { - my($self) = shift; - return $self->{'ti'}; -} - - -sub get_relative { - my($self) = shift; - return $self->{'relative'}; -} - - -sub get_current_input { - my($self) = shift; - return $self->{'current_input'}; -} - - -sub get_progress_callback { - my($self) = shift; - return $self->{'progress'}; -} - - -sub get_addtemp { - my($self) = shift; - return $self->{'addtemp'}; -} - - -sub get_addproj { - my($self) = shift; - return $self->{'addproj'}; -} - - -sub get_toplevel { - my($self) = shift; - return $self->{'toplevel'}; -} - - -sub get_files_written { - my($self) = shift; - return $self->{'files_written'}; -} - - -sub get_assignment { - my($self) = shift; - my($name) = shift; - my($assign) = shift; - - ## If no hash table was passed in - if (!defined $assign) { - my($tag) = ($self->{'reading_global'} ? 'global_assign' : 'assign'); - $assign = $self->{$tag}; - } - - return $$assign{$name}; -} - - -sub get_baseprojs { - my($self) = shift; - return $self->{'baseprojs'}; -} - - -sub get_dynamic { - my($self) = shift; - return $self->{'dynamic'}; -} - - -sub get_static { - my($self) = shift; - return $self->{'static'}; -} - -# ************************************************************ -# Virtual Methods To Be Overridden -# ************************************************************ - -sub handle_scoped_end { - #my($self) = shift; - #my($type) = shift; - #my($flags) = shift; -} - - -sub handle_scoped_unknown { - my($self) = shift; - my($fh) = shift; - my($type) = shift; - my($flags) = shift; - my($line) = shift; - return 0, "ERROR: Unrecognized line: $line"; -} - - -sub process_duplicate_modification { - #my($self) = shift; - #my($name) = shift; - #my($assign) = shift; -} - -sub generate_recursive_input_list { - #my($self) = shift; - #my($dir) = shift; - return (); -} - - -sub crlf { - #my($self) = shift; - return "\n"; -} - - -sub reset_values { - #my($self) = shift; -} - - -sub sort_files { - #my($self) = shift; - return 1; -} - - -sub file_sorter { - my($self) = shift; - my($left) = shift; - my($right) = shift; - return $left cmp $right; -} - - -sub read_global_configuration { - #my($self) = shift; - #my($input) = shift; - return 1; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/Driver.pm b/bin/MakeProjectCreator/modules/Driver.pm deleted file mode 100644 index 8aff9671adf..00000000000 --- a/bin/MakeProjectCreator/modules/Driver.pm +++ /dev/null @@ -1,346 +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.7; - $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; - } - } - ## Always add the default include paths - 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} = - $options->{'relative'}->{$var} . $extra; - } - else { - $options->{'relative'}->{$key} = $value; - } - } - } - } - - ## Set up un-buffered output for the progress callback - $| = 1; - - ## Save the original directory outside of the loop - ## to avoid calling it multiple times. - my($orig_dir) = $self->getcwd(); - - ## 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); - 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) = 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\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; diff --git a/bin/MakeProjectCreator/modules/EM3ProjectCreator.pm b/bin/MakeProjectCreator/modules/EM3ProjectCreator.pm deleted file mode 100644 index b15f24d9726..00000000000 --- a/bin/MakeProjectCreator/modules/EM3ProjectCreator.pm +++ /dev/null @@ -1,79 +0,0 @@ -package EM3ProjectCreator; - -# ************************************************************ -# Description : An eMbedded Visual C++ 3.00 Project Creator -# Author : Chad Elliott -# Create Date : 7/3/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use VC6ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(VC6ProjectCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub fill_value { - my($self) = shift; - my($name) = shift; - my($value) = undef; - - if ($name eq 'make_file_name') { - $value = $self->base_project_name() . '.vcn'; - } - - return $value; -} - - -sub project_file_name { - my($self) = shift; - return $self->project_name() . '.vcp'; -} - - -sub static_project_file_name { - my($self) = shift; - return $self->project_name() . $self->get_static_append() . '.vcp'; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'em3vcpdllexe'; -} - - -sub get_lib_exe_template_input_file { - #my($self) = shift; - return 'em3vcplibexe'; -} - - -sub get_lib_template_input_file { - #my($self) = shift; - return 'em3vcplib'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'em3vcpdll'; -} - - -sub get_template { - #my($self) = shift; - return 'em3vcp'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm b/bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm deleted file mode 100644 index a149e551cf5..00000000000 --- a/bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm +++ /dev/null @@ -1,43 +0,0 @@ -package EM3WorkspaceCreator; - -# ************************************************************ -# Description : An eMbedded v3 Workspace Creator -# Author : Chad Elliott -# Create Date : 7/3/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use EM3ProjectCreator; -use VC6WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(VC6WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - - -sub workspace_file_name { - my($self) = shift; - return $self->get_workspace_name() . '.vcw'; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "Microsoft eMbedded Visual Tools Workspace File, Format Version 3.00$crlf" . - "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!$crlf" . - $crlf; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/GHSProjectCreator.pm b/bin/MakeProjectCreator/modules/GHSProjectCreator.pm deleted file mode 100644 index 95302457818..00000000000 --- a/bin/MakeProjectCreator/modules/GHSProjectCreator.pm +++ /dev/null @@ -1,62 +0,0 @@ -package GHSProjectCreator; - -# ************************************************************ -# Description : Not a complete implementation for GHS -# Author : Chad Elliott -# Create Date : 4/19/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub file_sorter { - my($self) = shift; - my($left) = shift; - my($right) = shift; - return lc($left) cmp lc($right); -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return "ghs/$name.bld"; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'ghsexe'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'ghsdll'; -} - - -sub get_template { - #my($self) = shift; - return 'ghs'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm b/bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm deleted file mode 100644 index e26f2e51f0f..00000000000 --- a/bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm +++ /dev/null @@ -1,76 +0,0 @@ -package GHSWorkspaceCreator; - -# ************************************************************ -# Description : An incomplete GHS Workspace creator -# Author : Chad Elliott -# Create Date : 7/3/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use File::Basename; - -use GHSProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub workspace_file_name { - my($self) = shift; - return $self->get_modified_workspace_name('ghs/default', '.bld'); -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "#!build$crlf" . - "default:$crlf"; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($gen) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - - ## Print out the projet - print $fh "\tnobuild$crlf" . - "\t:cx_option=noexceptions$crlf" . - "\t:cx_option=std_namespaces$crlf" . - "\t:cx_template_option=noautomatic$crlf" . - "\t:language=cxx$crlf" . - "\t:cx_mode=ansi$crlf" . - "\t:cx_lib=scnoe$crlf"; - - foreach my $project (@list) { - ## Convert all /'s to \ - $project = $self->slash_to_backslash($project); - - print $fh "..\\$project$crlf"; - if ($gen->exe_target()) { - print $fh "\tprogram$crlf"; - } - else { - print $fh "\tlibrary$crlf"; - } - } -} - - - -1; diff --git a/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm b/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm deleted file mode 100644 index a7c55ef5898..00000000000 --- a/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm +++ /dev/null @@ -1,202 +0,0 @@ -package GNUACEProjectCreator; - -# ************************************************************ -# Description : A GNU Project Creator for ACE -# Author : Chad Elliott -# Create Date : 3/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use File::Basename; - -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Data Section -# ************************************************************ - -my(%compscript) = ('ACE_COMPONENTS' => ['--ace', '--set'], - 'TAO_COMPONENTS' => ['--tao', '--set'], - 'ORBSVCS_COMPONENTS' => ['--orbsvcs', '--append'], - ); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub sort_files { - #my($self) = shift; - return 0; -} - - -sub convert_slashes { - #my($self) = shift; - return 0; -} - - -sub fill_value { - my($self) = shift; - my($name) = shift; - my($value) = undef; - my($crlf) = $self->crlf(); - my($tag) = 'source_files'; - my($names) = $self->{$tag}; - - if ($name eq 'gnu_source_files') { - my(%vpath) = (); - $value = ''; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - - foreach my $key (sort keys %$comps) { - my($a) = $$comps{$key}; - my(@arr) = @$a; - my($cpy) = $key; - - $cpy =~ s/^\d+_//; - $value .= "$crlf$crlf$cpy = \\"; - for(my $i = 0; $i <= $#arr; $i++) { - my($item) = $arr[$i]; - my($dname) = dirname($item); - - $item =~ s/\.[^\.]+$//; - if ($dname ne '.' && $dname !~ /^\.\.\//) { - $vpath{$dname} = 1; - } - $value .= "$crlf $item" . ($i != $#arr ? " \\" : ''); - } - } - } - foreach my $name (keys %$names) { - my($fname) = ''; - my($comps) = $$names{$name}; - foreach my $key (sort keys %$comps) { - $fname = $key; - $fname =~ s/^\d+_//; - last; - } - - if ($name ne 'default') { - $fname = 'FILES'; - $value .= "$crlf$crlf" . "ifndef $name$crlf" . - " $name = \\$crlf"; - my(@keys) = sort keys %$comps; - for(my $i = 0; $i <= $#keys; $i++) { - $keys[$i] =~ s/^\d+_//; - my($key) = $keys[$i]; - $value .= " $key" . ($i != $#keys ? " \\" : '') . $crlf; - } - $value .= "endif # $name"; - - foreach my $key (@keys) { - $value .= "$crlf$crlf" . "ifneq (,\$(findstring $key, \$($name)))$crlf" . - " $fname += \$($key)$crlf" . - "endif # $key"; - } - } - } - my(@vkeys) = sort keys %vpath; - if ($#vkeys >= 0) { - $value .= "$crlf$crlf" . 'VPATH = .'; - foreach my $key (@vkeys) { - $value .= ":$key"; - } - } - } - elsif ($name eq 'build') { - foreach my $name (keys %$names) { - if ($name ne 'default') { - if (!defined $value) { - $value = 'BUILD +='; - } - $value .= " $name"; - } - } - } - elsif ($name eq 'comptarget') { - foreach my $name (keys %$names) { - if (defined $compscript{$name}) { - if (!defined $value) { - $value = ''; - } - $value .= "$crlf.PHONY: $name$crlf" . - "$name:$crlf" . - "\t\@sh \$(ACE_ROOT)/bin/ace_components $compscript{$name}->[0] $compscript{$name}->[1] '\$($name)'$crlf$crlf" . - "compclean:$crlf" . - "\t\@sh \$(ACE_ROOT)/bin/ace_components $compscript{$name}->[0] --remove"; - } - } - } - elsif ($name eq 'compclean') { - foreach my $name (keys %$names) { - if (defined $compscript{$name}) { - $value = 'compclean'; - last; - } - } - } - elsif ($name eq 'notdirfiles') { - $value = '$(notdir $(FILES))'; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $key (keys %$comps) { - my($arr) = $$comps{$key}; - foreach my $file (@$arr) { - if ($file =~ /^\.\.\//) { - $value = '$(FILES)'; - last; - } - } - } - } - } - elsif ($name eq 'tao') { - if ($self->get_assignment('includes') =~ /tao/i || - $self->get_assignment('libpaths') =~ /tao/i) { - $value = 1; - } - } - - return $value; -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return 'Makefile' . ($name eq '' ? '' : ".$name"); -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'gnuexe'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'gnudll'; -} - - -sub get_template { - #my($self) = shift; - return 'gnu'; -} - -1; diff --git a/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm b/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm deleted file mode 100644 index 9c00bc944b2..00000000000 --- a/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm +++ /dev/null @@ -1,98 +0,0 @@ -package GNUACEWorkspaceCreator; - -# ************************************************************ -# Description : A GNU Workspace (Makefile) creator for ACE -# Author : Chad Elliott -# Create Date : 5/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use File::Basename; - -use GNUACEProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub workspace_file_name { - my($self) = shift; - return $self->get_modified_workspace_name('Makefile', ''); -} - - -sub workspace_per_project { - #my($self) = shift; - return 1; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "#----------------------------------------------------------------------------$crlf" . - "# GNU Workspace$crlf" . - "#----------------------------------------------------------------------------$crlf" . - $crlf; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - - ## Print out the projet Makefile - print $fh "include \$(ACE_ROOT)/include/makeinclude/macros.GNU$crlf" . - "TARGETS_NESTED := \$(TARGETS_NESTED:.nested=)$crlf"; - - ## Only use the list if there is more than one project - if ($#list > 0) { - print $fh "MFILES = \\$crlf"; - for(my $i = 0; $i <= $#list; $i++) { - print $fh " $list[$i]"; - if ($i != $#list) { - print $fh ' \\'; - } - print $fh $crlf; - } - } - - print $fh $crlf . - "\$(TARGETS_NESTED):$crlf" . - "ifneq (Windows,\$(findstring Windows,\$(OS)))$crlf"; - - ## If there is more than one project, use a for loop - if ($#list > 0) { - print $fh "\t\@for file in \$(MFILES); do \\$crlf" . - "\t\$(MAKE) -f `basename \$\$file` -C `dirname \$\$file` \$(\@); \\$crlf" . - "\tdone$crlf"; - } - else { - ## Otherwise, just list the call to make without a for loop - print $fh "\t\@\$(MAKE) -f " . basename($list[0]) . ' -C ' . dirname($list[0]) . " \$(\@);$crlf"; - } - - print $fh "else$crlf"; - foreach my $project (@list) { - print $fh "\t-\@cmd /c \"\$(MAKE) -f " . basename($project) . ' -C ' . dirname($project) . " \$(\@)\"$crlf"; - } - print $fh "endif$crlf"; -} - - - -1; diff --git a/bin/MakeProjectCreator/modules/GUID.pm b/bin/MakeProjectCreator/modules/GUID.pm deleted file mode 100644 index 015db9c2a47..00000000000 --- a/bin/MakeProjectCreator/modules/GUID.pm +++ /dev/null @@ -1,58 +0,0 @@ -package GUID; - -# ************************************************************ -# Description : Generate GUID's for VC7 projects and workspaces -# Author : Chad Elliott -# Create Date : 5/14/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($self) = bless { - }, $class; - return $self; -} - - -sub generate { - my($self) = shift; - my($out) = shift; - my($in) = shift; - my($cwd) = shift; - my($chash) = $self->hash($cwd); - my($nhash) = $self->hash($out); - my($ihash) = $self->hash($in); - my($val) = 0xfeca1bad; - - return sprintf("%08X-%04X-%04X-%04X-%04X%08X", - $nhash, ($val >> 16) & 0xffff, ($val & 0xffff), - ($ihash >> 16) & 0xffff, $ihash & 0xffff, $chash); -} - - -sub hash { - my($self) = shift; - my($str) = shift; - my($value) = 0; - - if (defined $str) { - my($length) = length($str); - for(my $i = 0; $i < $length; $i++) { - $value = ($value << 4) ^ ($value >> 28) ^ ord(substr($str, $i, 1)); - } - } - - return $value; -} - -1; diff --git a/bin/MakeProjectCreator/modules/MakeProjectCreator.pm b/bin/MakeProjectCreator/modules/MakeProjectCreator.pm deleted file mode 100644 index c852fca6905..00000000000 --- a/bin/MakeProjectCreator/modules/MakeProjectCreator.pm +++ /dev/null @@ -1,65 +0,0 @@ -package MakeProjectCreator; - -# ************************************************************ -# Description : A Generic Make Project Creator -# Author : Chad Elliott -# Create Date : 2/18/2003 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub sort_files { - #my($self) = shift; - return 0; -} - - -sub convert_slashes { - #my($self) = shift; - return 0; -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return 'Makefile' . ($name eq '' ? '' : ".$name"); -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'makeexe'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'makedll'; -} - - -sub get_template { - #my($self) = shift; - return 'make'; -} - -1; diff --git a/bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm b/bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm deleted file mode 100644 index 99675f875fc..00000000000 --- a/bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm +++ /dev/null @@ -1,98 +0,0 @@ -package MakeWorkspaceCreator; - -# ************************************************************ -# Description : A Generic Workspace (Makefile) creator -# Author : Chad Elliott -# Create Date : 2/18/2003 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use File::Basename; - -use MakeProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub workspace_file_name { - my($self) = shift; - return $self->get_modified_workspace_name('Makefile', ''); -} - - -sub workspace_per_project { - #my($self) = shift; - return 1; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "#----------------------------------------------------------------------------$crlf" . - "# Make Workspace$crlf" . - "#----------------------------------------------------------------------------$crlf" . - $crlf; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - - ## Only use the list if there is more than one project - if ($#list > 0) { - print $fh "MFILES = \\$crlf"; - for(my $i = 0; $i <= $#list; $i++) { - print $fh " $list[$i]"; - if ($i != $#list) { - print $fh " \\"; - } - print $fh $crlf; - } - } - - ## Print out the projet Makefile - print $fh $crlf . - "all clean realclean:$crlf"; - - ## If there is more than one project, use a for loop - if ($#list > 0) { - print $fh "\t\@for file in \$(MFILES); do \\$crlf" . - "\told=`pwd`; \\$crlf" . - "\tcd `dirname \$\$file`; \\$crlf" . - "\t\$(MAKE) -f `basename \$\$file` \$(\@); \\$crlf" . - "\tcd \$\$old; \\$crlf" . - "\tdone$crlf"; - } - else { - ## Otherwise, just list the call to make without a for loop - print $fh "\t\@"; - my($dname) = dirname($list[0]); - if ($dname ne '.') { - print $fh "cd $dname && "; - } - print $fh "\$(MAKE) -f " . - ($dname eq '.' ? $list[0] : basename($list[0])) . - " \$(\@);$crlf"; - } -} - - - -1; diff --git a/bin/MakeProjectCreator/modules/NMakeProjectCreator.pm b/bin/MakeProjectCreator/modules/NMakeProjectCreator.pm deleted file mode 100644 index e6709bf3a1a..00000000000 --- a/bin/MakeProjectCreator/modules/NMakeProjectCreator.pm +++ /dev/null @@ -1,66 +0,0 @@ -package NMakeProjectCreator; - -# ************************************************************ -# Description : An NMake Project Creator -# Author : Chad Elliott -# Create Date : 5/31/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub sort_files { - #my($self) = shift; - return 0; -} - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return "$name.mak"; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'nmakeexe'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'nmakedll'; -} - - -sub get_template { - #my($self) = shift; - return 'nmake'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm b/bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm deleted file mode 100644 index 553edfce8e6..00000000000 --- a/bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm +++ /dev/null @@ -1,121 +0,0 @@ -package NMakeWorkspaceCreator; - -# ************************************************************ -# Description : A NMake Workspace (Makefile) creator -# Author : Chad Elliott -# Create Date : 6/10/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use File::Basename; - -use NMakeProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub workspace_file_name { - my($self) = shift; - return $self->get_modified_workspace_name('Makefile', ''); -} - - -sub workspace_per_project { - #my($self) = shift; - return 1; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "# Microsoft Developer Studio Generated NMAKE File$crlf$crlf"; -} - - -sub write_project_targets { - my($self) = shift; - my($fh) = shift; - my($target) = shift; - my($list) = shift; - my($crlf) = $self->crlf(); - - foreach my $project (@$list) { - my($dir) = dirname($project); - my($chdir) = 0; - my($back) = 1; - - ## If the directory isn't '.' then we need - ## to figure out how to get back to our starting point - if ($dir ne '.') { - $chdir = 1; - my($length) = length($dir); - for(my $i = 0; $i < $length; $i++) { - if (substr($dir, $i, 1) eq '/') { - $back++; - } - } - } - - print $fh ($chdir ? "\tcd $dir$crlf" : '') . - "\t\$(MAKE) /f " . basename($project) . " $target$crlf" . - ($chdir ? "\tcd " . ('../' x $back) . $crlf : ''); - } -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - my($default) = 'Win32 Debug'; - - ## Determine the default configuration - foreach my $project (keys %$pjs) { - my($name, $deps, $pguid, @cfgs) = @{$pjs->{$project}}; - @cfgs = sort @cfgs; - if (defined $cfgs[0]) { - $default = $cfgs[0]; - $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; - - foreach my $target ('ALL', 'DEPEND', 'IDL_STUBS', 'CLEAN', 'REALCLEAN') { - print $fh $crlf . - $target . ':' . $crlf; - $self->write_project_targets($fh, 'CFG="$(CFG)" ' . $target, \@list); - } -} - - - -1; diff --git a/bin/MakeProjectCreator/modules/Options.pm b/bin/MakeProjectCreator/modules/Options.pm deleted file mode 100644 index db3295bab8b..00000000000 --- a/bin/MakeProjectCreator/modules/Options.pm +++ /dev/null @@ -1,297 +0,0 @@ -package Options; - -# ************************************************************ -# Description : Process mpc command line options -# Author : Chad Elliott -# Create Date : 3/20/2003 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub optionError { - #my($self) = shift; - #my($str) = shift; -} - - -sub completion_command { - my($self) = shift; - my($name) = shift; - my($types) = shift; - my($str) = "complete $name " . - "'c/-/(global include type template relative " . - "ti static noreldefs notoplevel " . - "value_template value_project)/' " . - "'c/dll:/f/' 'c/dll_exe:/f/' 'c/lib_exe:/f/' 'c/lib:/f/' " . - "'n/-ti/(dll lib dll_exe lib_exe)/:' 'n/-type/("; - - my(@keys) = sort keys %$types; - for(my $i = 0; $i <= $#keys; $i++) { - $str .= $keys[$i]; - if ($i != $#keys) { - $str .= " "; - } - } - $str .= ")/'"; - return $str; -} - - -sub options { - my($self) = shift; - my($name) = shift; - my($types) = shift; - my($defaults) = shift; - my(@args) = @_; - my(@include) = (); - my(@input) = (); - my(@generators) = (); - my(@baseprojs) = (); - my(%ti) = (); - my(%relative) = (); - my(%addtemp) = (); - my(%addproj) = (); - my($global) = undef; - my($template) = undef; - my($dynamic) = ($defaults ? 1 : undef); - my($reldefs) = ($defaults ? 1 : undef); - my($toplevel) = ($defaults ? 1 : undef); - my($static) = ($defaults ? 0 : undef); - my($recurse) = ($defaults ? 0 : undef); - - ## Process the command line arguments - for(my $i = 0; $i <= $#args; $i++) { - my($arg) = $args[$i]; - if ($arg eq '-complete') { - print $self->completion_command($name, $types) . "\n"; - return undef; - } - elsif ($arg eq '-base') { - $i++; - if (!defined $args[$i]) { - $self->optionError('-base requires an argument'); - } - else { - push(@baseprojs, $args[$i]); - } - } - elsif ($arg eq '-type') { - $i++; - if (!defined $args[$i]) { - $self->optionError('-type requires an argument'); - } - else { - my($type) = lc($args[$i]); - if (defined $types->{$type}) { - my($call) = $types->{$type}; - my($found) = 0; - foreach my $generator (@generators) { - if ($generator eq $call) { - $found = 1; - last; - } - } - if (!$found) { - push(@generators, $call); - } - } - else { - $self->optionError("Invalid type: $args[$i]"); - } - } - } - elsif ($arg eq '-global') { - $i++; - $global = $args[$i]; - if (!defined $global) { - $self->optionError('-global requires a file name argument'); - } - } - elsif ($arg eq '-include') { - $i++; - my($include) = $args[$i]; - if (!defined $include) { - $self->optionError('-include requires a directory argument'); - } - else { - push(@include, $include); - } - } - elsif ($arg eq '-noreldefs') { - $reldefs = 0; - } - elsif ($arg eq '-notoplevel') { - $toplevel = 0; - } - elsif ($arg eq '-recurse') { - $recurse = 1; - } - elsif ($arg eq '-template') { - $i++; - $template = $args[$i]; - if (!defined $template) { - $self->optionError('-template requires a file name argument'); - } - } - elsif ($arg eq '-relative') { - $i++; - my($rel) = $args[$i]; - if (!defined $rel) { - $self->optionError('-relative requires a variable assignment argument'); - } - else { - if ($rel =~ /(\w+)\s*=\s*(.*)/) { - my($name) = $1; - my($val) = $2; - $val =~ s/^\s+//; - $val =~ s/\s+$//; - $relative{$name} = $val; - } - else { - $self->optionError('Invalid option to -relative'); - } - } - } - elsif ($arg eq '-ti') { - $i++; - my($tmpi) = $args[$i]; - if (!defined $tmpi) { - $self->optionError('-ti requires a template input argument'); - } - else { - if ($tmpi =~ /(dll|lib|dll_exe|lib_exe):(.*)/) { - my($key) = $1; - my($name) = $2; - $ti{$key} = $name; - } - else { - $self->optionError("Invalid -ti argument: $tmpi"); - } - } - } - elsif ($arg eq '-value_template') { - $i++; - my($value) = $args[$i]; - if (!defined $value) { - $self->optionError('-value_template requires a variable assignment argument'); - } - else { - if ($value =~ /(\w+)\s*([\-+]?=)\s*(.*)/) { - my($name) = $1; - my($op) = $2; - my($val) = $3; - $val =~ s/^\s+//; - $val =~ s/\s+$//; - if ($op eq '+=') { - $op = 1; - } - elsif ($op eq '-=') { - $op = -1; - } - else { - $op = 0; - } - $addtemp{$name} = [$op, $val]; - } - else { - $self->optionError('Invalid option to -value_template'); - } - } - } - elsif ($arg eq '-value_project') { - $i++; - my($value) = $args[$i]; - if (!defined $value) { - $self->optionError('-value_project requires a variable assignment argument'); - } - else { - if ($value =~ /(\w+)\s*([\-+]?=)\s*(.*)/) { - my($name) = $1; - my($op) = $2; - my($val) = $3; - $val =~ s/^\s+//; - $val =~ s/\s+$//; - if ($op eq '+=') { - $op = 1; - } - elsif ($op eq '-=') { - $op = -1; - } - else { - $op = 0; - } - $addproj{$name} = [$op, $val]; - } - else { - $self->optionError('Invalid option to -value_project'); - } - } - } - elsif ($arg eq '-static') { - $static = 1; - } - elsif ($arg eq '-static_only') { - $static = 1; - $dynamic = 0; - } - elsif ($arg =~ /^-/) { - $self->optionError("Unknown option: $arg"); - } - else { - push(@input, $arg); - } - } - - my(%options) = ('global' => $global, - 'include' => \@include, - 'input' => \@input, - 'generators' => \@generators, - 'baseprojs' => \@baseprojs, - 'template' => $template, - 'ti' => \%ti, - 'dynamic' => $dynamic, - 'static' => $static, - 'relative' => \%relative, - 'reldefs' => $reldefs, - 'toplevel' => $toplevel, - 'recurse' => $recurse, - 'addtemp' => \%addtemp, - 'addproj' => \%addproj, - ); - - return \%options; -} - - -sub is_set { - my($self) = shift; - my($key) = shift; - my($options) = shift; - - if (UNIVERSAL::isa($options->{$key}, 'ARRAY')) { - if (defined $options->{$key}->[0]) { - return 'ARRAY'; - } - } - elsif (UNIVERSAL::isa($options->{$key}, 'HASH')) { - my(@keys) = keys %{$options->{$key}}; - if (defined $keys[0]) { - return 'HASH'; - } - } - elsif (defined $options->{$key}) { - return 'SCALAR'; - } - - return undef; -} - -1; diff --git a/bin/MakeProjectCreator/modules/Parser.pm b/bin/MakeProjectCreator/modules/Parser.pm deleted file mode 100644 index 1376c8ac408..00000000000 --- a/bin/MakeProjectCreator/modules/Parser.pm +++ /dev/null @@ -1,175 +0,0 @@ -package Parser; - -# ************************************************************ -# Description : A basic parser that requires a parse_line override -# Author : Chad Elliott -# Create Date : 5/16/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use FileHandle; - -use StringProcessor; - -use vars qw(@ISA); -@ISA = qw(StringProcessor); - -# ************************************************************ -# Data Section -# ************************************************************ - -my($cwd) = Cwd::getcwd(); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($inc) = shift; - my($self) = $class->SUPER::new(); - - $self->{'line_number'} = 0; - $self->{'include'} = $inc; - - return $self; -} - - -sub cd { - my($self) = shift; - my($dir) = shift; - my($status) = chdir($dir); - if ($status && $dir ne '.') { - if ($dir =~ /^\// || $dir =~ /^[A-Za-z]:/) { - $cwd = $dir; - } - else { - $cwd .= "/$dir"; - } - } - return $status; -} - - -sub getcwd { - #my($self) = shift; - return $cwd; -} - - -sub strip_line { - my($self) = shift; - my($line) = shift; - - ++$self->{'line_number'}; - $line =~ s/\/\/.*//; - $line =~ s/^\s+//; - $line =~ s/\s+$//; - - return $line; -} - - -sub collect_line { - my($self) = shift; - my($fh) = shift; - my($lref) = shift; - my($line) = shift; - - $$lref = $self->strip_line($line); - return $self->parse_line($fh, $$lref); -} - - -sub read_file { - my($self) = shift; - my($input) = shift; - my($ih) = new FileHandle(); - my($status) = 1; - my($errorString) = ''; - - $self->{'line_number'} = 0; - if (open($ih, $input)) { - my($line) = ""; - while(<$ih>) { - ($status, $errorString) = $self->collect_line($ih, \$line, $_); - - if (!$status) { - last; - } - } - close($ih); - } - else { - $errorString = 'ERROR: Unable to open for reading'; - $status = 0; - } - - return $status, $errorString; -} - - -sub line_number { - my($self) = shift; - my($number) = shift; - - if (defined $number) { - $self->{'line_number'} = $number; - } - - return $self->{'line_number'}; -} - - -sub slash_to_backslash { - my($self) = shift; - my($file) = shift; - $file =~ s/\//\\/g; - return $file; -} - - -sub get_include_path { - my($self) = shift; - return $self->{'include'}; -} - - -sub search_include_path { - my($self) = shift; - my($file) = shift; - my($found) = undef; - - foreach my $include (@{$self->{'include'}}) { - if (-r "$include/$file") { - $found = "$include/$file"; - last; - } - } - return $found; -} - - -# ************************************************************ -# Virtual Methods To Be Overridden -# ************************************************************ - -sub convert_slashes { - #my($self) = shift; - return 1; -} - - -sub parse_line { - #my($self) = shift; - #my($ih) = shift; - #my($line) = shift; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/ProjectCreator.pm b/bin/MakeProjectCreator/modules/ProjectCreator.pm deleted file mode 100644 index 112e6f75fe5..00000000000 --- a/bin/MakeProjectCreator/modules/ProjectCreator.pm +++ /dev/null @@ -1,1663 +0,0 @@ -package ProjectCreator; - -# ************************************************************ -# Description : Base class for all project creators -# Author : Chad Elliott -# Create Date : 3/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use FileHandle; -use File::Path; -use File::Basename; - -use Creator; -use TemplateInputReader; -use TemplateParser; - -use vars qw(@ISA); -@ISA = qw(Creator); - -# ************************************************************ -# Data Section -# ************************************************************ - -my($BaseClassExtension) = 'mpb'; -my($ProjectCreatorExtension) = 'mpc'; -my($TemplateExtension) = 'mpd'; -my($TemplateInputExtension) = 'mpt'; - -## Valid names for assignments within a project -my(%validNames) = ('exename' => 1, - 'sharedname' => 1, - 'staticname' => 1, - 'libpaths' => 1, - 'install' => 1, - 'includes' => 1, - 'idlflags' => 1, - 'idlpreprocessor' => 1, - 'defaultlibs' => 1, - 'depends' => 1, - 'libs' => 1, - 'lit_libs' => 1, - 'pch_header' => 1, - 'pch_source' => 1, - 'ssl' => 1, - 'dllout' => 1, - 'libout' => 1, - 'dllflags' => 1, - 'libflags' => 1, - 'version' => 1, - 'requires' => 1, - 'avoids' => 1, - 'compname' => 1, - 'comps' => 1, - 'tagname' => 1, - 'tagchecks' => 1, - 'include_dir' => 1, - 'core' => 1, - 'idlgendir' => 1, - ); - -## Deal with these components in a special way -my(@specialComponents) = ('header_files', 'inline_files'); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($global) = shift; - my($inc) = shift; - my($template) = shift; - my($ti) = shift; - my($dynamic) = shift; - my($static) = shift; - my($relative) = shift; - my($addtemp) = shift; - my($addproj) = shift; - my($progress) = shift; - my($toplevel) = shift; - my($baseprojs) = shift; - my($self) = Creator::new($class, $global, $inc, - $template, $ti, $dynamic, $static, - $relative, $addtemp, $addproj, - $progress, $toplevel, $baseprojs, - 'project'); - - $self->{$self->{'type_check'}} = 0; - $self->{'project_info'} = []; - $self->{'reading_parent'} = []; - $self->{'dexe_template_input'} = undef; - $self->{'lexe_template_input'} = undef; - $self->{'lib_template_input'} = undef; - $self->{'dll_template_input'} = undef; - $self->{'idl_defaulted'} = 0; - $self->{'source_defaulted'} = 0; - $self->{'writing_type'} = 0; - $self->{'flag_overrides'} = {}; - $self->{'special_supplied'} = {}; - - ## Set up the verbatim constructs - $self->{'verbatim'} = {}; - - ## Valid component names within a project along with the valid file extensions - my(%vc) = ('source_files' => [ "\\.cpp", "\\.cxx", "\\.cc", "\\.c", "\\.C", ], - 'template_files' => [ "_T\\.cpp", "_T\\.cxx", "_T\\.cc", "_T\\.c", "_T\\.C", ], - 'header_files' => [ "\\.h", "\\.hxx", "\\.hh", ], - 'inline_files' => [ "\\.i", "\\.inl", ], - 'idl_files' => [ "\\.idl", ], - 'documentation_files' => [ "README", "readme", "\\.doc", "\\.txt", ], - 'resource_files' => [ "\\.rc", ], - ); - - ## Exclude these extensions when auto generating the component values - my(%ec) = ('source_files' => [ "_T\\.cpp", "_T\\.cxx", "_T\\.cc", "_T\\.C", ], - ); - - ## Match up assignments with the valid components - my(%ma) = ('source_files' => [ 'includes' ], - 'idl_files' => [ 'idlgendir', 'idlflags' ], - ); - $self->{'matching_assignments'} = \%ma; - $self->{'valid_components'} = \%vc; - $self->{'exclude_components'} = \%ec; - $self->{'skeleton_endings'} = [ 'C', 'S' ]; - $self->{'type_specific_assign'} = {}; - $self->{'pctype'} = $self->extractType("$self"); - - ## Allow subclasses to override the default extensions - $self->set_component_extensions(); - - return $self; -} - - -sub read_global_configuration { - my($self) = shift; - my($input) = $self->get_global_cfg(); - my($status) = 1; - - if (defined $input) { - $self->{'reading_global'} = 1; - $status = $self->parse_file($input); - $self->{'reading_global'} = 0; - } - - return $status; -} - - -sub parse_line { - my($self) = shift; - my($ih) = shift; - my($line) = shift; - my($type) = $self->{'grammar_type'}; - my($status, - $errorString, - @values) = $self->parse_known($line); - - ## parse_known() passes back an array of values - ## that make up the contents of the line parsed. - ## The array can have 0 to 3 items. The first, - ## if defined, is always an identifier of some - ## sort. - - if ($status && defined $values[0]) { - if ($values[0] eq $type) { - my($name) = $values[1]; - my($typecheck) = $self->{'type_check'}; - if (defined $name && $name eq '}') { - ## Project Ending - my($rp) = $self->{'reading_parent'}; - if (!defined $$rp[0] && !$self->{'reading_global'}) { - ## Fill in all the default values - $self->generate_defaults(); - - ## Fill in type specific assignments - my($tsa) = $self->{'type_specific_assign'}->{$self->{'pctype'}}; - if (defined $tsa) { - foreach my $key (keys %$tsa) { - $self->process_assignment_add($key, $$tsa{$key}); - } - } - - ## Perform any additions, subtractions - ## or overrides for the project values. - my($addproj) = $self->get_addproj(); - foreach my $ap (keys %$addproj) { - if (defined $validNames{$ap}) { - my($val) = $$addproj{$ap}; - if ($$val[0] > 0) { - $self->process_assignment_add($ap, $$val[1]); - } - elsif ($$val[0] < 0) { - $self->process_assignment_sub($ap, $$val[1]); - } - else { - $self->process_assignment($ap, $$val[1]); - } - } - else { - $errorString = 'ERROR: Invalid ' . - "assignment modification name: $ap"; - $status = 0; - } - } - - if ($status) { - ## End of project; Write out the file. - $self->write_project(); - - foreach my $key (keys %{$self->{'valid_components'}}) { - delete $self->{$key}; - } - $self->{'assign'} = {}; - $self->{'verbatim'} = {}; - $self->{'type_specific_assign'} = {}; - } - } - $self->{$typecheck} = 0; - $self->{'idl_defaulted'} = 0; - $self->{'flag_overrides'} = {}; - $self->{'source_defaulted'} = 0; - $self->{'special_supplied'} = {}; - } - else { - ## Project Beginning - ## Deal with the inheritance hiearchy first - my($parents) = $values[2]; - - ## Add in the base projects from the command line - if (!$self->{'reading_global'} && - !defined $self->{'reading_parent'}->[0]) { - my($baseprojs) = $self->get_baseprojs(); - - if (defined $parents) { - foreach my $base (@$baseprojs) { - my($found) = 0; - foreach my $parent (@$parents) { - if ($base eq $parent) { - $found = 1; - last; - } - } - if (!$found) { - push(@$parents, $base); - } - } - } - else { - $parents = $baseprojs; - } - } - - if (defined $parents) { - foreach my $parent (@$parents) { - ## Read in the parent onto ourself - my($file) = $self->search_include_path( - "$parent.$BaseClassExtension"); - if (!defined $file) { - $file = $self->search_include_path( - "$parent.$ProjectCreatorExtension"); - } - - if (defined $file) { - push(@{$self->{'reading_parent'}}, 1); - $status = $self->parse_file($file); - pop(@{$self->{'reading_parent'}}); - - if (!$status) { - $errorString = "ERROR: Invalid parent: $parent"; - } - } - else { - $status = 0; - $errorString = "ERROR: Unable to locate parent: $parent"; - } - } - } - - ## Set up some initial values - if (defined $name) { - $name =~ s/^\(\s*//; - $name =~ s/\s*\)$//; - $self->process_assignment('project_name', $name); - } - $self->{$typecheck} = 1; - - ## Copy each value from global_assign into assign - if (!$self->{'reading_global'}) { - foreach my $key (keys %{$self->{'global_assign'}}) { - if (!defined $self->{'assign'}->{$key}) { - $self->{'assign'}->{$key} = $self->{'global_assign'}->{$key}; - } - } - } - } - } - elsif ($values[0] eq 'assignment') { - my($name) = $values[1]; - my($value) = $values[2]; - if (defined $validNames{$name}) { - $self->process_assignment($name, $value); - } - else { - $errorString = "ERROR: Invalid assignment name: $name"; - $status = 0; - } - } - elsif ($values[0] eq 'assign_add') { - my($name) = $values[1]; - my($value) = $values[2]; - if (defined $validNames{$name}) { - $self->process_assignment_add($name, $value); - } - else { - $errorString = "ERROR: Invalid addition name: $name"; - $status = 0; - } - } - elsif ($values[0] eq 'assign_sub') { - my($name) = $values[1]; - my($value) = $values[2]; - if (defined $validNames{$name}) { - $self->process_assignment_sub($name, $value); - } - else { - $errorString = "ERROR: Invalid subtraction name: $name"; - $status = 0; - } - } - elsif ($values[0] eq 'component') { - my($comp) = $values[1]; - my($name) = $values[2]; - if (defined $name) { - $name =~ s/^\(\s*//; - $name =~ s/\s*\)$//; - } - else { - $name = 'default'; - } - - my($vc) = $self->{'valid_components'}; - if (defined $$vc{$comp}) { - if (!$self->parse_components($ih, $comp, $name)) { - $errorString = "ERROR: Unable to process $comp"; - $status = 0; - } - } - else { - if ($comp eq 'verbatim') { - my($type, $loc) = split(/\s*,\s*/, $name); - if (!$self->parse_verbatim($ih, $comp, $type, $loc)) { - $errorString = "ERROR: Unable to process $comp"; - $status = 0; - } - } - elsif ($comp eq 'specific') { - ($status, $errorString) = $self->parse_scope( - $ih, $values[1], $values[2], \%validNames, - $self->{'type_specific_assign'}->{$self->{'pctype'}}); - } - else { - $errorString = "ERROR: Invalid component name: $comp"; - $status = 0; - } - } - } - else { - $errorString = "ERROR: Unrecognized line: $line"; - $status = 0; - } - } - elsif ($status == -1) { - $status = 0; - } - - return $status, $errorString; -} - - -sub parse_components { - my($self) = shift; - my($fh) = shift; - my($tag) = shift; - my($name) = shift; - my($current) = '000_FILES'; - my($status) = 1; - my($names) = {}; - my($comps) = {}; - my($order) = 0; - my($set) = 0; - my(%flags) = (); - - if (defined $self->{$tag}) { - $names = $self->{$tag}; - } - else { - $self->{$tag} = $names; - } - if (defined $$names{$name}) { - $comps = $$names{$name}; - } - else { - $$names{$name} = $comps; - } - if (!defined $$comps{$current}) { - $$comps{$current} = []; - } - - foreach my $special (@specialComponents) { - if ($special eq $tag) { - $self->{'special_supplied'}->{$tag} = 1; - last; - } - } - - while(<$fh>) { - my($line) = $self->strip_line($_); - - if ($line eq '') { - } - elsif ($line =~ /^(\w+)\s*{$/) { - if (!defined $current || !$set) { - if (defined $current && !defined $$comps{$current}->[0]) { - ## The default components name was never used - ## so we remove it from the components - delete $$comps{$current}; - } - $current = sprintf("%03d_$1", $order); - $set = 1; - $order++; - if (!defined $$comps{$current}) { - $$comps{$current} = []; - } - } - else { - $status = 0; - last; - } - } - elsif ($line =~ /^}/) { - if (defined $current && $set) { - $current = undef; - } - else { - ## This is not an error, - ## this is the end of the components - last; - } - } - elsif (defined $current) { - my(@values) = (); - ## If this returns true, then we've found an assignment - if ($self->parse_assignment($line, \@values)) { - my($over) = {}; - if (defined $self->{'flag_overrides'}->{$tag}) { - $over = $self->{'flag_overrides'}->{$tag}; - } - else { - $self->{'flag_overrides'}->{$tag} = $over; - } - - if ($values[0] eq 'assignment') { - $self->process_assignment($values[1], - $values[2], \%flags); - } - elsif ($values[0] eq 'assign_add') { - $self->process_assignment_add($values[1], - $values[2], \%flags); - } - elsif ($values[0] eq 'assign_sub') { - $self->process_assignment_sub($values[1], - $values[2], \%flags); - } - } - else { - my($over) = $self->{'flag_overrides'}->{$tag}; - if (defined $over) { - $$over{$line} = \%flags; - } - my($array) = $$comps{$current}; - push(@$array, $line); - } - } - else { - $status = 0; - last; - } - } - - return $status; -} - - -sub parse_verbatim { - my($self) = shift; - my($fh) = shift; - my($tag) = shift; - my($type) = shift; - my($loc) = shift; - - ## All types are lowercase - $type = lc($type); - - if (!defined $self->{'verbatim'}->{$type}) { - $self->{'verbatim'}->{$type} = {}; - } - $self->{'verbatim'}->{$type}->{$loc} = []; - my($array) = $self->{'verbatim'}->{$type}->{$loc}; - - while(<$fh>) { - my($line) = $self->strip_line($_); - - if ($line eq '') { - } - elsif ($line =~ /^}/) { - ## This is not an error, - ## this is the end of the components - last; - } - else { - push(@$array, $line); - } - } - - return 1; -} - - -sub handle_scoped_end { - my($self) = shift; - my($type) = shift; - my($flags) = shift; - - if (defined $self->{'type_specific_assign'}->{$type}) { - foreach my $key (keys %$flags) { - $self->{'type_specific_assign'}->{$type}->{$key} = $$flags{$key}; - } - } - else { - $self->{'type_specific_assign'}->{$type} = $flags; - } -} - - -sub process_duplicate_modification { - my($self) = shift; - my($name) = shift; - my($assign) = shift; - - ## If we are modifying the libs, libpaths or includes assignment with - ## either addition or subtraction, we are going to - ## perform a little fix on the value to avoid multiple - ## libraries and to try to insure the correct linking order - if ($name eq 'libs' || $name eq 'libpaths' || $name eq 'includes') { - my($nval) = $self->get_assignment($name, $assign); - if (defined $nval) { - my($parts) = $self->create_array($nval); - my(%seen) = (); - my($value) = ''; - foreach my $part (reverse @$parts) { - if (!defined $seen{$part}) { - $value = "$part $value"; - $seen{$part} = 1; - } - } - $self->process_assignment($name, $value, $assign); - } - } -} - - -sub read_template_input { - my($self) = shift; - my($status) = 1; - my($errorString) = ''; - my($file) = undef; - my($tag) = undef; - my($ti) = $self->get_ti_override(); - my($override) = 0; - - if ($self->exe_target()) { - if ($self->{'writing_type'} == 1) { - $tag = 'lexe_template_input'; - if (!defined $self->{$tag}) { - if (defined $$ti{'lib_exe'}) { - $file = $$ti{'lib_exe'}; - $override = 1; - } - else { - $file = $self->get_lib_exe_template_input_file(); - } - } - } - else { - $tag = 'dexe_template_input'; - if (!defined $self->{$tag}) { - if (defined $$ti{'dll_exe'}) { - $file = $$ti{'dll_exe'}; - $override = 1; - } - else { - $file = $self->get_dll_exe_template_input_file(); - } - } - } - } - else { - if ($self->{'writing_type'} == 1) { - $tag = 'lib_template_input'; - if (!defined $self->{$tag}) { - if (defined $$ti{'lib'}) { - $file = $$ti{'lib'}; - $override = 1; - } - else { - $file = $self->get_lib_template_input_file(); - } - } - } - else { - $tag = 'dll_template_input'; - if (!defined $self->{$tag}) { - if (defined $$ti{'dll'}) { - $file = $$ti{'dll'}; - $override = 1; - } - else { - $file = $self->get_dll_template_input_file(); - } - } - } - } - - if (defined $file) { - my($file) = $self->search_include_path("$file.$TemplateInputExtension"); - if (defined $file) { - $self->{$tag} = new TemplateInputReader($self->get_include_path()); - ($status, $errorString) = $self->{$tag}->read_file($file); - } - else { - if ($override) { - $status = 0; - $errorString = 'Unable to locate template input file.'; - } - } - } - - return $status, $errorString; -} - - -sub already_added { - my($self) = shift; - my($array) = shift; - my($name) = shift; - - foreach my $file (@$array) { - if ($file eq $name) { - return 1; - } - } - return 0; -} - - -sub add_idl_generated { - my($self) = shift; - my($tag) = shift; - my($idl) = shift; - my($names) = $self->{$tag}; - my($vc) = $self->{'valid_components'}; - my($wanted) = $$vc{$tag}->[0]; - my(@added) = (); - - $wanted =~ s/\\//; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $key (keys %$comps) { - my($array) = $$comps{$key}; - foreach my $i (@$idl) { - my($file) = $i; - $file =~ s/\.idl$//; - foreach my $ending (@{$self->{'skeleton_endings'}}) { - my($created) = "$file$ending$wanted"; - if (!$self->already_added($array, $created)) { - push(@added, $created); - } - } - } - ## Put the generated files at the front - if (defined $added[0]) { - unshift(@$array, @added); - } - } - } -} - - -sub generate_default_target_names { - my($self) = shift; - - if (!$self->exe_target()) { - my($sharedname) = $self->get_assignment('sharedname'); - if (defined $sharedname && - !defined $self->get_assignment('staticname')) { - $self->process_assignment('staticname', $sharedname); - } - my($staticname) = $self->get_assignment('staticname'); - if (defined $staticname && - !defined $self->get_assignment('sharedname')) { - $self->process_assignment('sharedname', $staticname); - $sharedname = $staticname; - } - - ## If it's neither an exe or library target, we will search - ## through the source files for a main() - if (!$self->lib_target()) { - my($fh) = new FileHandle(); - my($exename) = undef; - foreach my $file ($self->get_component_list('source_files')) { - if (open($fh, $file)) { - while(<$fh>) { - ## Remove c++ comments (ignore c style comments for now) - $_ =~ s/\/\/.*//; - - ## Check for main - if (/(main|ACE_MAIN|ACE_WMAIN|ACE_TMAIN)\s*\(/) { - ## If we found a main, set the exename to the basename - ## of the cpp file with the extension removed - $exename = basename($file); - $exename =~ s/\.[^\.]+$//; - last; - } - } - close($fh); - } - - ## Set the exename assignment - if (defined $exename) { - $self->process_assignment('exename', $exename); - last; - } - } - } - } -} - - -sub generate_default_pch_filenames { - my($self) = shift; - my($files) = shift; - my($pname) = $self->get_assignment('project_name'); - - if (!defined $self->get_assignment('pch_header')) { - my($count) = 0; - my($matching) = undef; - foreach my $file (@$files) { - foreach my $ext (@{$self->{'valid_components'}->{'header_files'}}) { - if ($file =~ /(.*_pch$ext)/) { - $self->process_assignment('pch_header', $1); - ++$count; - if ($file =~ /$pname/) { - $matching = $file; - } - last; - } - } - } - if ($count > 1 && defined $matching) { - $self->process_assignment('pch_header', $matching); - } - } - - if (!defined $self->get_assignment('pch_source')) { - my($count) = 0; - my($matching) = undef; - foreach my $file (@$files) { - foreach my $ext (@{$self->{'valid_components'}->{'source_files'}}) { - if ($file =~ /(.*_pch$ext)/) { - $self->process_assignment('pch_source', $1); - ++$count; - if ($file =~ /$pname/) { - $matching = $file; - } - last; - } - } - } - if ($count > 1 && defined $matching) { - $self->process_assignment('pch_source', $matching); - } - } -} - - -sub fix_pch_filenames { - my($self) = shift; - foreach my $type ('pch_header', 'pch_source') { - if ($self->get_assignment($type) eq '') { - $self->process_assignment($type, undef); - } - } -} - - -sub is_special_tag { - my($self) = shift; - my($tag) = shift; - - foreach my $t (@specialComponents) { - if ($tag eq $t) { - return 1; - } - } - - return 0; -} - - -sub escape_regex_special { - my($self) = shift; - my($name) = shift; - - $name =~ s/\\/\\\\/g; - $name =~ s/\$/\\\$/g; - $name =~ s/\[/\\\[/g; - $name =~ s/\]/\\\]/g; - $name =~ s/\(/\\\(/g; - $name =~ s/\)/\\\)/g; - - return $name; -} - - -sub sift_files { - my($self) = shift; - my($files) = shift; - my($exts) = shift; - my($pchh) = shift; - my($pchc) = shift; - my($tag) = shift; - my($array) = shift; - my(@saved) = (); - my($ec) = $self->{'exclude_components'}; - - foreach my $file (@$files) { - foreach my $ext (@$exts) { - ## Always exclude the precompiled header and cpp - if ($file =~ /$ext$/ && (!defined $pchh || $file ne $pchh) && - (!defined $pchc || $file ne $pchc)) { - my($exclude) = 0; - if (defined $$ec{$tag}) { - my($excludes) = $$ec{$tag}; - foreach my $exc (@$excludes) { - if ($file =~ /$exc$/) { - $exclude = 1; - last; - } - } - } - elsif ($tag eq 'resource_files') { - ## Save these files for later. There may - ## be more than one and we want to try and - ## find the one that corresponds to this project - $exclude = 1; - push(@saved, $file); - } - - if (!$exclude) { - if (!$self->already_added($array, $file)) { - push(@$array, $file); - } - } - last; - } - } - } - - ## Now deal with the saved files - if (defined $saved[0]) { - my($pjname) = $self->escape_regex_special( - $self->get_assignment('project_name')); - foreach my $save (@saved) { - my($file) = $self->escape_regex_special($save); - if ($pjname =~ /$file/ || $file =~ /$pjname/) { - if (!$self->already_added($array, $file)) { - push(@$array, $file); - } - } - } - } -} - - -sub generate_default_components { - my($self) = shift; - my($files) = shift; - my($passed) = shift; - my($vc) = $self->{'valid_components'}; - my(@tags) = (defined $passed ? $passed : keys %$vc); - my($pchh) = $self->get_assignment('pch_header'); - my($pchc) = $self->get_assignment('pch_source'); - - foreach my $tag (@tags) { - my($exts) = $$vc{$tag}; - if (defined $$exts[0]) { - if (defined $self->{$tag}) { - ## If the tag is defined, then process directories - my($names) = $self->{$tag}; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $comp (keys %$comps) { - my($array) = $$comps{$comp}; - if (defined $passed) { - $self->sift_files($files, $exts, $pchh, $pchc, $tag, $array); - } - else { - my(@built) = (); - foreach my $file (@$array) { - if (-d $file) { - my(@gen) = $self->generate_default_file_list($file); - $self->sift_files(\@gen, $exts, $pchh, $pchc, $tag, \@built); - } - else { - if (!$self->already_added(\@built, $file)) { - push(@built, $file); - } - } - } - $$comps{$comp} = \@built; - } - } - } - } - else { - ## Generate default values for undefined tags - my($names) = {}; - $self->{$tag} = $names; - my($comps) = {}; - $$names{'default'} = $comps; - $$comps{'000_FILES'} = []; - my($array) = $$comps{'000_FILES'}; - - if (!$self->is_special_tag($tag)) { - $self->sift_files($files, $exts, $pchh, $pchc, $tag, $array); - if ($tag eq 'idl_files' && defined $$array[0]) { - $self->{'idl_defaulted'} = 1; - } - elsif ($tag eq 'source_files') { - ## If we are auto-generating the source_files, then - ## we need to make sure that any idl generated source - ## files that are added are put at the front of the list. - my(@front) = (); - my(@copy) = @$array; - my(@exts) = $self->generated_source_extensions($tag); - - $self->{'source_defaulted'} = 1; - @$array = (); - foreach my $file (@copy) { - my($found) = 0; - foreach my $ext (@exts) { - if ($file =~ /$ext$/) { - ## No need to check for previously added files - ## here since there are none. - push(@front, $file); - $found = 1; - last; - } - } - if (!$found) { - ## No need to check for previously added files - ## here since there are none. - push(@$array, $file); - } - } - - if (defined $front[0]) { - unshift(@$array, @front); - } - } - } - } - } - } -} - - -sub remove_duplicated_files { - my($self) = shift; - my($dest) = shift; - my($source) = shift; - my($names) = $self->{$dest}; - my(@slist) = $self->get_component_list($source); - - ## Find out which source files are listed - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $key (keys %$comps) { - my($array) = $$comps{$key}; - my($count) = scalar(@$array); - for(my $i = 0; $i < $count; ++$i) { - foreach my $sfile (@slist) { - ## Is the source file is in the component array? - if ($$array[$i] eq $sfile) { - ## Remove the element and fix the index and count - splice(@$array, $i, 1); - --$count; - --$i; - last; - } - } - } - } - } -} - - -sub generated_source_extensions { - my($self) = shift; - my($tag) = shift; - my($vc) = $self->{'valid_components'}; - my($gc) = $$vc{$tag}; - my(@gen) = (); - - foreach my $e (@$gc) { - foreach my $ending (@{$self->{'skeleton_endings'}}) { - push(@gen, "$ending$e"); - } - } - return @gen; -} - - -sub generated_source_listed { - my($self) = shift; - my($tag) = shift; - my($idl) = shift; - my($names) = $self->{$tag}; - my(@gen) = $self->generated_source_extensions($tag); - my(@found) = (); - - ## Find out which generated source files are listed - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $key (keys %$comps) { - my($array) = $$comps{$key}; - foreach my $val (@$array) { - foreach my $ext (@gen) { - foreach my $i (@$idl) { - my($ifile) = $self->escape_regex_special($i); - if ($val =~ /$ifile$ext$/) { - push(@found, $val); - } - } - } - } - } - } - return (defined $found[0]); -} - - -sub generate_default_idl_generated { - my($self) = shift; - my($tags) = shift; - - if ($self->{'idl_defaulted'}) { - ## After all source and headers have been defaulted, see if we - ## need to add the idl generated .h, .i and .cpp files - if (defined $self->{'idl_files'}) { - ## Build up the list of idl files - my(@idl) = (); - my($names) = $self->{'idl_files'}; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $key (keys %$comps) { - my($array) = $$comps{$key}; - foreach my $val (@$array) { - my($f) = $val; - $f =~ s/\.idl$//; - push(@idl, $f); - } - } - } - - foreach my $type (@$tags) { - if (!$self->generated_source_listed($type, \@idl)) { - $self->add_idl_generated($type, \@idl); - } - } - } - } -} - - -sub add_source_corresponding_component_files { - my($self) = shift; - my($tag) = shift; - my(@all) = (); - my($vc) = $self->{'valid_components'}; - - foreach my $filetag ('source_files', 'template_files') { - my($names) = $self->{$filetag}; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $comp (keys %$comps) { - push(@all, @{$$comps{$comp}}); - } - } - } - - ## We need to cross-check the idl files. But we need to remove - ## the idl extension first. - my(@idl) = $self->get_component_list('idl_files'); - for(my $i = 0; $i <= $#idl; $i++) { - $idl[$i] =~ s/\.idl$//; - } - - ## for each cpp file, we add a corresponding header or inline file - ## if it exists and is not already in the list of headers - my($names) = $self->{$tag}; - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $comp (keys %$comps) { - my($array) = $$comps{$comp}; - foreach my $cpp (@all) { - my($found) = 0; - my($c) = $cpp; - $c =~ s/\.[^\.]+$//; - foreach my $file (@$array) { - my($added) = $c; - if ($file =~ /(\.[^\.]+)$/) { - $added .= $1; - } - - if ($added eq $file) { - $found = 1; - last; - } - } - - if (!$found) { - my($added) = 0; - foreach my $e (@{$$vc{$tag}}) { - my($ext) = $e; - $ext =~ s/\\//g; - - ## If the file is readable - my($file) = "$c$ext"; - if (-r $file) { - if (!$self->already_added($array, $file)) { - push(@$array, $file); - } - $added = 1; - last; - } - } - if (!$added) { - ## If we did not add the file in the above loop, - ## we must check to see if the file *would be* generated - ## from idl. If so, we will add the file with the default - ## (i.e. first) file extension. - foreach my $idlfile (@idl) { - my($idl) = $self->escape_regex_special($idlfile); - if ($c =~ /^$idl/) { - foreach my $ending (@{$self->{'skeleton_endings'}}) { - if ($c =~ /^$idl$ending$/) { - my($ext) = $$vc{$tag}->[0]; - $ext =~ s/\\//g; - my($file) = "$c$ext"; - if (!$self->already_added($array, $file)) { - push(@$array, $file); - } - $added = 1; - last; - } - } - } - last; - } - } - } - } - } - } -} - - -sub generate_defaults { - my($self) = shift; - - ## Generate default project name - if (!defined $self->get_assignment('project_name')) { - my($current) = $self->get_current_input(); - if ($current eq '') { - $self->process_assignment('project_name', $self->base_directory()); - } - else { - $current =~ s/\.[^\.]+$//; - $self->process_assignment('project_name', $current); - } - } - - ## Generate the default pch file names (if needed) - my(@files) = $self->generate_default_file_list(); - $self->generate_default_pch_filenames(\@files); - - ## If the pch file names are empty strings then we need to fix that - $self->fix_pch_filenames(); - - ## Generate default components, but @specialComponents - ## are skipped in the initial default components generation - $self->generate_default_components(\@files); - - ## Remove source files that are also listed in the template files - ## If we do not do this, then generated projects can be invalid. - $self->remove_duplicated_files('source_files', 'template_files'); - - ## Generate the default idl generated list of source files - ## only if we defaulted the idl file list - $self->generate_default_idl_generated(['source_files']); - - ## Add @specialComponents files based on the - ## source_components (i.e. .h and .i or .inl based on .cpp) - foreach my $tag (@specialComponents) { - $self->add_source_corresponding_component_files($tag); - } - - ## Now, if the @specialComponents are still empty - ## then take any file that matches the components extension - foreach my $tag (@specialComponents) { - if (!$self->{'special_supplied'}->{$tag}) { - my($names) = $self->{$tag}; - if (defined $names) { - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $comp (keys %$comps) { - my($array) = $$comps{$comp}; - if (!defined $$array[0] || $self->{'source_defaulted'}) { - $self->generate_default_components(\@files, $tag); - } - } - } - } - } - } - - ## Generate default target names after all source files are added - $self->generate_default_target_names(); -} - - -sub project_name { - my($self) = shift; - return $self->get_assignment('project_name'); -} - - -sub lib_target { - my($self) = shift; - return (defined $self->get_assignment('sharedname') || - defined $self->get_assignment('staticname')); -} - - -sub exe_target { - my($self) = shift; - return (defined $self->get_assignment('exename')); -} - - -sub get_component_list { - my($self) = shift; - my($tag) = shift; - my($names) = $self->{$tag}; - my(@list) = (); - - foreach my $name (keys %$names) { - my($comps) = $$names{$name}; - foreach my $key (sort keys %$comps) { - my($array) = $$comps{$key}; - push(@list, @$array); - } - } - - if ($self->convert_slashes()) { - for(my $i = 0; $i <= $#list; $i++) { - $list[$i] = $self->slash_to_backslash($list[$i]); - } - } - - if ($self->sort_files()) { - @list = sort { $self->file_sorter($a, $b) } @list; - } - - return @list; -} - - -sub need_to_write_project { - my($self) = shift; - foreach my $key (keys %{$self->{'valid_components'}}) { - my($names) = $self->{$key}; - foreach my $name (keys %$names) { - foreach my $key (sort keys %{$names->{$name}}) { - if (defined $names->{$name}->{$key}->[0]) { - return 1; - } - } - } - } - - return 0; -} - - -sub write_output_file { - my($self) = shift; - my($name) = shift; - my($status) = 0; - my($error) = ''; - my($tover) = $self->get_template_override(); - my($template) = (defined $tover ? $tover : $self->get_template()) . - ".$TemplateExtension"; - my($tfile) = $self->search_include_path($template); - - if (defined $tfile) { - ## Read in the template values for the - ## specific target and project type - ($status, $error) = $self->read_template_input(); - - if ($status) { - my($tp) = new TemplateParser($self); - - ## Set the project_file assignment for the template parser - $self->process_assignment('project_file', $name); - - ($status, $error) = $tp->parse_file($tfile); - - if ($status) { - if ($self->get_toplevel()) { - my($fh) = new FileHandle(); - my($dir) = dirname($name); - - if ($dir ne '.') { - mkpath($dir, 0, 0777); - } - - if (open($fh, ">$name")) { - my($lines) = $tp->get_lines(); - foreach my $line (@$lines) { - print $fh $line; - } - close($fh); - - $self->add_file_written($name); - } - else { - $error = "ERROR: Unable to open $name for output."; - $status = 0; - } - } - } - } - } - else { - $error = "ERROR: Unable to locate the template file: $template."; - $status = 0; - } - - return $status, $error; -} - - -sub write_project { - my($self) = shift; - my($status) = 1; - my($error) = ''; - my($name) = $self->transform_file_name($self->project_file_name()); - my($prjname) = $self->get_assignment('project_name'); - my($progress) = $self->get_progress_callback(); - - if (defined $progress) { - &$progress(); - } - - if ($self->need_to_write_project()) { - ## Writing the non-static file so set it to 0 - if ($self->get_dynamic()) { - $self->{'writing_type'} = 0; - $self->process_assignment('project_name', - $prjname . $self->get_type_append()); - ($status, $error) = $self->write_output_file($name); - } - - if ($status && $self->get_static() && $self->separate_static_project()) { - ## Set the project name back to what it originally was - $self->process_assignment('project_name', $prjname); - $name = $self->transform_file_name($self->static_project_file_name()); - - ## Writing the static file so set it to 1 - $self->{'writing_type'} = 1; - $self->process_assignment('project_name', - $prjname . $self->get_type_append()); - ($status, $error) = $self->write_output_file($name); - } - - if (!$status) { - print STDERR "$error\n"; - } - } - - return $status; -} - - -sub get_project_info { - my($self) = shift; - return $self->{'project_info'}; -} - - -sub get_writing_type { - my($self) = shift; - return $self->{'writing_type'}; -} - - -sub set_component_extensions { - my($self) = shift; - my($vc) = $self->{'valid_components'}; - my($ec) = $self->{'exclude_components'}; - - foreach my $key (keys %$vc) { - my($ov) = $self->override_valid_component_extensions($key); - if (defined $ov) { - $$vc{$key} = $ov; - } - } - - foreach my $key (keys %$ec) { - my($ov) = $self->override_exclude_component_extensions($key); - if (defined $ov) { - $$ec{$key} = $ov; - } - } -} - - -sub reset_values { - my($self) = shift; - $self->{'project_info'} = []; -} - - -sub get_template_input { - my($self) = shift; - - if ($self->lib_target()) { - if ($self->{'writing_type'} == 1) { - return $self->{'lib_template_input'}; - } - else { - return $self->{'dll_template_input'}; - } - } - - if ($self->{'writing_type'} == 1) { - return $self->{'lexe_template_input'}; - } - else { - return $self->{'dexe_template_input'}; - } -} - - -sub update_project_info { - my($self) = shift; - my($tparser) = shift; - my($append) = shift; - my($names) = shift; - my($sep) = shift; - my($pi) = $self->get_project_info(); - my($value) = ''; - my($arr) = ($append && defined $$pi[0] ? pop(@$pi) : []); - - ## Set up the hash table when we are starting a new project_info - if ($append == 0) { - $self->{'project_info_hash_table'} = {}; - } - - ## Append the values of all names into one string - my(@narr) = @$names; - for(my $i = 0; $i <= $#narr; $i++) { - my($key) = $narr[$i]; - $value .= $self->translate_value($key, - $tparser->get_value_with_default($key)) . - (defined $sep && $i != $#narr ? $sep : ''); - } - - ## If we haven't seen this value yet, put it on the array - if (!defined $self->{'project_info_hash_table'}->{"@narr $value"}) { - $self->{'project_info_hash_table'}->{"@narr $value"} = 1; - $self->save_project_value("@narr", $value); - push(@$arr, $value); - } - - ## Always push the array back onto the project_info - push(@$pi, $arr); - - return $value; -} - - -sub get_verbatim { - my($self) = shift; - my($marker) = shift; - my($str) = undef; - my($thash) = $self->{'verbatim'}->{$self->{'pctype'}}; - - if (defined $thash) { - if (defined $thash->{$marker}) { - my($crlf) = $self->crlf(); - foreach my $line (@{$thash->{$marker}}) { - if (!defined $str) { - $str = ''; - } - $str .= $self->process_special($line) . $crlf; - } - if (defined $str) { - $str .= $crlf; - } - } - } - return $str; -} - - -sub generate_recursive_input_list { - my($self) = shift; - my($dir) = shift; - return $self->extension_recursive_input_list($dir, - $ProjectCreatorExtension); -} - -# ************************************************************ -# Virtual Methods To Be Overridden -# ************************************************************ - -sub specific_lookup { - #my($self) = shift; - #my($key) = shift; - return undef; -} - - -sub save_project_value { - #my($self) = shift; - #my($name) = shift; - #my($value) = shift; -} - - -sub get_type_append { - #my($self) = shift; - return ''; -} - - -sub translate_value { - my($self) = shift; - my($key) = shift; - my($val) = shift; - - if ($key eq 'depends' && $val ne '') { - my($arr) = $self->create_array($val); - $val = ''; - foreach my $entry (@$arr) { - $val .= '"' . $self->project_file_name($entry) . '" '; - } - $val =~ s/\s+$//; - } - return $val; -} - - -sub fill_value { - #my($self) = shift; - #my($name) = shift; - return undef; -} - - -sub separate_static_project { - #my($self) = shift; - return 0; -} - - -sub project_file_name { - #my($self) = shift; - return undef; -} - - -sub static_project_file_name { - #my($self) = shift; - return undef; -} - - -sub override_valid_component_extensions { - #my($self) = shift; - #my($comp) = shift; - return undef; -} - - -sub override_exclude_component_extensions { - #my($self) = shift; - #my($comp) = shift; - return undef; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return undef; -} - - -sub get_lib_exe_template_input_file { - #my($self) = shift; - return undef; -} - - -sub get_lib_template_input_file { - #my($self) = shift; - return undef; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return undef; -} - - -sub get_template { - #my($self) = shift; - return undef; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/StringProcessor.pm b/bin/MakeProjectCreator/modules/StringProcessor.pm deleted file mode 100644 index 9bb05eb5665..00000000000 --- a/bin/MakeProjectCreator/modules/StringProcessor.pm +++ /dev/null @@ -1,106 +0,0 @@ -package StringProcessor; - -# ************************************************************ -# Description : Perform various algorithms on strings -# Author : Chad Elliott -# Create Date : 3/07/2003 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($self) = bless { - }, $class; - return $self; -} - - -sub extractType { - my($self) = shift; - my($name) = shift; - my($type) = $name; - - if ($name =~ /(.*)(Project|Workspace)Creator/) { - $type = $1; - } - - return lc($type); -} - - -sub process_special { - my($self) = shift; - my($line) = shift; - my($length) = length($line); - - for(my $i = 0; $i < $length; $i++) { - my($ch) = substr($line, $i, 1); - if ($ch eq "\\" && $i + 1 < $length) { - substr($line, $i, 1) = ''; - $length--; - } - elsif ($ch eq '"') { - substr($line, $i, 1) = ''; - $length--; - $i--; - } - } - return $line; -} - - -sub create_array { - my($self) = shift; - my($line) = shift; - my(@array) = (); - my($length) = length($line); - my($prev) = 0; - my($double) = 0; - my($single) = 0; - - for(my $i = 0; $i <= $length; $i++) { - my($ch) = substr($line, $i, 1); - if (!$double && !$single && ($ch eq '' || $ch =~ /\s/)) { - my($val) = substr($line, $prev, $i - $prev); - $val =~ s/^\s+//; - $val =~ s/\s+$//; - if ($val =~ /^\"(.*)\"$/) { - $val = $1; - } - elsif ($val =~ /^\'(.*)\'$/) { - $val = $1; - } - push(@array, $val); - for(; $i < $length; $i++) { - if (substr($line, $i, 1) !~ /\s/) { - $i--; - last; - } - } - $prev = $i + 1; - } - elsif ($double && $ch eq "\\" && $i + 1 < $length) { - substr($line, $i, 1) = ''; - $length--; - } - elsif ($ch eq '"') { - $double ^= 1; - } - elsif ($ch eq "'") { - $single ^= 1; - } - } - return \@array; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/TemplateInputReader.pm b/bin/MakeProjectCreator/modules/TemplateInputReader.pm deleted file mode 100644 index 40f663ca253..00000000000 --- a/bin/MakeProjectCreator/modules/TemplateInputReader.pm +++ /dev/null @@ -1,143 +0,0 @@ -package TemplateInputReader; - -# ************************************************************ -# Description : Reads the template input and stores the values -# Author : Chad Elliott -# Create Date : 5/16/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use Parser; - -use vars qw(@ISA); -@ISA = qw(Parser); - -# ************************************************************ -# Data Section -# ************************************************************ - -my($mpt) = 'mpt'; - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($inc) = shift; - my($self) = Parser::new($class, $inc); - - $self->{'values'} = {}; - $self->{'cindex'} = 0; - $self->{'current'} = [ $self->{'values'} ]; - - return $self; -} - - -sub parse_line { - my($self) = shift; - my($ih) = shift; - my($line) = shift; - my($status) = 1; - my($errorString) = ''; - my($current) = $self->{'current'}; - - if ($line eq '') { - } - elsif ($line =~ /^([\w\s]+)\s*{$/) { - ## Entering a new scope - my($name) = $1; - $name =~ s/\s+$//; - if (!defined $$current[$self->{'cindex'}]->{$name}) { - $$current[$self->{'cindex'}]->{$name} = {}; - } - push(@$current, $$current[$self->{'cindex'}]->{$name}); - $self->{'cindex'}++; - } - elsif ($line =~ /^}$/) { - if ($self->{'cindex'} > 0) { - pop(@$current); - $self->{'cindex'}--; - } - else { - $status = 0; - $errorString = 'ERROR: Unmatched curly brace'; - } - } - elsif ($line =~ /^(\w+)\s*(\+=|=)\s*(.*)?/) { - my($name) = $1; - my($op) = $2; - my($value) = $3; - - if (defined $value) { - $value = $self->create_array($value); - } - else { - $value = ''; - } - - if ($op eq '+=') { - my($ref) = $$current[$self->{'cindex'}]->{$name}; - if (defined $ref) { - if (UNIVERSAL::isa($ref, 'ARRAY')) { - if (UNIVERSAL::isa($value, 'ARRAY')) { - push(@$ref, @$value); - } - else { - push(@$ref, $value); - } - } - else { - if (UNIVERSAL::isa($value, 'ARRAY')) { - $$current[$self->{'cindex'}]->{$name} .= " @$value"; - } - else { - $$current[$self->{'cindex'}]->{$name} .= $value; - } - } - } - else { - $$current[$self->{'cindex'}]->{$name} = $value; - } - } - else { - if (!$$current[$self->{'cindex'}]->{$name}) { - $$current[$self->{'cindex'}]->{$name} = $value; - } - else { - $status = 0; - $errorString = "ERROR: Redifinition of '$name'"; - } - } - } - elsif ($line =~ /^conditional_include\s+"([\w\s\-\+\/\\\.]+)"$/) { - my($file) = $self->search_include_path("$1.$mpt"); - if (defined $file) { - my($ol) = $self->{'line_number'}; - ($status, $errorString) = $self->read_file($file); - $self->{'line_number'} = $ol; - } - } - else { - $status = 0; - $errorString = "ERROR: Unrecognized line: $line"; - } - - return $status, $errorString; -} - - -sub get_value { - my($self) = shift; - my($tag) = shift; - return $self->{'values'}->{$tag}; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/TemplateParser.pm b/bin/MakeProjectCreator/modules/TemplateParser.pm deleted file mode 100644 index 386299532c0..00000000000 --- a/bin/MakeProjectCreator/modules/TemplateParser.pm +++ /dev/null @@ -1,1008 +0,0 @@ -package TemplateParser; - -# ************************************************************ -# Description : Parses the template and fills in missing values -# Author : Chad Elliott -# Create Date : 5/17/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use Parser; - -use vars qw(@ISA); -@ISA = qw(Parser); - -# ************************************************************ -# Data Section -# ************************************************************ - -my(%keywords) = ('if' => 1, - 'else' => 1, - 'endif' => 1, - 'noextension' => 1, - 'dirname' => 1, - 'basename' => 1, - 'basenoextension' => 1, - 'foreach' => 1, - 'forfirst' => 1, - 'fornotfirst' => 1, - 'fornotlast' => 1, - 'forlast' => 1, - 'endfor' => 1, - 'comment' => 1, - 'flag_overrides' => 1, - 'marker' => 1, - ); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($prjc) = shift; - my($self) = Parser::new($class); - - $self->{'prjc'} = $prjc; - $self->{'ti'} = $prjc->get_template_input(); - $self->{'crlf'} = undef; - $self->{'values'} = {}; - $self->{'defaults'} = {}; - $self->{'lines'} = []; - $self->{'built'} = ''; - $self->{'sstack'} = []; - $self->{'lstack'} = []; - $self->{'if_skip'} = 0; - - $self->{'foreach'} = {}; - $self->{'foreach'}->{'count'} = -1; - $self->{'foreach'}->{'nested'} = 0; - $self->{'foreach'}->{'name'} = []; - $self->{'foreach'}->{'names'} = []; - $self->{'foreach'}->{'text'} = []; - $self->{'foreach'}->{'scope'} = []; - $self->{'foreach'}->{'temp_scope'} = []; - $self->{'foreach'}->{'processing'} = 0; - - return $self; -} - - -sub basename { - my($self) = shift; - my($file) = shift; - for(my $i = length($file) - 1; $i >= 0; --$i) { - my($ch) = substr($file, $i, 1); - if ($ch eq '/' || $ch eq '\\') { - ## The template file may use this value (<%basename_found%>) - ## to determine whether a basename removed the directory or not - $self->{'values'}->{'basename_found'} = 1; - return substr($file, $i + 1); - } - } - delete $self->{'values'}->{'basename_found'}; - return $file; -} - - -sub dirname { - my($self) = shift; - my($file) = shift; - for(my $i = length($file) - 1; $i != 0; --$i) { - my($ch) = substr($file, $i, 1); - if ($ch eq '/' || $ch eq '\\') { - ## The template file may use this value (<%dirname_found%>) - ## to determine whether a dirname removed the basename or not - $self->{'values'}->{'dirname_found'} = 1; - return substr($file, 0, $i); - } - } - delete $self->{'values'}->{'dirname_found'}; - return '.'; -} - - -sub strip_line { - my($self) = shift; - my($line) = shift; - - ## Override strip_line() from Parser. - ## We need to preserve leading space and - ## there is no comment string in templates. - ++$self->{'line_number'}; - $line =~ s/\s+$//; - - return $line; -} - - -## Append the current value to the line that is being -## built. This line may be a foreach line or a general -## line without a foreach. -sub append_current { - my($self) = shift; - my($value) = shift; - my($index) = $self->{'foreach'}->{'count'}; - - if ($index >= 0) { - $self->{'foreach'}->{'text'}->[$index] .= $value; - } - else { - $self->{'built'} .= $value; - } -} - - -sub adjust_value { - my($self) = shift; - my($name) = shift; - my($value) = shift; - - ## Perform any additions, subtractions - ## or overrides for the template values. - my($addtemp) = $self->{'prjc'}->get_addtemp(); - foreach my $at (keys %$addtemp) { - if ($at eq $name) { - my($val) = $$addtemp{$at}; - if ($$val[0] > 0) { - if (UNIVERSAL::isa($value, 'ARRAY')) { - $value = [ $$val[1], @$value ]; - } - else { - $value = "$$val[1] $value"; - } - } - elsif ($$val[0] < 0) { - my($parts) = undef; - if (UNIVERSAL::isa($value, 'ARRAY')) { - my(@copy) = @$value; - $parts = \@copy; - } - else { - $parts = $self->create_array($value); - } - - $value = ''; - foreach my $part (@$parts) { - if ($part ne $$val[1] && $part ne '') { - $value .= "$part "; - } - } - $value =~ s/^\s+//; - $value =~ s/\s+$//; - } - else { - $value = $$val[1]; - } - } - } - - return $value; -} - - -sub set_current_values { - my($self) = shift; - my($name) = shift; - my($set) = 0; - - ## If any value within a foreach matches the name - ## of a hash table within the template input we will - ## set the values of that hash table in the current scope - if (defined $self->{'ti'}) { - my($counter) = $self->{'foreach'}->{'count'}; - if ($counter >= 0) { - my($value) = $self->{'ti'}->get_value($name); - if (defined $value && UNIVERSAL::isa($value, 'HASH')) { - my(%copy) = (); - foreach my $key (keys %$value) { - $copy{$key} = $self->adjust_value($key, $$value{$key}); - } - $self->{'foreach'}->{'temp_scope'}->[$counter] = \%copy; - $set = 1; - } - } - } - return $set; -} - - -sub relative { - my($self) = shift; - my($value) = shift; - my($rel) = $self->{'prjc'}->get_relative(); - my(@keys) = keys %$rel; - - if (defined $value && defined $keys[0] && $value =~ /\$/) { - if (UNIVERSAL::isa($value, 'ARRAY')) { - my(@built) = (); - foreach my $val (@$value) { - push(@built, $self->relative($val)); - } - $value = \@built; - } - else { - my($cwd) = $self->getcwd(); - my($start) = 0; - my($fixed) = 0; - - if ($cwd =~ /[a-z]:[\/\\]/) { - substr($cwd, 0, 1) = uc(substr($cwd, 0, 1)); - } - - while(substr($value, $start) =~ /(\$\(([^)]+)\))/) { - my($whole) = $1; - my($name) = $2; - my($val) = $$rel{$name}; - - if (defined $val) { - if ($^O eq 'cygwin' && !$fixed && - $cwd !~ /[A-Za-z]:/ && $val =~ /[A-Za-z]:/) { - my($cyg) = `cygpath -w $cwd`; - if (defined $cyg) { - $cyg =~ s/\\/\//g; - chop($cwd = $cyg); - $fixed = 1; - } - } - - ## Fix up the value for Windows (capitalize the drive and - ## switch the \\'s to / - $val =~ s/\\/\//g; - if ($val =~ /[a-z]:\//) { - substr($val, 0, 1) = uc(substr($val, 0, 1)); - } - - if (index($cwd, $val) == 0) { - my($count) = 0; - my($current) = $cwd; - substr($current, 0, length($val)) = ''; - while($current =~ /^\\/) { - $current =~ s/^\///; - } - my($length) = length($current); - for(my $i = 0; $i < $length; ++$i) { - if (substr($current, $i, 1) eq '/') { - ++$count; - } - } - $val = '../' x $count; - $val =~ s/\/$//; - if ($self->{'prjc'}->convert_slashes()) { - $val = $self->slash_to_backslash($val); - } - substr($value, $start) =~ s/\$\([^)]+\)/$val/; - $whole = $val; - } - } - $start += length($whole); - } - } - } - - return $value; -} - - -sub get_value { - my($self) = shift; - my($name) = shift; - my($value) = undef; - my($counter) = $self->{'foreach'}->{'count'}; - - ## First, check the temporary scope (set inside a foreach) - if ($counter >= 0) { - while(!defined $value && $counter >= 0) { - $value = $self->{'foreach'}->{'temp_scope'}->[$counter]->{$name}; - --$counter; - } - $counter = $self->{'foreach'}->{'count'}; - } - - if (!defined $value) { - ## Next, check for a template value - my($ti) = $self->{'ti'}; - if (defined $ti) { - $value = $ti->get_value($name); - if (defined $value) { - $value = $self->adjust_value($name, $value); - } - } - - if (!defined $value) { - ## Next, check the inner to outer foreach - ## scopes for overriding values - while(!defined $value && $counter >= 0) { - $value = $self->{'foreach'}->{'scope'}->[$counter]->{$name}; - --$counter; - } - - ## Then get the value from the project creator - if (!defined $value) { - $value = $self->{'prjc'}->get_assignment($name); - - ## Then get it from our known values - if (!defined $value) { - $value = $self->{'values'}->{$name}; - if (!defined $value) { - ## Call back onto the project creator to allow - ## it to fill in the value before defaulting to undef. - $value = $self->{'prjc'}->fill_value($name); - } - } - } - } - } - - return $self->relative($value); -} - - -sub get_value_with_default { - my($self) = shift; - my($name) = shift; - my($value) = $self->get_value($name); - - if (defined $value) { - if (UNIVERSAL::isa($value, 'ARRAY')) { - $value = "@$value"; - } - } - else { - $value = $self->{'defaults'}->{$name}; - if (!defined $value) { -# print "DEBUG: WARNING: $name defaulting to empty string\n"; - $value = ''; - } - else { -# print "DEBUG: WARNING: $name using default value of $value\n"; - $value = $self->adjust_value($name, $value); - } - $value = $self->relative($value); - } - - return $value; -} - - -sub process_foreach { - my($self) = shift; - my($index) = $self->{'foreach'}->{'count'}; - my($text) = $self->{'foreach'}->{'text'}->[$index]; - my($status) = 1; - my($errorString) = ''; - my(@values) = (); - my($names) = $self->create_array($self->{'foreach'}->{'names'}->[$index]); - my($name) = $self->{'foreach'}->{'name'}->[$index]; - - foreach my $n (@$names) { - my($vals) = $self->get_value($n); - if (defined $vals && $vals ne '') { - if (!UNIVERSAL::isa($vals, 'ARRAY')) { - $vals = $self->create_array($vals); - } - push(@values, @$vals); - } - if (!defined $name) { - $name = $n; - $name =~ s/s$//; - } - } - - ## Reset the text (it will be regenerated by calling parse_line - $self->{'foreach'}->{'text'}->[$index] = ''; - - if (defined $values[0]) { - my($scope) = $self->{'foreach'}->{'scope'}->[$index]; - - $$scope{'forlast'} = 0; - $$scope{'fornotlast'} = 1; - $$scope{'forfirst'} = 1; - $$scope{'fornotfirst'} = 0; - - ## If the foreach values are mixed (HASH and SCALAR), then - ## remove the SCALAR values. - my($pset) = undef; - for(my $i = 0; $i <= $#values; ++$i) { - my($set) = $self->set_current_values($values[$i]); - if (!defined $pset) { - $pset |= $set; - } - else { - if ($pset && !$set) { - splice(@values, $i, 1); - $i = 0; - $pset = undef; - } - } - } - - for(my $i = 0; $i <= $#values; ++$i) { - my($value) = $values[$i]; - - ## Set the corresponding values in the temporary scope - $self->set_current_values($value); - - ## Set the special values that only exist - ## within a foreach - if ($i != 0) { - $$scope{'forfirst'} = 0; - $$scope{'fornotfirst'} = 1; - } - if ($i == $#values) { - $$scope{'forlast'} = 1; - $$scope{'fornotlast'} = 0; - } - ## We don't use adjust_value here because these names - ## are generated from a foreach and should not be adjusted. - $$scope{$name} = $value; - - ## A tiny hack for VC7 - if ($name eq 'configuration') { - $self->{'prjc'}->update_project_info($self, 1, - ['configuration', 'platform'], - '|'); - } - - ## Now parse the line of text, each time - ## with different values - ++$self->{'foreach'}->{'processing'}; - ($status, $errorString) = $self->parse_line(undef, $text); - --$self->{'foreach'}->{'processing'}; - if (!$status) { - last; - } - } - } - - return $status, $errorString; -} - - -sub handle_end { - my($self) = shift; - my($name) = shift; - my($status) = 1; - my($errorString) = ''; - my($end) = pop(@{$self->{'sstack'}}); - pop(@{$self->{'lstack'}}); - - if (!defined $end) { - $status = 0; - $errorString = "ERROR: Unmatched $name\n"; - } - elsif ($end eq 'endif') { - $self->{'if_skip'} = 0; - } - elsif ($end eq 'endfor') { - my($index) = $self->{'foreach'}->{'count'}; - ($status, $errorString) = $self->process_foreach(); - if ($status) { - --$self->{'foreach'}->{'count'}; - $self->append_current($self->{'foreach'}->{'text'}->[$index]); - } - } - - return $status, $errorString; -} - - -sub get_flag_overrides { - my($self) = shift; - my($name) = shift; - my($type) = shift; - my($value) = undef; - my($file) = $self->get_value($name); - my($prjc) = $self->{'prjc'}; - my($fo) = $prjc->{'flag_overrides'}; - - foreach my $key (keys %$fo) { - if ($key =~ /^$name/) { - foreach my $of (keys %{$$fo{$key}}) { - my($cv) = $of; - if ($prjc->convert_slashes()) { - $cv = $prjc->slash_to_backslash($of); - } - if ($cv eq $file) { - foreach my $ma (keys %{$prjc->{'matching_assignments'}}) { - if ($ma eq $key) { - foreach my $aname (@{$prjc->{'matching_assignments'}->{$ma}}) { - if ($aname eq $type && - defined $$fo{$key}->{$of}->{$aname}) { - $value = $$fo{$key}->{$of}->{$aname}; - last; - } - } - last; - } - } - last; - } - } - last; - } - } - return $value; -} - - -sub handle_if { - my($self) = shift; - my($val) = shift; - my($name) = 'endif'; - - push(@{$self->{'lstack'}}, $self->line_number() . " $val"); - if (!$self->{'if_skip'}) { - my($true) = 1; - push(@{$self->{'sstack'}}, $name); - if ($val =~ /^!(.*)/) { - $val = $1; - $val =~ s/^\s+//; - $true = 0; - } - - if ($val =~ /flag_overrides\(([^\)]+),\s*([^\)]+)\)/) { - $val = $self->get_flag_overrides($1, $2); - } - else { - $val = $self->get_value($val) - } - - if (!defined $val) { - $self->{'if_skip'} = $true; - } - else { - $self->{'if_skip'} = !$true; - } - } - else { - push(@{$self->{'sstack'}}, "*$name"); - } -} - - -sub handle_else { - my($self) = shift; - my(@scopy) = @{$self->{'sstack'}}; - - ## This method does not take into account that - ## multiple else clauses could be supplied to a single if. - ## Someday, this may be fixed. - if (defined $scopy[$#scopy] && $scopy[$#scopy] eq 'endif') { - $self->{'if_skip'} ^= 1; - } -} - - -sub handle_foreach { - my($self) = shift; - my($val) = shift; - my($name) = 'endfor'; - - push(@{$self->{'lstack'}}, $self->line_number()); - if (!$self->{'if_skip'}) { - my($vname) = undef; - if ($val =~ /([^,]+),(.*)/) { - $vname = $1; - $val = $2; - $vname =~ s/^\s+//; - $vname =~ s/\s+$//; - $val =~ s/^\s+//; - $val =~ s/\s+$//; - } - - push(@{$self->{'sstack'}}, $name); - ++$self->{'foreach'}->{'count'}; - - my($index) = $self->{'foreach'}->{'count'}; - $self->{'foreach'}->{'name'}->[$index] = $vname; - $self->{'foreach'}->{'names'}->[$index] = $val; - $self->{'foreach'}->{'text'}->[$index] = ''; - $self->{'foreach'}->{'scope'}->[$index] = {}; - } - else { - push(@{$self->{'sstack'}}, "*$name"); - } -} - - -sub handle_special { - my($self) = shift; - my($name) = shift; - my($val) = shift; - - ## If $name (fornotlast, forfirst, etc.) is set to 1 - ## Then we append the $val onto the current string that's - ## being built. - if ($self->get_value($name)) { - $self->append_current($val); - } -} - - -sub handle_noextension { - my($self) = shift; - my($name) = shift; - - if (!$self->{'if_skip'}) { - my($val) = $self->get_value_with_default($name); - $val =~ s/\.[^\.]+$//; - $self->append_current($val); - } -} - - -sub handle_dirname { - my($self) = shift; - my($name) = shift; - - if (!$self->{'if_skip'}) { - my($val) = $self->dirname($self->get_value_with_default($name)); - $self->append_current($val); - } -} - - -sub handle_basename { - my($self) = shift; - my($name) = shift; - - if (!$self->{'if_skip'}) { - my($val) = $self->basename($self->get_value_with_default($name)); - $self->append_current($val); - } -} - - -sub handle_basenoextension { - my($self) = shift; - my($name) = shift; - - if (!$self->{'if_skip'}) { - my($val) = $self->basename($self->get_value_with_default($name)); - $val =~ s/\.[^\.]+$//; - $self->append_current($val); - } -} - - -sub handle_flag_overrides { - my($self) = shift; - my($name) = shift; - my($type) = ''; - - ($name, $type) = split(/,\s*/, $name); - - if (!$self->{'if_skip'}) { - my($value) = $self->get_flag_overrides($name, $type); - if (defined $value) { - $self->append_current($value); - } - } -} - - -sub handle_marker { - my($self) = shift; - my($name) = shift; - - if (!$self->{'if_skip'}) { - my($value) = $self->{'prjc'}->get_verbatim($name); - if (defined $value) { - $self->append_current($value); - } - } -} - - -## Given a line that starts with an identifier, we split -## then name from the possible value stored inside ()'s and -## we stop looking at the line when we find the %> ending -sub split_name_value { - my($self) = shift; - my($line) = shift; - my($length) = length($line); - my($name) = undef; - my($val) = undef; - - for(my $i = 0; $i < $length; ++$i) { - my($ch) = substr($line, $i, 1); - if (!defined $name && $ch eq '(') { - $name = substr($line, 0, $i); - $val = ''; - } - elsif (!defined $name && $ch eq '%') { - if (substr($line, $i + 1, 1) eq '>') { - $name = substr($line, 0, $i); - last; - } - } - elsif (defined $val && $ch ne ')') { - $val .= $ch; - } - elsif (defined $val && $ch eq ')') { - if (substr($line, $i + 1, 2) eq '%>') { - last; - } - else { - $val .= $ch; - } - } - } - - return $name, $val; -} - - -sub process_name { - my($self) = shift; - my($line) = shift; - my($length) = 0; - my($status) = 1; - my($errorString) = ''; - - if ($line eq '') { - } - elsif ($line =~ /^(\w+)(\(([^\)]+|\".*\"|flag_overrides\([^\)]+,\s*[^\)]+\))\))?%>/) { - my($name, $val) = $self->split_name_value($line); - - $length += length($name); - if (defined $val) { - $length += length($val) + 2; - } - - if (defined $keywords{$name}) { - if ($name eq 'endif' || $name eq 'endfor') { - ($status, $errorString) = $self->handle_end($name); - } - elsif ($name eq 'if') { - $self->handle_if($val); - } - elsif ($name eq 'else') { - $self->handle_else(); - } - elsif ($name eq 'foreach') { - $self->handle_foreach($val); - } - elsif ($name eq 'fornotlast' || $name eq 'forlast' || - $name eq 'fornotfirst' || $name eq 'forfirst') { - $self->handle_special($name, $self->process_special($val)); - } - elsif ($name eq 'comment') { - ## Ignore the contents of the comment - } - elsif ($name eq 'flag_overrides') { - $self->handle_flag_overrides($val); - } - elsif ($name eq 'marker') { - $self->handle_marker($val); - } - elsif ($name eq 'noextension') { - $self->handle_noextension($val); - } - elsif ($name eq 'dirname') { - $self->handle_dirname($val); - } - elsif ($name eq 'basename') { - $self->handle_basename($val); - } - elsif ($name eq 'basenoextension') { - $self->handle_basenoextension($val); - } - } - else { - if (!$self->{'if_skip'}) { - if (defined $val && !defined $self->{'defaults'}->{$name}) { - $self->{'defaults'}->{$name} = $self->process_special($val); - } - - $val = $self->get_value_with_default($name); - $self->append_current($val); - } - } - } - else { - my($error) = $line; - my($length) = length($line); - for(my $i = 0; $i < $length; ++$i) { - my($part) = substr($line, $i, 2); - if ($part eq '%>') { - $error = substr($line, 0, $i + 2); - last; - } - } - $status = 0; - $errorString = "ERROR: Unable to parse line starting at $error"; - } - - return $status, $errorString, $length; -} - - -sub collect_data { - my($self) = shift; - my($prjc) = $self->{'prjc'}; - - ## Save crlf so we don't have to keep going back to the prjc - $self->{'crlf'} = $prjc->crlf(); - - ## Collect the components into {'values'} somehow - foreach my $key (keys %{$prjc->{'valid_components'}}) { - my(@list) = $prjc->get_component_list($key); - if (defined $list[0]) { - $self->{'values'}->{$key} = "@list"; - } - } - - ## A tiny hack (mainly for VC6 projects) - ## for the workspace generator. It needs to know the - ## target names to match up with the project name. - $prjc->update_project_info($self, 0, ['project_name']); - - ## This is for all projects - $prjc->update_project_info($self, 1, ['depends']); - - ## VC7 Projects need to know the GUID. - ## We need to save this value in our known values - ## since each guid generated will be different. We need - ## this to correspond to the same guid used in the workspace. - my($guid) = $prjc->update_project_info($self, 1, ['guid']); - $self->{'values'}->{'guid'} = $guid; -} - - -sub is_only_keyword { - my($self) = shift; - my($line) = shift; - - ## Does the line contain only a keyword? - if ($line =~ /^<%(.*)%>$/) { - my($part) = $1; - if ($part !~ /%>/) { - $part =~ s/\(.*//; - return (defined $keywords{$part} ? 1 : 0); - } - } - return 0; -} - - -sub parse_line { - my($self) = shift; - my($ih) = shift; - my($line) = shift; - my($status) = 1; - my($errorString) = ''; - my($length) = length($line); - my($name) = 0; - my($crlf) = $self->{'crlf'}; - my($clen) = length($crlf); - my($startempty) = ($line eq '' ? 1 : 0); - my($append_name) = 0; - - ## If processing a foreach or the line only - ## contains a keyword, then we do - ## not need to add a newline to the end. - if ($self->{'foreach'}->{'processing'} == 0 && - !$self->is_only_keyword($line)) { - $line .= $crlf; - $length += $clen; - } - - if ($self->{'foreach'}->{'count'} < 0) { - $self->{'built'} = ''; - } - - for(my $i = 0; $i < $length; ++$i) { - my($part) = substr($line, $i, 2); - if ($part eq '<%') { - ++$i; - $name = 1; - } - elsif ($part eq '%>') { - ++$i; - $name = 0; - if ($append_name) { - $append_name = 0; - if (!$self->{'if_skip'}) { - $self->append_current($part); - } - } - } - elsif ($name) { - my($substr) = substr($line, $i); - my($efcheck) = ($substr =~ /^endfor\%\>/); - my($focheck) = ($substr =~ /^foreach\(/); - - if ($focheck && $self->{'foreach'}->{'count'} >= 0) { - ++$self->{'foreach'}->{'nested'}; - } - - if ($self->{'foreach'}->{'count'} < 0 || - $self->{'foreach'}->{'processing'} > $self->{'foreach'}->{'nested'} || - (($efcheck || $focheck) && - $self->{'foreach'}->{'nested'} == $self->{'foreach'}->{'processing'})) { - my($nlen) = 0; - ($status, - $errorString, - $nlen) = $self->process_name($substr); - - if ($status && $nlen == 0) { - $errorString = "ERROR: Could not parse this line at column $i"; - $status = 0; - } - if (!$status) { - last; - } - - $i += ($nlen - 1); - } - else { - $name = 0; - if (!$self->{'if_skip'}) { - $self->append_current('<%' . substr($line, $i, 1)); - $append_name = 1; - } - } - - if ($efcheck && $self->{'foreach'}->{'nested'} > 0) { - --$self->{'foreach'}->{'nested'}; - } - } - else { - if (!$self->{'if_skip'}) { - $self->append_current(substr($line, $i, 1)); - } - } - } - - if ($self->{'foreach'}->{'count'} < 0) { - ## If the line started out empty and we're not - ## skipping from the start or the built up line is not empty - if ($startempty || - ($self->{'built'} ne $crlf && $self->{'built'} ne '')) { - push(@{$self->{'lines'}}, $self->{'built'}); - } - } - - return $status, $errorString; -} - - -sub parse_file { - my($self) = shift; - my($input) = shift; - - $self->collect_data(); - my($status, $errorString) = $self->read_file($input); - - if ($status) { - my($sstack) = $self->{'sstack'}; - if (defined $$sstack[0]) { - my($lstack) = $self->{'lstack'}; - $status = 0; - $errorString = "ERROR: missing an $$sstack[0] starting at $$lstack[0]"; - } - } - - if (!$status) { - my($linenumber) = $self->line_number(); - $errorString = "$input: line $linenumber: $errorString\n"; - } - - return $status, $errorString; -} - - -sub get_lines { - my($self) = shift; - return $self->{'lines'}; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/VA4ProjectCreator.pm b/bin/MakeProjectCreator/modules/VA4ProjectCreator.pm deleted file mode 100644 index 942be40a726..00000000000 --- a/bin/MakeProjectCreator/modules/VA4ProjectCreator.pm +++ /dev/null @@ -1,129 +0,0 @@ -package VA4ProjectCreator; - -# ************************************************************ -# Description : A VA4 Project Creator -# Author : Chad Elliott -# Create Date : 7/8/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Data Section -# ************************************************************ - -my($sname) = '_Static'; - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub translate_value { - my($self) = shift; - my($key) = shift; - my($val) = shift; - - if ($key eq 'depends' && $val ne '') { - my($wt) = $self->get_writing_type(); - my($arr) = $self->create_array($val); - $val = ''; - foreach my $entry (@$arr) { - $val .= '"' . ($wt == 1 ? $self->static_project_file_name($entry) : - $self->project_file_name($entry)) . '" '; - } - $val =~ s/\s+$//; - } - return $val; -} - - -sub convert_slashes { - #my($self) = shift; - return 0; -} - - -sub file_sorter { - my($self) = shift; - my($left) = shift; - my($right) = shift; - return lc($left) cmp lc($right); -} - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub separate_static_project { - #my($self) = shift; - return 1; -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return "$name.icc"; -} - - -sub static_project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return "$name$sname.icc"; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'va4iccdllexe'; -} - - -sub get_lib_exe_template_input_file { - #my($self) = shift; - return 'va4icclibexe'; -} - - -sub get_lib_template_input_file { - #my($self) = shift; - return 'va4icclib'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'va4iccdll'; -} - - -sub get_template { - #my($self) = shift; - return 'va4icc'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm b/bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm deleted file mode 100644 index 53b649696be..00000000000 --- a/bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm +++ /dev/null @@ -1,76 +0,0 @@ -package VA4WorkspaceCreator; - -# ************************************************************ -# Description : A VA4 Workspace Creator -# Author : Chad Elliott -# Create Date : 5/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use VA4ProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub workspace_file_name { - my($self) = shift; - return $self->get_workspace_name() . '.icp'; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "// Visual Age C++ 4 workspace file$crlf$crlf"; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - - foreach my $project (@list) { - my($base) = $project; - $base =~ s/\.[^\.]+//; - my($ics) = "$base.ics"; - - print $fh "subproject $base icc \"$project\", ics \"$ics\"$crlf" . - "{$crlf" . - "}$crlf"; - } - - print $fh "build buildAll$crlf" . - "{$crlf"; - foreach my $project (@list) { - my($base) = $project; - $base =~ s/\.[^\.]+//; - print $fh " use $base$crlf"; - } - print $fh "}$crlf$crlf"; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/VC6ProjectCreator.pm b/bin/MakeProjectCreator/modules/VC6ProjectCreator.pm deleted file mode 100644 index f2d4fccdeab..00000000000 --- a/bin/MakeProjectCreator/modules/VC6ProjectCreator.pm +++ /dev/null @@ -1,229 +0,0 @@ -package VC6ProjectCreator; - -# ************************************************************ -# Description : A VC6 Project Creator -# Author : Chad Elliott -# Create Date : 3/14/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Data Section -# ************************************************************ - -my($dynamiclib) = 'DLL'; -my($staticlib) = 'LIB'; -my($dynamicexe) = 'EXE'; -my($staticexe) = 'Static EXE'; -my($sname) = '_Static'; - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub remove_type_append { - my($self) = shift; - my($str) = shift; - - foreach my $type ($staticexe, $dynamicexe, $staticlib, $dynamiclib) { - if ($str =~ /(.*)\s+$type$/) { - $str = $1; - last; - } - } - - return $str; -} - - -sub base_project_name { - my($self) = shift; - return $self->transform_file_name( - $self->remove_type_append($self->project_name()) . - ($self->get_writing_type() == 1 ? $sname : '')); -} - - -sub get_static_append { - #my($self) = shift; - return $sname; -} - - -sub get_type_append { - my($self) = shift; - my($type) = ''; - if ($self->lib_target()) { - ## Set the type_append preserving whitespace - if ($self->get_writing_type() == 1) { - $type = " $staticlib"; - } - else { - $type = " $dynamiclib"; - } - } - else { - ## Set the type_append preserving whitespace - if ($self->get_writing_type() == 1) { - $type = " $staticexe"; - } - else { - $type = " $dynamicexe"; - } - } - return $type; -} - - -sub translate_value { - my($self) = shift; - my($key) = shift; - my($val) = shift; - - if ($key eq 'depends' && $val ne '') { - my($arr) = $self->create_array($val); - my($app) = $dynamiclib; - $val = ''; - - ## Only write dependencies for non-static projects - ## and static exe projects - my($wt) = $self->get_writing_type(); - if ($wt == 0 || $self->exe_target()) { - if ($wt == 1) { - $app = $staticlib; - } - foreach my $entry (@$arr) { - my($dep) = $app; - ## Hack for executable dependencies - if ($entry =~ /exe/i) { - if ($wt == 1) { - $dep = $staticexe; - } - else { - $dep = $dynamicexe; - } - } - - $val .= "\"$entry $dep\" "; - } - $val =~ s/\s+$//; - } - } - return $val; -} - - -sub file_sorter { - my($self) = shift; - my($left) = shift; - my($right) = shift; - return lc($left) cmp lc($right); -} - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub fill_value { - my($self) = shift; - my($name) = shift; - my($value) = undef; - - if ($name eq 'make_file_name') { - $value = $self->base_project_name() . '.mak'; - } - - return $value; -} - - -sub separate_static_project { - #my($self) = shift; - return 1; -} - - -sub project_file_name { - my($self) = shift; - return $self->project_name() . '.dsp'; -} - - -sub static_project_file_name { - my($self) = shift; - return $self->project_name() . "$sname.dsp"; -} - - -sub override_valid_component_extensions { - my($self) = shift; - my($comp) = shift; - my($array) = undef; - - if ($comp eq 'source_files') { - my(@exts) = ("\\.cpp", "\\.cxx", "\\.c"); - $array = \@exts; - } - - return $array; -} - - -sub override_exclude_component_extensions { - my($self) = shift; - my($comp) = shift; - my($array) = undef; - - if ($comp eq 'source_files') { - my(@exts) = ("_T\\.cpp", "_T\\.cxx"); - $array = \@exts; - } - - return $array; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'vc6dspdllexe'; -} - - -sub get_lib_exe_template_input_file { - #my($self) = shift; - return 'vc6dsplibexe'; -} - - -sub get_lib_template_input_file { - #my($self) = shift; - return 'vc6dsplib'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'vc6dspdll'; -} - - -sub get_template { - #my($self) = shift; - return 'vc6dsp'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm b/bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm deleted file mode 100644 index bdb9954ff2a..00000000000 --- a/bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm +++ /dev/null @@ -1,132 +0,0 @@ -package VC6WorkspaceCreator; - -# ************************************************************ -# Description : A VC6 Workspace Creator -# Author : Chad Elliott -# Create Date : 5/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use VC6ProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub workspace_file_name { - my($self) = shift; - return $self->get_workspace_name() . '.dsw'; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "Microsoft Developer Studio Workspace File, Format Version 6.00$crlf" . - "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!$crlf" . - $crlf; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($projects) = $self->get_projects(); - my($pjs) = $self->get_project_info(); - my($crlf) = $self->crlf(); - my(%names) = (); - my($dupfound) = 0; - - foreach my $project (@$projects) { - my($pi) = $$pjs{$project}; - my($name, $deps) = @$pi; - if (defined $names{$name}) { - ## Having duplicate project names is an error in a VC6 Workspace. - ## We will create the project, but we will warn the user that - ## the project has duplicate names and will not load properly. - print "WARNING: A project with the following name " . - "has already been added: '$name'\n"; - ++$dupfound; - } - else { - $names{$name} = 1; - } - - ## Convert all /'s to \ - $project = $self->slash_to_backslash($project); - - print $fh "###############################################################################$crlf" . - $crlf . - "Project: \"$name\"=$project - Package Owner=<4>$crlf" . - $crlf . - "Package=<5>$crlf" . - "{{{$crlf" . - "}}}$crlf" . - $crlf . - "Package=<4>$crlf" . - "{{{$crlf"; - - if (defined $deps && $deps ne '') { - my($darr) = $self->create_array($deps); - foreach my $dep (@$darr) { - ## Avoid cirular dependencies - if ($name ne $dep) { - print $fh " Begin Project Dependency$crlf" . - " Project_Dep_Name $dep$crlf" . - " End Project Dependency$crlf"; - } - } - } - - print $fh "}}}$crlf$crlf"; - } - - if ($dupfound > 0) { - print "WARNING: $dupfound duplicate project" . - ($dupfound == 1 ? '' : 's') . - " found. This workspace will not load properly.\n"; - } -} - - -sub post_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "###############################################################################$crlf" . - $crlf . - "Global:$crlf" . - $crlf . - "Package=<5>$crlf" . - "{{{$crlf" . - "}}}$crlf" . - $crlf . - "Package=<3>$crlf" . - "{{{$crlf" . - "}}}$crlf" . - $crlf . - "###############################################################################$crlf" . - $crlf; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/VC7ProjectCreator.pm b/bin/MakeProjectCreator/modules/VC7ProjectCreator.pm deleted file mode 100644 index 30191fd7cbc..00000000000 --- a/bin/MakeProjectCreator/modules/VC7ProjectCreator.pm +++ /dev/null @@ -1,104 +0,0 @@ -package VC7ProjectCreator; - -# ************************************************************ -# Description : A VC7 Project Creator -# Author : Chad Elliott -# Create Date : 4/23/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use GUID; -use ProjectCreator; - -use vars qw(@ISA); -@ISA = qw(ProjectCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub specific_lookup { - my($self) = shift; - my($tag) = shift; - my($val) = undef; - - if (defined $self->{'guid_names'} && - defined $self->{'guid_names'}->{$tag}) { - $val = $self->{'guid_names'}->{$tag}; - } - - return $val; -} - - -sub save_project_value { - my($self) = shift; - my($name) = shift; - my($value) = shift; - - if ($name eq 'guid') { - if (!defined $self->{'guid_names'}) { - $self->{'guid_names'} = {}; - } - $self->{'guid_names'}->{$self->project_file_name()} = $value; - } -} - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub fill_value { - my($self) = shift; - my($name) = shift; - my($value) = undef; - - if ($name eq 'guid') { - my($guid) = new GUID(); - $value = $guid->generate($self->project_file_name(), - $self->get_current_input(), - $self->getcwd()); - } - return $value; -} - - -sub project_file_name { - my($self) = shift; - my($name) = shift; - - if (!defined $name) { - $name = $self->project_name(); - } - - return "$name.vcproj"; -} - - -sub get_dll_exe_template_input_file { - #my($self) = shift; - return 'vc7exe'; -} - - -sub get_dll_template_input_file { - #my($self) = shift; - return 'vc7dll'; -} - - -sub get_template { - #my($self) = shift; - return 'vc7'; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm b/bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm deleted file mode 100644 index da47350d5bc..00000000000 --- a/bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm +++ /dev/null @@ -1,130 +0,0 @@ -package VC7WorkspaceCreator; - -# ************************************************************ -# Description : A VC7 Workspace Creator -# Author : Chad Elliott -# Create Date : 5/14/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; - -use VC7ProjectCreator; -use WorkspaceCreator; - -use vars qw(@ISA); -@ISA = qw(WorkspaceCreator); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - - -sub crlf { - my($self) = shift; - return $self->windows_crlf(); -} - - -sub workspace_file_name { - my($self) = shift; - return $self->get_workspace_name() . '.sln'; -} - - -sub pre_workspace { - my($self) = shift; - my($fh) = shift; - my($crlf) = $self->crlf(); - - print $fh "Microsoft Visual Studio Solution File, Format Version 7.00$crlf"; -} - - -sub write_comps { - my($self) = shift; - my($fh) = shift; - my($gen) = shift; - my($projects) = $self->get_projects(); - my($guid) = '8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942'; - my($pjs) = $self->get_project_info(); - my(@list) = $self->sort_dependencies($projects, $pjs); - my($crlf) = $self->crlf(); - - ## $guid above is the VC7 Project GUID. It should not change. - - ## Project Information - foreach my $project (sort @list) { - my($pi) = $$pjs{$project}; - my($name, $deps, $pguid) = @$pi; - - ## Convert all /'s to \ - my($cpy) = $self->slash_to_backslash($project); - print $fh "Project(\"{$guid}\") = \"$name\", \"$cpy\", \"{$pguid}\"$crlf" . - "EndProject$crlf"; - } - - ## Project Configurations - print $fh "Global$crlf" . - "\tGlobalSection(SolutionConfiguration) = preSolution$crlf"; - - my(%configs) = (); - foreach my $project (@list) { - my($pi) = $$pjs{$project}; - my($name, $deps, $pguid, @cfgs) = @$pi; - foreach my $cfg (@cfgs) { - $cfg =~ s/\|.*//; - $configs{$cfg} = 1; - } - } - my($count) = 0; - foreach my $key (sort keys %configs) { - print $fh "\t\tConfigName.$count = $key$crlf"; - $count++; - } - - ## Project Dependencies - print $fh "\tEndGlobalSection$crlf" . - "\tGlobalSection(ProjectDependencies) = postSolution$crlf"; - foreach my $project (@list) { - my($pi) = $$pjs{$project}; - my($name, $deps, $pguid) = @$pi; - if (defined $deps && $deps ne '') { - my($darr) = $self->create_array($deps); - my($i) = 0; - foreach my $dep (@$darr) { - my($val) = $gen->specific_lookup($dep); - if (defined $val && $pguid ne $val) { - print $fh "\t\t{$pguid}.$i = {$val}$crlf"; - $i++; - } - } - } - } - print $fh "\tEndGlobalSection$crlf" . - "\tGlobalSection(ProjectConfiguration) = postSolution$crlf"; - - ## Project Configuration Names - foreach my $project (sort @list) { - my($pi) = $$pjs{$project}; - my($name, $deps, $pguid, @cfgs) = @$pi; - foreach my $cfg (sort @cfgs) { - my($c) = $cfg; - $c =~ s/\|.*//; - print $fh "\t\t{$pguid}.$c.ActiveCfg = $cfg$crlf" . - "\t\t{$pguid}.$c.Build.0 = $cfg$crlf"; - } - } - print $fh "\tEndGlobalSection$crlf" . - "\tGlobalSection(ExtensibilityGlobals) = postSolution$crlf" . - "\tEndGlobalSection$crlf" . - "\tGlobalSection(ExtensibilityAddIns) = postSolution$crlf" . - "\tEndGlobalSection$crlf" . - "EndGlobal$crlf"; -} - - -1; diff --git a/bin/MakeProjectCreator/modules/WorkspaceCreator.pm b/bin/MakeProjectCreator/modules/WorkspaceCreator.pm deleted file mode 100644 index 2901fdac8b9..00000000000 --- a/bin/MakeProjectCreator/modules/WorkspaceCreator.pm +++ /dev/null @@ -1,815 +0,0 @@ -package WorkspaceCreator; - -# ************************************************************ -# Description : Base class for all workspace creators -# Author : Chad Elliott -# Create Date : 5/13/2002 -# ************************************************************ - -# ************************************************************ -# Pragmas -# ************************************************************ - -use strict; -use FileHandle; -use File::Path; -use File::Basename; - -use Creator; -use Options; - -use vars qw(@ISA); -@ISA = qw(Creator Options); - -# ************************************************************ -# Data Section -# ************************************************************ - -my($wsext) = 'mwc'; -my($wsbase) = 'mwb'; - -## Valid names for assignments within a workspace -my(%validNames) = ('cmdline' => 1, - 'implicit' => 1, - ); - -## Singleton hash maps of project information -my(%allprinfo) = (); -my(%allprojects) = (); - -# ************************************************************ -# Subroutine Section -# ************************************************************ - -sub new { - my($class) = shift; - my($global) = shift; - my($inc) = shift; - my($template) = shift; - my($ti) = shift; - my($dynamic) = shift; - my($static) = shift; - my($relative) = shift; - my($addtemp) = shift; - my($addproj) = shift; - my($progress) = shift; - my($toplevel) = shift; - my($baseprojs) = shift; - my($self) = Creator::new($class, $global, $inc, - $template, $ti, $dynamic, $static, - $relative, $addtemp, $addproj, - $progress, $toplevel, $baseprojs, - 'workspace'); - my($typecheck) = $self->{'type_check'}; - - $self->{'workspace_name'} = undef; - $self->{$typecheck} = 0; - $self->{'projects'} = []; - $self->{'project_info'} = {}; - $self->{'reading_parent'} = []; - $self->{'project_files'} = []; - $self->{'scoped_assign'} = {}; - $self->{'cacheok'} = 1; - - return $self; -} - - -sub modify_assignment_value { - my($self) = shift; - my($value) = shift; - - ## Workspace assignments do not need modification. - return $value; -} - - -sub parse_line { - my($self) = shift; - my($ih) = shift; - my($line) = shift; - my($status, - $errorString, - @values) = $self->parse_known($line); - - ## Was the line recognized? - if ($status && defined $values[0]) { - if ($values[0] eq $self->{'grammar_type'}) { - my($name) = $values[1]; - my($typecheck) = $self->{'type_check'}; - if (defined $name && $name eq '}') { - my($rp) = $self->{'reading_parent'}; - if (!defined $$rp[0]) { - ## Fill in all the default values - $self->generate_defaults(); - - ## End of workspace; Have subclass write out the file - ## Generate the project files - my($gstat, $generator) = $self->generate_project_files(); - if ($gstat) { - $self->write_workspace($generator, 1); - $self->{'assign'} = {}; - } - else { - $errorString = 'ERROR: Unable to ' . - 'generate all of the project files'; - $status = 0; - } - - $self->{'workspace_name'} = undef; - $self->{'projects'} = []; - $self->{'project_info'} = {}; - $self->{'project_files'} = []; - } - $self->{$typecheck} = 0; - } - else { - ## Project Beginning - ## Deal with the inheritance hiearchy first - my($parents) = $values[2]; - if (defined $parents) { - foreach my $parent (@$parents) { - ## Read in the parent onto ourself - my($file) = $self->search_include_path("$parent.$wsbase"); - if (!defined $file) { - $file = $self->search_include_path("$parent.$wsext"); - } - - if (defined $file) { - my($rp) = $self->{'reading_parent'}; - push(@$rp, 1); - $status = $self->parse_file($file); - pop(@$rp); - - if (!$status) { - $errorString = "ERROR: Invalid parent: $parent"; - } - } - else { - $status = 0; - $errorString = "ERROR: Unable to locate parent: $parent"; - } - } - } - - ## Set up some initial values - if (defined $name) { - $name =~ s/^\(\s*//; - $name =~ s/\s*\)$//; - $self->{'workspace_name'} = $name; - } - $self->{$typecheck} = 1; - } - } - elsif ($values[0] eq 'assignment') { - if (defined $validNames{$values[1]}) { - $self->process_assignment($values[1], $values[2]); - } - else { - $errorString = "ERROR: Invalid assignment name: $values[1]"; - $status = 0; - } - } - elsif ($values[0] eq 'assign_add') { - if (defined $validNames{$values[1]}) { - $self->process_assignment_add($values[1], $values[2]); - } - else { - $errorString = "ERROR: Invalid addition name: $values[1]"; - $status = 0; - } - } - elsif ($values[0] eq 'assign_sub') { - if (defined $validNames{$values[1]}) { - $self->process_assignment_sub($values[1], $values[2]); - } - else { - $errorString = "ERROR: Invalid subtraction name: $values[1]"; - $status = 0; - } - } - elsif ($values[0] eq 'component') { - ($status, $errorString) = $self->parse_scope($ih, - $values[1], - $values[2], - \%validNames); - } - else { - $errorString = "ERROR: Unrecognized line: $line"; - $status = 0; - } - } - elsif ($status == -1) { - push(@{$self->{'project_files'}}, $line); - $status = 1; - } - - return $status, $errorString; -} - - -sub handle_scoped_unknown { - my($self) = shift; - my($fh) = shift; - my($type) = shift; - my($flags) = shift; - my($line) = shift; - - if (-e $line) { - if (-d $line) { - ## This would be too hard to track which files - ## got the scoped assignments, so we ignore these. - print "WARNING: Scoped directory " . - "assignments will be ignored: $line\n"; - } - else { - ## Assignment store - $self->{'scoped_assign'}->{$line} = $flags; - } - } - else { - ## We couldn't determine if it was an mpc file or - ## a directory, so we ignore these. - print "WARNING: Scoped file does not " . - "exist, so assignments will be ignored: $line\n"; - } - push(@{$self->{'project_files'}}, $line); - - return 1, ''; -} - - -sub search_for_files { - my($self) = shift; - my($files) = shift; - my($exts) = shift; - my($array) = shift; - my($impl) = $self->get_assignment('implicit'); - - foreach my $file (@$files) { - if (-d $file) { - my(@f) = $self->generate_default_file_list($file); - $self->search_for_files(\@f, $exts, $array); - if ($impl) { - unshift(@$array, $file); - } - } - else { - foreach my $ext (@$exts) { - if ($file =~ /$ext$/) { - unshift(@$array, $file); - } - } - } - } -} - - -sub remove_duplicate_projects { - my($self) = shift; - my($list) = shift; - my($count) = scalar(@$list); - - for(my $i = 0; $i < $count; ++$i) { - my($file) = $$list[$i]; - foreach my $inner (@$list) { - if ($file ne $inner && $file eq dirname($inner) && ! -d $inner) { - splice(@$list, $i, 1); - --$count; - --$i; - last; - } - } - } -} - - -sub generate_default_components { - my($self) = shift; - my($files) = shift; - my($pjf) = $self->{'project_files'}; - my(@exts) = ('\\.mpc'); - my($impl) = $self->get_assignment('implicit'); - - if (defined $$pjf[0]) { - ## If we have files, then process directories - my(@built) = (); - foreach my $file (@$pjf) { - if (-d $file) { - my(@found) = (); - my(@gen) = $self->generate_default_file_list($file); - $self->search_for_files(\@gen, \@exts, \@found); - push(@built, @found); - } - else { - push(@built, $file); - } - } - - ## If the workspace is set to implicit - if ($impl) { - ## Remove duplicates from this list - $self->remove_duplicate_projects(\@built); - } - - ## Set the project files - $self->{'project_files'} = \@built; - } - else { - ## Add all of the mpc files in this directory - ## and in the subdirectories. - $self->search_for_files($files, \@exts, $pjf); - - ## If the workspace is set to implicit - if ($impl) { - ## Remove duplicates from this list - $self->remove_duplicate_projects($pjf); - } - - ## If no files were found, then we push the empty - ## string, so the Project Creator will generate - ## the default project file. - if (!defined $$pjf[0]) { - push(@$pjf, ''); - } - } -} - - -sub generate_defaults { - my($self) = shift; - - ## Generate default workspace name - if (!defined $self->{'workspace_name'}) { - my($current) = $self->get_current_input(); - if ($current eq '') { - $self->{'workspace_name'} = $self->base_directory(); - } - else { - $current =~ s/\.[^\.]+$//; - $self->{'workspace_name'} = $current; - } - } - - my(@files) = $self->generate_default_file_list(); - - ## Generate default components - $self->generate_default_components(\@files); -} - - -sub get_workspace_name { - my($self) = shift; - return $self->{'workspace_name'}; -} - - -sub write_workspace { - my($self) = shift; - my($generator) = shift; - my($addfile) = shift; - my($status) = 1; - - if ($self->get_toplevel()) { - my($name) = $self->transform_file_name($self->workspace_file_name()); - if (defined $self->{'projects'}->[0]) { - my($fh) = new FileHandle(); - my($dir) = dirname($name); - - if ($dir ne '.') { - mkpath($dir, 0, 0777); - } - if (open($fh, ">$name")) { - $self->pre_workspace($fh); - $self->write_comps($fh, $generator); - $self->post_workspace($fh); - close($fh); - - if ($addfile) { - $self->add_file_written($name); - } - } - else { - print STDERR "ERROR: Unable to open $name for output\n"; - $status = 0; - } - } - else { - print "WARNING: No projects were created.\n" . - " Workspace $name has not been created.\n"; - } - } - - return $status; -} - - -sub save_project_info { - my($self) = shift; - my($gen) = shift; - my($gpi) = shift; - my($dir) = shift; - my($projects) = shift; - my($pi) = shift; - my($c) = 0; - - ## For each file written - foreach my $pj (@$gen) { - ## Save the full path to the project file in the array - my($full) = ($dir ne '.' ? "$dir/" : '') . $pj; - push(@$projects, $full); - - ## Get the corresponding generated project info and save it - ## in the hash map keyed on the full project file name - $$pi{$full} = $$gpi[$c]; - $c++; - } -} - - -sub generate_project_files { - my($self) = shift; - my($status) = 0; - my(@projects) = (); - my(%pi) = (); - my($generator) = $self->project_creator(); - my($cwd) = $self->getcwd(); - my($impl) = $self->get_assignment('implicit'); - my($postkey) = $generator->get_dynamic() . - $generator->get_static() . "-$self"; - my($previmpl) = $impl; - my($prevcache) = $self->{'cacheok'}; - my(%gstate) = $generator->save_state(); - - ## Remove the address portion of the $self string - $postkey =~ s/=.*//; - - foreach my $ofile (@{$self->{'project_files'}}) { - my($file) = $ofile; - my($dir) = dirname($file); - my($restore) = 0; - - if (defined $self->{'scoped_assign'}->{$ofile}) { - ## Handle the implicit assignment - my($oi) = $self->{'scoped_assign'}->{$ofile}->{'implicit'}; - if (defined $oi) { - $previmpl = $impl; - $impl = $oi; - } - - ## Handle the cmdline assignment - my($cmdline) = $self->{'scoped_assign'}->{$ofile}->{'cmdline'}; - if (defined $cmdline && $cmdline ne '') { - ## Save the cacheok value - $prevcache = $self->{'cacheok'}; - - ## Get the current parameters and process the command line - my(%parameters) = $self->current_parameters(); - $self->process_cmdline($cmdline, \%parameters); - - ## Set the parameters on the generator - $generator->restore_state(\%parameters); - $restore = 1; - } - } - - ## If we are generating implicit projects and the file is a - ## directory, then we set the dir to the file and empty the file - if ($impl && -d $file) { - $dir = $file; - $file = ''; - } - - ## Generate the key for this project file - my($prkey) = $self->getcwd() . "/$file-$postkey"; - - ## We must change to the subdirectory for - ## which this project file is intended - if ($self->cd($dir)) { - my($gen) = []; - my($gpi) = []; - if ($self->{'cacheok'} && defined $allprojects{$prkey}) { - $gen = $allprojects{$prkey}; - $gpi = $allprinfo{$prkey}; - $status = 1; - } - else { - $status = $generator->generate(basename($file)); - - ## If any one project file fails, then stop - ## processing altogether. - if (!$status) { - ## We don't restore the state before we leave, - ## but that's ok since we will be exiting soon. - return $status, $generator; - } - - ## Get the individual project information and - ## generated file name(s) - $gen = $generator->get_files_written(); - $gpi = $generator->get_project_info(); - - ## If we need to generate a workspace file per project - ## then we generate a temporary project info and projects - ## array and call write_project(). - if ($dir ne '.' && defined $$gen[0] && $self->workspace_per_project()) { - my(%perpi) = (); - my(@perprojects) = (); - $self->save_project_info($gen, $gpi, '.', \@perprojects, \%perpi); - - ## Set our per project information - $self->{'projects'} = \@perprojects; - $self->{'project_info'} = \%perpi; - - ## Write our per project workspace - $self->write_workspace($generator); - - ## Reset our project information to empty - $self->{'projects'} = []; - $self->{'project_info'} = {}; - } - - if ($self->{'cacheok'}) { - $allprojects{$prkey} = $gen; - $allprinfo{$prkey} = $gpi; - } - } - $self->cd($cwd); - $self->save_project_info($gen, $gpi, $dir, \@projects, \%pi); - } - else { - ## Unable to change to the directory. - ## We don't restore the state before we leave, - ## but that's ok since we will be exiting soon. - return 0, $generator; - } - - ## Return things to the way they were - if (defined $self->{'scoped_assign'}->{$ofile}) { - $impl = $previmpl; - - if ($restore) { - $self->{'cacheok'} = $prevcache; - $generator->restore_state(\%gstate); - } - } - } - - $self->{'projects'} = \@projects; - $self->{'project_info'} = \%pi; - - return $status, $generator; -} - - -sub get_projects { - my($self) = shift; - return $self->{'projects'}; -} - - -sub get_project_info { - my($self) = shift; - return $self->{'project_info'}; -} - - -sub sort_dependencies { - my($self) = shift; - my($projects) = shift; - my($pjs) = shift; - my(@list) = @$projects; - my(%prepend) = (); - - foreach my $project (@list) { - my($dname) = dirname($project); - if ($dname ne '.') { - $prepend{basename($project)} = dirname($project); - } - } - - ## Put the projects in the order specified - ## by the project dpendencies. - for(my $i = 0; $i <= $#list; $i++) { - my($project) = $list[$i]; - my($pi) = $$pjs{$project}; - my($name, $deps) = @$pi; - - if ($deps ne '') { - my($darr) = $self->create_array($deps); - my($moved) = 0; - foreach my $dep (@$darr) { - my($base) = basename($dep); - my($full) = (defined $prepend{$base} ? - "$prepend{$base}/" : '') . $base; - if ($project ne $full) { - ## See if the dependency is listed after this project - for(my $j = $i; $j <= $#list; $j++) { - if ($list[$j] eq $full) { - ## If so, move it in front of the current project - splice(@list, $i, 0, $full); - splice(@list, $j + 1, 1); - $moved = 1; - $j--; - } - } - } - } - if ($moved) { - $i--; - } - } - } - return @list; -} - - -sub optionError { - my($self) = shift; - my($str) = shift; - print 'WARNING: ' . $self->get_current_input() . ": $str\n"; -} - - -sub process_cmdline { - my($self) = shift; - my($cmdline) = shift; - my($parameters) = shift; - - ## It's ok to use the cache - $self->{'cacheok'} = 1; - - if (defined $cmdline && $cmdline ne '') { - my($args) = $self->create_array($cmdline); - - ## Look for environment variables - foreach my $arg (@$args) { - while($arg =~ /\$(\w+)/) { - my($name) = $1; - my($val) = undef; - if ($name eq 'PWD') { - $val = $self->getcwd(); - } - elsif (defined $ENV{$name}) { - $val = $ENV{$name}; - } - $arg =~ s/\$\w+/$val/; - } - } - - my($options) = $self->options('MWC', {}, 0, @$args); - if (defined $options) { - foreach my $key (keys %$options) { - my($type) = $self->is_set($key, $options); - if ($type eq 'ARRAY') { - push(@{$parameters->{$key}}, @{$options->{$key}}); - } - elsif ($type eq 'HASH') { - foreach my $hk (keys %{$options->{$key}}) { - $parameters->{$key}->{$hk} = $options->{$key}->{$hk}; - } - } - elsif ($type eq 'SCALAR') { - $parameters->{$key} = $options->{$key}; - } - } - - ## Issue warnings for these options - if (defined $options->{'recurse'}) { - $self->optionError('-recurse is ignored'); - } - if (defined $options->{'reldefs'}) { - $self->optionError('-noreldefs is ignored'); - } - if (defined $options->{'input'}->[0]) { - $self->optionError('Command line files ' . - 'specified in a workspace are ignored'); - } - - ## Determine if it's ok to use the cache - my(@cacheInvalidating) = ('global', 'include', 'baseprojs', - 'template', 'ti', 'relative', - 'addtemp', 'addproj'); - foreach my $key (@cacheInvalidating) { - if ($self->is_set($key, $options)) { - $self->{'cacheok'} = 0; - last; - } - } - } - } -} - - -sub current_parameters { - my($self) = shift; - my(%parameters) = $self->save_state(); - - ## We always want the project creator to generate a toplevel - $parameters{'toplevel'} = 1; - return %parameters; -} - - -sub project_creator { - my($self) = shift; - my($str) = "$self"; - - ## NOTE: If the subclassed WorkspaceCreator name prefix does not - ## match the name prefix of the ProjectCreator, this code - ## will not work and the subclassed WorkspaceCreator will - ## need to override this method. - - $str =~ s/Workspace/Project/; - $str =~ s/=HASH.*//; - - ## Set up values for each project creator - ## If we have command line arguments in the workspace, then - ## we process them before creating the project creator - my($cmdline) = $self->get_assignment('cmdline'); - my(%parameters) = $self->current_parameters(); - $self->process_cmdline($cmdline, \%parameters); - - ## Create the new project creator with the updated parameters - return $str->new($parameters{'global'}, - $parameters{'include'}, - $parameters{'template'}, - $parameters{'ti'}, - $parameters{'dynamic'}, - $parameters{'static'}, - $parameters{'relative'}, - $parameters{'addtemp'}, - $parameters{'addproj'}, - $parameters{'progress'}, - $parameters{'toplevel'}, - $parameters{'baseprojs'}); -} - - -sub sort_files { - #my($self) = shift; - return 0; -} - - -sub get_modified_workspace_name { - my($self) = shift; - my($name) = shift; - my($ext) = shift; - - if (!defined $self->{'previous_workspace_name'}) { - $self->{'previous_workspace_name'} = $self->get_workspace_name(); - } - elsif ($self->{'previous_workspace_name'} ne $self->get_workspace_name()) { - $self->{'previous_workspace_name'} = $self->get_workspace_name(); - $self->{'current_workspace_name'} = - "$name.$self->{'previous_workspace_name'}$ext"; - } - - return (defined $self->{'current_workspace_name'} ? - $self->{'current_workspace_name'} : "$name$ext"); -} - - -sub generate_recursive_input_list { - my($self) = shift; - my($dir) = shift; - return $self->extension_recursive_input_list($dir, $wsext); -} - -# ************************************************************ -# Virtual Methods To Be Overridden -# ************************************************************ - -sub workspace_file_name { - #my($self) = shift; - return ''; -} - - -sub workspace_per_project { - #my($self) = shift; - return 0; -} - - -sub pre_workspace { - #my($self) = shift; - #my($fh) = shift; -} - - -sub write_comps { - #my($self) = shift; - #my($fh) = shift; - #my($gens) = shift; -} - - -sub post_workspace { - #my($self) = shift; - #my($fh) = shift; -} - - -1; |