diff --git a/VisualStudio/fixup-vc6-dsps.pl b/VisualStudio/fixup-vc6-dsps.pl new file mode 100644 index 000000000..3697ae339 --- /dev/null +++ b/VisualStudio/fixup-vc6-dsps.pl @@ -0,0 +1,106 @@ +#!perl -w +use Getopt::Long qw(:config bundling); +use File::Basename; +use File::Find; +use strict; + +sub usage { + my $file = basename($0); + "usage: $file [options] + +This script substitutes hardcoded values for the \$(PlatformName) and +\$(ConfigurationName) variables in the OpenSceneGraph, Producer, and +OpenThreads .dsp files. Those variables are useful in VC 7.x and VC 8, +but are incompatible with VC 6.0. + +To run, open a shell and execute + perl $file + +Options: + -h, --help print help information +"; +} + +my ($print_help); +my $opt_success = GetOptions('h|help' => \$print_help); + +if (!$opt_success || $print_help) { print usage; exit !$print_help; } + + +# update the entire text block of settings for the given named project +# and configuration +sub update_config_block { + my ($project_name, $project_config, $is_static, $text) = @_; + local($_) = $text; + + s/\$\(PlatformName\)/win32/g; + s/\$\(ConfigurationName\)/$project_config/g; + + $_; +} + +sub backup_file { + my ($file, $backup_file) = @_; + local($/) = undef; # slurp whole file + + my $contents; + open(ORIG, "$file") || die "$!"; + $contents = ; + close(ORIG); + + open(BACKUP, "> $backup_file") || die "$!"; + print BACKUP $contents; + close(BACKUP); +} + + +# Update all the configuration text blocks, one-by-one, in the dsp file. +# Backs up existing dsps using a .bak extension. +sub update_dsp { + my ($project_file) = @_; + + print STDERR $project_file, "\n"; + + my $backup = $project_file.".bak"; + backup_file($project_file, $backup); + + open(INPUT, "$backup") || die "$!"; + open(OUTPUT, "> $project_file") || die "$!"; + while (defined($_ = )) { + print OUTPUT $_; + if (/^!(?:ELSE)?IF "\$\(CFG\)" == "(.+?) - Win32 (.+)"\s*$/) { + # start of config block + + my ($project, $config) = ($1, $2); + my $is_static = ($config =~ s/\s*Static\s*$//); + + my $config_text = ""; + ; # read blank line + while (defined($_ = ) && !/^\s*$/) { + s/\r?\n/\n/; + $config_text .= $_; + } + + $config_text = update_config_block($project, $config, $is_static, $config_text); + + print OUTPUT map "$_\r\n", ("", split(/\n/, $config_text), ""); + } + } + close(OUTPUT); + close(INPUT); +} + +sub callback { + update_dsp($_) if /\.dsp$/i; +} + +my (@dirs) = qw(. + ../../Producer/VC++6.0/Producer + ../../OpenThreads/win32_src); + +# change to directory containing script to ensure paths work properly +chdir dirname($0); + +find(\&callback, @dirs); + +exit;