diff options
Diffstat (limited to 'ACE/MPC/combine_dsw.pl')
-rwxr-xr-x | ACE/MPC/combine_dsw.pl | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/ACE/MPC/combine_dsw.pl b/ACE/MPC/combine_dsw.pl new file mode 100755 index 00000000000..f1c2f4b1c4c --- /dev/null +++ b/ACE/MPC/combine_dsw.pl @@ -0,0 +1,145 @@ +#! /usr/bin/perl +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' + & eval 'exec perl -w -S $0 $argv:q' + if 0; + +# ****************************************************************** +# Author: Chad Elliott +# Date: 4/8/2004 +# $Id$ +# Description: Combined multiple dsw's into a single dsw +# ****************************************************************** + +# ****************************************************************** +# Pragma Section +# ****************************************************************** + +use strict; +use FileHandle; +use File::Basename; + +# ****************************************************************** +# Data Section +# ****************************************************************** + +my $version = '1.3'; + +# ****************************************************************** +# Subroutine Section +# ****************************************************************** + +sub usageAndExit { + my $str = shift; + print STDERR "$str\n" if (defined $str); + print STDERR "Combine DSW v$version\n", + "Usage: ", basename($0), + " [-u] <output file> <input files...>\n\n", + "-u Each input file will be removed after successful ", + "combination\n\n", + "NOTE: This script will work for vcw's too.\n\n", + "Combine multiple dsw's into a single dsw. You can use ", + "MPC to generate\n", + "dynamic projects and then generate static projects using ", + "the -static,\n", + "-name_modifier and -apply_project options together. You ", + "can then run this\n", + "script to combine the workspaces into one.\n"; + exit(0); +} + +# ****************************************************************** +# Main Section +# ****************************************************************** + +my $output; +my $unlink; +my @input; + +for(my $i = 0; $i <= $#ARGV; $i++) { + my $arg = $ARGV[$i]; + if ($arg =~ /^-/) { + if ($arg eq '-u') { + $unlink = 1; + } + else { + usageAndExit("Unknown option: $arg"); + } + } + else { + if (!defined $output) { + $output = $arg; + } + else { + push(@input, $arg); + } + } +} + +## Print the usage if there is no output file provided or there isn't at +## least two input files. +usageAndExit() if (!defined $output || + !defined $input[0] || !defined $input[1]); + +my $tmp = "$output.$$.tmp"; +my $oh = new FileHandle(); + +if (open($oh, ">$tmp")) { + my $msident; + for(my $i = 0; $i <= $#input; ++$i) { + ## We only want to take the global settings from the last input file. + my $input = $input[$i]; + my $global = ($i == $#input); + + ## Read in the input file and write out the parts that are common + ## between multiple workspace files (but only on the first input + ## file). After that, write out the project information from each + ## input file. + my $fh = new FileHandle(); + if (open($fh, $input)) { + my $in_global = 0; + while(<$fh>) { + if (/Microsoft\s+(Developer\s+Studio|eMbedded\s+Visual)/) { + ## We only want to print out the identifier from the first + ## input file. + if (!$msident) { + $msident = 1; + print $oh $_; + } + } + else { + if (/^Global:/) { + $in_global = 1; + } + elsif ($in_global && /^[#]{79,}/) { + $in_global = 0; + $_ = ''; + } + + ## Only print out the line if it's not part of the global + ## settings (unless this is the last input file). + print $oh $_ if (!$in_global || ($global && $in_global)); + } + } + close($fh); + } + else { + print STDERR "ERROR: Unable to open '$input' for reading\n"; + exit(2); + } + } + close($oh); + + ## If the user wants us to remove the input files after successfully + ## combining them, then do so here. + unlink(@input) if ($unlink); + + ## We have written the new workspace to a temporary file to allow an + ## input file to be the same as an output file. Once we're done, we + ## need to move it to it's correct output name. + unlink($output); + rename($tmp, $output); +} +else { + print STDERR "ERROR: Unable to open '$tmp' for writing\n"; + exit(1); +} |