| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 1 | #!/usr/bin/perl -w # -*- tab-width: 4; cperl-indent-level: 4; indent-tabs-mode: nil -*- |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 2 | |
| 3 | use File::Copy; |
| 4 | |
| 5 | my $output_format = 'u'; |
| 6 | |
| 7 | sub reg_get_value($) |
| 8 | { |
| 9 | # it is believed that the registry moves keys around |
| 10 | # depending on OS version, this will de-mangle that |
| 11 | my $key = shift; |
| 12 | my $fhandle; |
| 13 | my $value; |
| 14 | |
| 15 | open ($fhandle, "/proc/registry/$key") || return; |
| 16 | # reg keys have 0x00 0x5c at the end |
| 17 | $value = (split /\0/, <$fhandle>)[0]; |
| 18 | close ($fhandle); |
| 19 | |
| Jens-Heiner Rechtien | 8415595 | 2007-06-27 16:51:45 +0000 | [diff] [blame] | 20 | if ( defined $value ) { |
| 21 | chomp ($value); |
| 22 | $value =~ s|\r\n||; |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 23 | # print "Value '$value' at '$key'\n"; |
| Jens-Heiner Rechtien | 8415595 | 2007-06-27 16:51:45 +0000 | [diff] [blame] | 24 | } |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 25 | |
| 26 | return $value; |
| 27 | } |
| 28 | |
| 29 | sub reg_find_key($) |
| 30 | { |
| 31 | # it is believed that the registry moves keys around |
| 32 | # depending on OS version, this will de-mangle that |
| 33 | my $key = shift; |
| 34 | $key =~ s| |\\ |; |
| Tor Lillqvist | 2a2c05e | 2012-03-09 10:22:44 +0200 | [diff] [blame] | 35 | $key = `cd /proc/registry/ ; ls $key 2>/dev/null`; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 36 | |
| 37 | return $key; |
| 38 | } |
| 39 | |
| 40 | sub print_syntax() |
| 41 | { |
| 42 | print "oowintool [option] ...\n"; |
| 43 | print " encoding options\n"; |
| 44 | print " -w - windows form\n"; |
| 45 | print " -u - unix form (default)\n"; |
| 46 | print " commands:\n"; |
| Tor Lillqvist | fd4c879 | 2011-10-04 23:56:02 +0300 | [diff] [blame] | 47 | print " --msvc-ver - print version of MSVC eg. 6.0\n"; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 48 | print " --msvc-copy-dlls <dest> - copy msvc[pr]??.dlls into <dest>/msvcp??/\n"; |
| Jan Holesovsky | 41e995e | 2011-11-16 20:59:16 +0100 | [diff] [blame] | 49 | print " --msvc-copy-msms <dest> - copy mscrt merge modules to <dest>/msm90/\n"; |
| 50 | print " --msvc-copy-msms-64 <ds>- copy the x64 mscrt merge modules to <ds>/msm90/\n"; |
| Tor Lillqvist | fd4c879 | 2011-10-04 23:56:02 +0300 | [diff] [blame] | 51 | print " --msvc-productdir - print productdir\n"; |
| 52 | print " --msvs-productdir - print productdir\n"; |
| 53 | print " --dotnetsdk-dir - print .NET SDK path\n"; |
| 54 | print " --csc-compilerdir - print .NET SDK compiler path\n"; |
| 55 | print " --windows-sdk-home - print Windows SDK install dir\n"; |
| 56 | print " --jdk-home - print the jdk install dir\n"; |
| Tor Lillqvist | fd4c879 | 2011-10-04 23:56:02 +0300 | [diff] [blame] | 57 | print " --help - print this message\n"; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | sub cygpath($$$) |
| 61 | { |
| 62 | my ($path, $input_format, $format) = @_; |
| 63 | |
| Jens-Heiner Rechtien | 8415595 | 2007-06-27 16:51:45 +0000 | [diff] [blame] | 64 | return $path if ( ! defined $path ); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 65 | # Strip trailing path separators |
| 66 | if ($input_format eq 'u') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 67 | $path =~ s|/*\s*$||; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 68 | } else { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 69 | $path =~ s|\\*\s*$||; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 70 | } |
| 71 | |
| 72 | # 'Unterminated quoted string errors' from 'ash' when |
| 73 | # forking cygpath so - reimplement cygpath in perl [ gack ] |
| 74 | if ($format eq 'u' && $input_format eq 'w') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 75 | $path =~ s|\\|/|g; |
| 76 | $path =~ s|([a-zA-Z]):/|/cygdrive/$1/|g; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 77 | } |
| 78 | elsif ($format eq 'w' && $input_format eq 'u') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 79 | $path =~ s|/cygdrive/([a-zA-Z])/|/$1/|g; |
| 80 | $path =~ s|/|\\|g; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 81 | } |
| 82 | |
| 83 | return $path; |
| 84 | } |
| 85 | |
| 86 | sub print_path($$) |
| 87 | { |
| 88 | my ($path, $unix) = @_; |
| 89 | |
| 90 | $path = cygpath ($path, $unix, $output_format); |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 91 | |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 92 | print $path; |
| 93 | } |
| 94 | |
| Tor Lillqvist | 699d119 | 2011-05-16 15:52:26 +0300 | [diff] [blame] | 95 | sub print_windows_sdk_home() |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 96 | { |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 97 | my ($value, $key); |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 98 | |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 99 | $value = reg_get_value ('HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v6.1/InstallationFolder'); |
| 100 | |
| 101 | if (!defined $value) { |
| 102 | $value = reg_get_value ('HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v7.1/InstallationFolder'); |
| 103 | } |
| 104 | |
| 105 | if (!defined $value) { |
| 106 | $value = reg_get_value ('HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/CurrentInstallFolder'); |
| 107 | } |
| 108 | |
| 109 | if (!defined $value) { |
| 110 | $value = reg_get_value ('HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/Directories/Install Dir'); |
| 111 | } |
| 112 | |
| 113 | if (!defined $value) { |
| 114 | $key = reg_find_key ('HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/InstalledSDKs/*/Install Dir'); |
| 115 | $value = reg_get_value ($key); |
| 116 | } |
| 117 | |
| 118 | defined $value || die "Windows SDK not found"; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 119 | |
| 120 | print cygpath ($value, 'w', $output_format); |
| 121 | } |
| 122 | |
| Rüdiger Timm | 9eb4ff0 | 2008-07-31 17:36:04 +0000 | [diff] [blame] | 123 | my %msvs_2008 = ( |
| 124 | 'ver' => '9.0', |
| 125 | 'key' => 'Microsoft/VisualStudio/9.0/Setup/VS/ProductDir', |
| Rüdiger Timm | 9eb4ff0 | 2008-07-31 17:36:04 +0000 | [diff] [blame] | 126 | 'dll_path' => 'VC/redist/x86/Microsoft.VC90.CRT', |
| 127 | 'dll_suffix' => '90' |
| 128 | ); |
| 129 | my %msvc_2008 = ( |
| 130 | 'ver' => '9.0', |
| 131 | 'key' => 'Microsoft/VisualStudio/9.0/Setup/VC/ProductDir', |
| Rüdiger Timm | 9eb4ff0 | 2008-07-31 17:36:04 +0000 | [diff] [blame] | 132 | 'dll_path' => 'redist/x86/Microsoft.VC90.CRT', |
| 133 | 'dll_suffix' => '90' |
| 134 | ); |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 135 | my %msvs_express_2008 = ( |
| 136 | 'ver' => '9.0', |
| 137 | 'key' => 'Microsoft/VCExpress/9.0/Setup/VS/ProductDir', |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 138 | 'dll_path' => 'VC/redist/x86/Microsoft.VC90.CRT', |
| 139 | 'dll_suffix' => '90' |
| 140 | ); |
| 141 | my %msvc_express_2008 = ( |
| 142 | 'ver' => '9.0', |
| 143 | 'key' => 'Microsoft/VCExpress/9.0/Setup/VC/ProductDir', |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 144 | 'dll_path' => 'redist/x86/Microsoft.VC90.CRT', |
| 145 | 'dll_suffix' => '90' |
| 146 | ); |
| Jesús Corrius | f068790 | 2010-10-15 01:36:09 +0200 | [diff] [blame] | 147 | my %msvs_2010 = ( |
| 148 | 'ver' => '10.0', |
| 149 | 'key' => 'Microsoft/VisualStudio/10.0/Setup/VS/ProductDir', |
| Jesús Corrius | f068790 | 2010-10-15 01:36:09 +0200 | [diff] [blame] | 150 | 'dll_path' => 'VC/redist/x86/Microsoft.VC100.CRT', |
| 151 | 'dll_suffix' => '100' |
| 152 | ); |
| Jesús Corrius | f068790 | 2010-10-15 01:36:09 +0200 | [diff] [blame] | 153 | my %msvc_2010 = ( |
| 154 | 'ver' => '10.0', |
| 155 | 'key' => 'Microsoft/VisualStudio/10.0/Setup/VC/ProductDir', |
| Jesús Corrius | f068790 | 2010-10-15 01:36:09 +0200 | [diff] [blame] | 156 | 'dll_path' => 'redist/x86/Microsoft.VC100.CRT', |
| 157 | 'dll_suffix' => '100' |
| 158 | ); |
| 159 | |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 160 | sub find_msvs() |
| 161 | { |
| Tor Lillqvist | 0533d54 | 2011-03-15 11:29:52 +0200 | [diff] [blame] | 162 | my @ms_versions = ( \%msvs_2008, \%msvs_express_2008, \%msvs_2010 ); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 163 | |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 164 | for $ver (@ms_versions) { |
| 165 | my $install = reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/" . $ver->{'key'}); |
| 166 | if (defined $install && $install ne '') { |
| 167 | $ver->{'product_dir'} = $install; |
| 168 | return $ver; |
| 169 | } |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 170 | } |
| 171 | die "Can't find MS Visual Studio / VC++"; |
| 172 | } |
| 173 | |
| 174 | sub find_msvc() |
| 175 | { |
| Tor Lillqvist | 0533d54 | 2011-03-15 11:29:52 +0200 | [diff] [blame] | 176 | my @ms_versions = ( \%msvc_2008, \%msvc_express_2008, \%msvc_2010 ); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 177 | |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 178 | for $ver (@ms_versions) { |
| 179 | my $install = reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/" . $ver->{'key'}); |
| 180 | if (defined $install && $install ne '') { |
| 181 | $ver->{'product_dir'} = $install; |
| 182 | return $ver; |
| 183 | } |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 184 | } |
| 185 | die "Can't find MS Visual Studio / VC++"; |
| 186 | } |
| 187 | |
| 188 | sub print_msvc_ver() |
| 189 | { |
| 190 | my $ver = find_msvc(); |
| 191 | print $ver->{'ver'}; |
| 192 | } |
| 193 | |
| 194 | sub print_msvc_product_dir() |
| 195 | { |
| 196 | my $ver = find_msvc(); |
| 197 | print cygpath ($ver->{'product_dir'}, 'w', $output_format); |
| 198 | } |
| 199 | |
| 200 | sub print_msvs_productdir() |
| 201 | { |
| 202 | my $ver = find_msvs(); |
| 203 | print cygpath ($ver->{'product_dir'}, 'w', $output_format); |
| 204 | } |
| 205 | |
| 206 | sub print_csc_compiler_dir() |
| 207 | { |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 208 | my $dir = cygpath (reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/InstallRoot"), 'w', $output_format); |
| Tor Lillqvist | 5e9e4c5 | 2011-03-15 11:29:49 +0200 | [diff] [blame] | 209 | my $csc_exe = `/bin/find "$dir" -iname csc.exe | grep "v3\.5\." | head -n 1` || |
| 210 | `/bin/find "$dir" -iname csc.exe | grep "v4\." | head -n 1` || |
| 211 | `/bin/find "$dir" -iname csc.exe | grep "v2\." | head -n 1`; |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 212 | print `dirname $csc_exe`; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 213 | } |
| 214 | |
| 215 | sub print_dotnetsdk_dir() |
| 216 | { |
| Rüdiger Timm | 557681e | 2008-09-05 13:14:13 +0000 | [diff] [blame] | 217 | my $dir = |
| 218 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/sdkInstallRootv1.1") || |
| 219 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/sdkInstallRootv2.0"); |
| Jesús Corrius | c87a875 | 2010-10-15 23:47:37 +0200 | [diff] [blame] | 220 | if ($dir) { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 221 | print cygpath ($dir, 'w', $output_format); |
| Jesús Corrius | c87a875 | 2010-10-15 23:47:37 +0200 | [diff] [blame] | 222 | } |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 223 | } |
| 224 | |
| 225 | sub print_jdk_dir() |
| 226 | { |
| Kurt Zenker | 7eb6720 | 2007-12-12 12:24:57 +0000 | [diff] [blame] | 227 | my $dir = |
| Caolán McNamara | 32781c2d | 2012-03-01 16:37:08 +0000 | [diff] [blame] | 228 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java\ Development\ Kit/1.7/JavaHome") || |
| 229 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java\ Development\ Kit/1.6/JavaHome") || |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 230 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java\ Development\ Kit/1.5/JavaHome") || |
| 231 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java\ Development\ Kit/1.4/JavaHome") || |
| 232 | reg_get_value ("HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java\ Development\ Kit/1.3/JavaHome"); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 233 | print cygpath($dir, 'w', $output_format); |
| 234 | } |
| 235 | |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 236 | sub copy_dll($$$) |
| 237 | { |
| 238 | my ($src, $fname, $dest) = @_; |
| 239 | |
| 240 | -f "$src/$fname" || die "can't find $src"; |
| 241 | -d $dest || die "no directory $dest"; |
| 242 | |
| Caolán McNamara | a910204 | 2011-11-23 10:09:22 +0000 | [diff] [blame] | 243 | print STDERR "Copying $src/$fname to $dest\n"; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 244 | copy ("$src/$fname", $dest) || die "copy failed: $!"; |
| 245 | chmod (0755, "$dest/$fname") || die "failed to set dll executable: $!"; |
| 246 | } |
| 247 | |
| 248 | sub msvc_find_version($) |
| 249 | { |
| 250 | my $checkpath = shift; |
| 251 | my $ver = find_msvc(); |
| 252 | my $srcdir = (cygpath ($ver->{'product_dir'}, 'w', 'u') . '/' . |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 253 | $ver->{$checkpath}); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 254 | -d $srcdir && return $ver; |
| 255 | $ver = find_msvs(); |
| 256 | $srcdir = (cygpath ($ver->{'product_dir'}, 'w', 'u') . '/' . |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 257 | $ver->{$checkpath}); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 258 | -d $srcdir && return $ver; |
| Rüdiger Timm | 9eb4ff0 | 2008-07-31 17:36:04 +0000 | [diff] [blame] | 259 | return undef; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 260 | } |
| 261 | |
| 262 | sub msvc_copy_dlls($) |
| 263 | { |
| 264 | my $dest = shift; |
| 265 | my $ver = msvc_find_version('dll_path'); |
| 266 | defined $ver || return; |
| 267 | my $srcdir = (cygpath ($ver->{'product_dir'}, 'w', 'u') . '/' . |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 268 | $ver->{'dll_path'}); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 269 | |
| 270 | copy_dll ($srcdir, "msvcp" . $ver->{'dll_suffix'} . ".dll", |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 271 | $dest . $ver->{'dll_suffix'}); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 272 | copy_dll ($srcdir, "msvcr" . $ver->{'dll_suffix'} . ".dll", |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 273 | $dest . $ver->{'dll_suffix'}); |
| Jesús Corrius | f068790 | 2010-10-15 01:36:09 +0200 | [diff] [blame] | 274 | if ($ver->{'dll_suffix'} == 90) { |
| Rüdiger Timm | 9eb4ff0 | 2008-07-31 17:36:04 +0000 | [diff] [blame] | 275 | copy_dll ($srcdir, "msvcm" . $ver->{'dll_suffix'} . ".dll", |
| 276 | $dest . $ver->{'dll_suffix'}); |
| 277 | copy_dll ($srcdir, "Microsoft.VC90.CRT.manifest", $dest . $ver->{'dll_suffix'}); |
| 278 | } |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 279 | } |
| 280 | |
| Jan Holesovsky | 41e995e | 2011-11-16 20:59:16 +0100 | [diff] [blame] | 281 | sub msvc_copy_msms($$) |
| Andras Timar | b667ca5 | 2011-10-21 10:13:48 +0200 | [diff] [blame] | 282 | { |
| Jan Holesovsky | 41e995e | 2011-11-16 20:59:16 +0100 | [diff] [blame] | 283 | # $postfix is empty for x86, and '_x64' for x64 |
| 284 | my ($dest, $postfix) = @_; |
| Andras Timar | b667ca5 | 2011-10-21 10:13:48 +0200 | [diff] [blame] | 285 | my $common_files_path = $ENV{"CommonProgramFiles(x86)"}; |
| 286 | if (!defined $common_files_path) { |
| 287 | $common_files_path = $ENV{CommonProgramFiles}; |
| Caolán McNamara | a910204 | 2011-11-23 10:09:22 +0000 | [diff] [blame] | 288 | if (!defined $common_files_path) { |
| 289 | $common_files_path = "C:\\Program Files\\Common Files"; |
| 290 | } |
| Andras Timar | b667ca5 | 2011-10-21 10:13:48 +0200 | [diff] [blame] | 291 | } |
| Caolán McNamara | a910204 | 2011-11-23 10:09:22 +0000 | [diff] [blame] | 292 | |
| 293 | defined $common_files_path || die "Windows CommonProgramFiles not found"; |
| 294 | |
| Andras Timar | b667ca5 | 2011-10-21 10:13:48 +0200 | [diff] [blame] | 295 | my $msm_path = (cygpath $common_files_path . "\\Merge Modules", 'w', $output_format); |
| Jan Holesovsky | 41e995e | 2011-11-16 20:59:16 +0100 | [diff] [blame] | 296 | foreach $fname ("Microsoft_VC90_CRT_x86$postfix.msm", "policy_9_0_Microsoft_VC90_CRT_x86$postfix.msm") { |
| Caolán McNamara | a910204 | 2011-11-23 10:09:22 +0000 | [diff] [blame] | 297 | print STDERR "Copying $msm_path/$fname to $dest\n"; |
| Andras Timar | b667ca5 | 2011-10-21 10:13:48 +0200 | [diff] [blame] | 298 | copy ("$msm_path/$fname", $dest) || die "copy failed: $!"; |
| 299 | } |
| 300 | } |
| 301 | |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 302 | if (!@ARGV) { |
| 303 | print_syntax(); |
| 304 | exit 1; |
| 305 | } |
| 306 | |
| 307 | my @commands = (); |
| 308 | my $opt; |
| 309 | while (@ARGV) { |
| 310 | $opt = shift @ARGV; |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 311 | |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 312 | if ($opt eq '-w' || $opt eq '-u') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 313 | $output_format = substr($opt, 1, 1); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 314 | } else { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 315 | push @commands, $opt; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 316 | } |
| 317 | } |
| 318 | |
| 319 | while (@commands) { |
| 320 | $opt = shift @commands; |
| 321 | |
| 322 | if (0) { |
| 323 | } elsif ($opt eq '--msvc-ver') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 324 | print_msvc_ver(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 325 | } elsif ($opt eq '--msvc-copy-dlls') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 326 | my $dest = shift @commands; |
| 327 | defined $dest || die "copy-dlls requires a destination directory"; |
| 328 | msvc_copy_dlls( $dest ); |
| Andras Timar | b667ca5 | 2011-10-21 10:13:48 +0200 | [diff] [blame] | 329 | } elsif ($opt eq '--msvc-copy-msms') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 330 | my $dest = shift @commands; |
| 331 | defined $dest || die "copy-msms requires a destination directory"; |
| 332 | msvc_copy_msms( $dest, '' ); |
| Jan Holesovsky | 41e995e | 2011-11-16 20:59:16 +0100 | [diff] [blame] | 333 | } elsif ($opt eq '--msvc-copy-msms-64') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 334 | my $dest = shift @commands; |
| 335 | defined $dest || die "copy-msms-64 requires a destination directory"; |
| 336 | msvc_copy_msms( $dest, '_x64' ); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 337 | } elsif ($opt eq '--msvs-productdir') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 338 | print_msvs_productdir(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 339 | } elsif ($opt eq '--msvc-productdir') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 340 | print_msvc_product_dir(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 341 | } elsif ($opt eq '--dotnetsdk-dir') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 342 | print_dotnetsdk_dir(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 343 | } elsif ($opt eq '--csc-compilerdir') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 344 | print_csc_compiler_dir(); |
| Tor Lillqvist | 699d119 | 2011-05-16 15:52:26 +0300 | [diff] [blame] | 345 | } elsif ($opt eq '--windows-sdk-home') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 346 | print_windows_sdk_home(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 347 | } elsif ($opt eq '--jdk-home') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 348 | print_jdk_dir(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 349 | } elsif ($opt eq '--help' || $opt eq '/?') { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 350 | print_syntax(); |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 351 | } else { |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 352 | print "Unknown option '$opt'\n"; |
| 353 | print_syntax(); |
| 354 | exit 1; |
| Rüdiger Timm | e35fbf7 | 2006-05-05 07:11:16 +0000 | [diff] [blame] | 355 | } |
| 356 | } |
| 357 | |
| Tor Lillqvist | dcc9096 | 2012-03-09 10:35:20 +0200 | [diff] [blame] | 358 | # vim:set shiftwidth=4 softtabstop=4 expandtab: |