contrib / buildsystems / Generators / Vcproj.pmon commit Merge branch 'maint' (6e4ece6)
   1package Generators::Vcproj;
   2require Exporter;
   3
   4use strict;
   5use vars qw($VERSION);
   6
   7our $VERSION = '1.00';
   8our(@ISA, @EXPORT, @EXPORT_OK, @AVAILABLE);
   9@ISA = qw(Exporter);
  10
  11BEGIN {
  12    push @EXPORT_OK, qw(generate);
  13}
  14
  15my $guid_index = 0;
  16my @GUIDS = (
  17    "{E07B9989-2BF7-4F21-8918-BE22BA467AC3}",
  18    "{278FFB51-0296-4A44-A81A-22B87B7C3592}",
  19    "{7346A2C4-F0FD-444F-9EBE-1AF23B2B5650}",
  20    "{67F421AC-EB34-4D49-820B-3196807B423F}",
  21    "{385DCFE1-CC8C-4211-A451-80FCFC31CA51}",
  22    "{97CC46C5-D2CC-4D26-B634-E75792B79916}",
  23    "{C7CE21FE-6EF8-4012-A5C7-A22BCEDFBA11}",
  24    "{51575134-3FDF-42D1-BABD-3FB12669C6C9}",
  25    "{0AE195E4-9823-4B87-8E6F-20C5614AF2FF}",
  26    "{4B918255-67CA-43BB-A46C-26704B666E6B}",
  27    "{18CCFEEF-C8EE-4CC1-A265-26F95C9F4649}",
  28    "{5D5D90FA-01B7-4973-AFE5-CA88C53AC197}",
  29    "{1F054320-036D-49E1-B384-FB5DF0BC8AC0}",
  30    "{7CED65EE-F2D9-4171-825B-C7D561FE5786}",
  31    "{8D341679-0F07-4664-9A56-3BA0DE88B9BC}",
  32    "{C189FEDC-2957-4BD7-9FA4-7622241EA145}",
  33    "{66844203-1B9F-4C53-9274-164FFF95B847}",
  34    "{E4FEA145-DECC-440D-AEEA-598CF381FD43}",
  35    "{73300A8E-C8AC-41B0-B555-4F596B681BA7}",
  36    "{873FDEB1-D01D-40BF-A1BF-8BBC58EC0F51}",
  37    "{7922C8BE-76C5-4AC6-8BF7-885C0F93B782}",
  38    "{E245D370-308B-4A49-BFC1-1E527827975F}",
  39    "{F6FA957B-66FC-4ED7-B260-E59BBE4FE813}",
  40    "{E6055070-0198-431A-BC49-8DB6CEE770AE}",
  41    "{54159234-C3EB-43DA-906B-CE5DA5C74654}",
  42    "{594CFC35-0B60-46F6-B8EF-9983ACC1187D}",
  43    "{D93FCAB7-1F01-48D2-B832-F761B83231A5}",
  44    "{DBA5E6AC-E7BE-42D3-8703-4E787141526E}",
  45    "{6171953F-DD26-44C7-A3BE-CC45F86FC11F}",
  46    "{9E19DDBE-F5E4-4A26-A2FE-0616E04879B8}",
  47    "{AE81A615-99E3-4885-9CE0-D9CAA193E867}",
  48    "{FBF4067E-1855-4F6C-8BCD-4D62E801A04D}",
  49    "{17007948-6593-4AEB-8106-F7884B4F2C19}",
  50    "{199D4C8D-8639-4DA6-82EF-08668C35DEE0}",
  51    "{E085E50E-C140-4CF3-BE4B-094B14F0DDD6}",
  52    "{00785268-A9CC-4E40-AC29-BAC0019159CE}",
  53    "{4C06F56A-DCDB-46A6-B67C-02339935CF12}",
  54    "{3A62D3FD-519E-4EC9-8171-D2C1BFEA022F}",
  55    "{3A62D3FD-519E-4EC9-8171-D2C1BFEA022F}",
  56    "{9392EB58-D7BA-410B-B1F0-B2FAA6BC89A7}",
  57    "{2ACAB2D5-E0CE-4027-BCA0-D78B2D7A6C66}",
  58    "{86E216C3-43CE-481A-BCB2-BE5E62850635}",
  59    "{FB631291-7923-4B91-9A57-7B18FDBB7A42}",
  60    "{0A176EC9-E934-45B8-B87F-16C7F4C80039}",
  61    "{DF55CA80-46E8-4C53-B65B-4990A23DD444}",
  62    "{3A0F9895-55D2-4710-BE5E-AD7498B5BF44}",
  63    "{294BDC5A-F448-48B6-8110-DD0A81820F8C}",
  64    "{4B9F66E9-FAC9-47AB-B1EF-C16756FBFD06}",
  65    "{72EA49C6-2806-48BD-B81B-D4905102E19C}",
  66    "{5728EB7E-8929-486C-8CD5-3238D060E768}"
  67);
  68
  69sub generate {
  70    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;
  71    my @libs = @{$build_structure{"LIBS"}};
  72    foreach (@libs) {
  73        createLibProject($_, $git_dir, $out_dir, $rel_dir, \%build_structure);
  74    }
  75
  76    my @apps = @{$build_structure{"APPS"}};
  77    foreach (@apps) {
  78        createAppProject($_, $git_dir, $out_dir, $rel_dir, \%build_structure);
  79    }
  80
  81    createGlueProject($git_dir, $out_dir, $rel_dir, %build_structure);
  82    return 0;
  83}
  84
  85sub createLibProject {
  86    my ($libname, $git_dir, $out_dir, $rel_dir, $build_structure) = @_;
  87    print "Generate $libname vcproj lib project\n";
  88    $rel_dir = "..\\$rel_dir";
  89    $rel_dir =~ s/\//\\/g;
  90
  91    my $target = $libname;
  92    $target =~ s/\//_/g;
  93    $target =~ s/\.a//;
  94
  95    my $uuid = $GUIDS[$guid_index];
  96    $$build_structure{"LIBS_${target}_GUID"} = $uuid;
  97    $guid_index += 1;
  98
  99    my @srcs = sort(map("$rel_dir\\$_", @{$$build_structure{"LIBS_${libname}_SOURCES"}}));
 100    my @sources;
 101    foreach (@srcs) {
 102        $_ =~ s/\//\\/g;
 103        push(@sources, $_);
 104    }
 105    my $defines = join(",", sort(@{$$build_structure{"LIBS_${libname}_DEFINES"}}));
 106    my $includes= join(";", sort(map(""$rel_dir\\$_"", @{$$build_structure{"LIBS_${libname}_INCLUDES"}})));
 107    my $cflags  = join(" ", sort(@{$$build_structure{"LIBS_${libname}_CFLAGS"}}));
 108    $cflags =~ s/\"/"/g;
 109
 110    my $cflags_debug = $cflags;
 111    $cflags_debug =~ s/-MT/-MTd/;
 112    $cflags_debug =~ s/-O.//;
 113
 114    my $cflags_release = $cflags;
 115    $cflags_release =~ s/-MTd/-MT/;
 116
 117    my @tmp  = @{$$build_structure{"LIBS_${libname}_LFLAGS"}};
 118    my @tmp2 = ();
 119    foreach (@tmp) {
 120        if (/^-LTCG/) {
 121        } elsif (/^-L/) {
 122            $_ =~ s/^-L/-LIBPATH:$rel_dir\//;
 123        }
 124        push(@tmp2, $_);
 125    }
 126    my $lflags = join(" ", sort(@tmp));
 127
 128    $defines =~ s/-D//g;
 129    $defines =~ s/\"/\\"/g;
 130    $defines =~ s/\'//g;
 131    $includes =~ s/-I//g;
 132    mkdir "$target" || die "Could not create the directory $target for lib project!\n";
 133    open F, ">$target/$target.vcproj" || die "Could not open $target/$target.pro for writing!\n";
 134    print F << "EOM";
 135<?xml version="1.0" encoding = "Windows-1252"?>
 136<VisualStudioProject
 137        ProjectType="Visual C++"
 138        Version="9,00"
 139        Name="$target"
 140        ProjectGUID="$uuid">
 141        <Platforms>
 142                <Platform
 143                        Name="Win32"/>
 144        </Platforms>
 145        <ToolFiles>
 146        </ToolFiles>
 147        <Configurations>
 148                <Configuration
 149                        Name="Debug|Win32"
 150                        OutputDirectory="$rel_dir"
 151                        ConfigurationType="4"
 152                        CharacterSet="0"
 153                        IntermediateDirectory="\$(ProjectDir)\$(ConfigurationName)"
 154                        >
 155                        <Tool
 156                                Name="VCPreBuildEventTool"
 157                        />
 158                        <Tool
 159                                Name="VCCustomBuildTool"
 160                        />
 161                        <Tool
 162                                Name="VCXMLDataGeneratorTool"
 163                        />
 164                        <Tool
 165                                Name="VCWebServiceProxyGeneratorTool"
 166                        />
 167                        <Tool
 168                                Name="VCMIDLTool"
 169                        />
 170                        <Tool
 171                                Name="VCCLCompilerTool"
 172                                AdditionalOptions="$cflags_debug"
 173                                Optimization="0"
 174                                InlineFunctionExpansion="1"
 175                                AdditionalIncludeDirectories="$includes"
 176                                PreprocessorDefinitions="UNICODE,WIN32,_DEBUG,$defines"
 177                                MinimalRebuild="true"
 178                                RuntimeLibrary="1"
 179                                UsePrecompiledHeader="0"
 180                                WarningLevel="3"
 181                                DebugInformationFormat="3"
 182                        />
 183                        <Tool
 184                                Name="VCManagedResourceCompilerTool"
 185                        />
 186                        <Tool
 187                                Name="VCResourceCompilerTool"
 188                        />
 189                        <Tool
 190                                Name="VCPreLinkEventTool"
 191                        />
 192                        <Tool
 193                                Name="VCLibrarianTool"
 194                                SuppressStartupBanner="true"
 195                        />
 196                        <Tool
 197                                Name="VCALinkTool"
 198                        />
 199                        <Tool
 200                                Name="VCXDCMakeTool"
 201                        />
 202                        <Tool
 203                                Name="VCBscMakeTool"
 204                        />
 205                        <Tool
 206                                Name="VCFxCopTool"
 207                        />
 208                        <Tool
 209                                Name="VCPostBuildEventTool"
 210                        />
 211                </Configuration>
 212                <Configuration
 213                        Name="Release|Win32"
 214                        OutputDirectory="$rel_dir"
 215                        ConfigurationType="4"
 216                        CharacterSet="0"
 217                        WholeProgramOptimization="1"
 218                        IntermediateDirectory="\$(ProjectDir)\$(ConfigurationName)"
 219                        >
 220                        <Tool
 221                                Name="VCPreBuildEventTool"
 222                        />
 223                        <Tool
 224                                Name="VCCustomBuildTool"
 225                        />
 226                        <Tool
 227                                Name="VCXMLDataGeneratorTool"
 228                        />
 229                        <Tool
 230                                Name="VCWebServiceProxyGeneratorTool"
 231                        />
 232                        <Tool
 233                                Name="VCMIDLTool"
 234                        />
 235                        <Tool
 236                                Name="VCCLCompilerTool"
 237                                AdditionalOptions="$cflags_release"
 238                                Optimization="2"
 239                                InlineFunctionExpansion="1"
 240                                EnableIntrinsicFunctions="true"
 241                                AdditionalIncludeDirectories="$includes"
 242                                PreprocessorDefinitions="UNICODE,WIN32,NDEBUG,$defines"
 243                                RuntimeLibrary="0"
 244                                EnableFunctionLevelLinking="true"
 245                                UsePrecompiledHeader="0"
 246                                WarningLevel="3"
 247                                DebugInformationFormat="3"
 248                        />
 249                        <Tool
 250                                Name="VCManagedResourceCompilerTool"
 251                        />
 252                        <Tool
 253                                Name="VCResourceCompilerTool"
 254                        />
 255                        <Tool
 256                                Name="VCPreLinkEventTool"
 257                        />
 258                        <Tool
 259                                Name="VCLibrarianTool"
 260                                SuppressStartupBanner="true"
 261                        />
 262                        <Tool
 263                                Name="VCALinkTool"
 264                        />
 265                        <Tool
 266                                Name="VCXDCMakeTool"
 267                        />
 268                        <Tool
 269                                Name="VCBscMakeTool"
 270                        />
 271                        <Tool
 272                                Name="VCFxCopTool"
 273                        />
 274                        <Tool
 275                                Name="VCPostBuildEventTool"
 276                        />
 277                </Configuration>
 278        </Configurations>
 279        <Files>
 280                <Filter
 281                        Name="Source Files"
 282                        Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 283                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 284EOM
 285    foreach(@sources) {
 286        print F << "EOM";
 287                        <File
 288                                RelativePath="$_"/>
 289EOM
 290    }
 291    print F << "EOM";
 292                </Filter>
 293        </Files>
 294        <Globals>
 295        </Globals>
 296</VisualStudioProject>
 297EOM
 298    close F;
 299}
 300
 301sub createAppProject {
 302    my ($appname, $git_dir, $out_dir, $rel_dir, $build_structure) = @_;
 303    print "Generate $appname vcproj app project\n";
 304    $rel_dir = "..\\$rel_dir";
 305    $rel_dir =~ s/\//\\/g;
 306
 307    my $target = $appname;
 308    $target =~ s/\//_/g;
 309    $target =~ s/\.exe//;
 310
 311    my $uuid = $GUIDS[$guid_index];
 312    $$build_structure{"APPS_${target}_GUID"} = $uuid;
 313    $guid_index += 1;
 314
 315    my @srcs = sort(map("$rel_dir\\$_", @{$$build_structure{"APPS_${appname}_SOURCES"}}));
 316    my @sources;
 317    foreach (@srcs) {
 318        $_ =~ s/\//\\/g;
 319        push(@sources, $_);
 320    }
 321    my $defines = join(",", sort(@{$$build_structure{"APPS_${appname}_DEFINES"}}));
 322    my $includes= join(";", sort(map("&quot;$rel_dir\\$_&quot;", @{$$build_structure{"APPS_${appname}_INCLUDES"}})));
 323    my $cflags  = join(" ", sort(@{$$build_structure{"APPS_${appname}_CFLAGS"}}));
 324    $cflags =~ s/\"/&quot;/g;
 325
 326    my $cflags_debug = $cflags;
 327    $cflags_debug =~ s/-MT/-MTd/;
 328    $cflags_debug =~ s/-O.//;
 329
 330    my $cflags_release = $cflags;
 331    $cflags_release =~ s/-MTd/-MT/;
 332
 333    my $libs;
 334    foreach (sort(@{$$build_structure{"APPS_${appname}_LIBS"}})) {
 335        $_ =~ s/\//_/g;
 336        $libs .= " $_";
 337    }
 338    my @tmp  = @{$$build_structure{"APPS_${appname}_LFLAGS"}};
 339    my @tmp2 = ();
 340    foreach (@tmp) {
 341        if (/^-LTCG/) {
 342        } elsif (/^-L/) {
 343            $_ =~ s/^-L/-LIBPATH:$rel_dir\//;
 344        }
 345        push(@tmp2, $_);
 346    }
 347    my $lflags = join(" ", sort(@tmp)) . " -LIBPATH:$rel_dir";
 348
 349    $defines =~ s/-D//g;
 350    $defines =~ s/\"/\\&quot;/g;
 351    $defines =~ s/\'//g;
 352    $defines =~ s/\\\\/\\/g;
 353    $includes =~ s/-I//g;
 354    mkdir "$target" || die "Could not create the directory $target for lib project!\n";
 355    open F, ">$target/$target.vcproj" || die "Could not open $target/$target.pro for writing!\n";
 356    print F << "EOM";
 357<?xml version="1.0" encoding = "Windows-1252"?>
 358<VisualStudioProject
 359        ProjectType="Visual C++"
 360        Version="9,00"
 361        Name="$target"
 362        ProjectGUID="$uuid">
 363        <Platforms>
 364                <Platform
 365                        Name="Win32"/>
 366        </Platforms>
 367        <ToolFiles>
 368        </ToolFiles>
 369        <Configurations>
 370                <Configuration
 371                        Name="Debug|Win32"
 372                        OutputDirectory="$rel_dir"
 373                        ConfigurationType="1"
 374                        CharacterSet="0"
 375                        IntermediateDirectory="\$(ProjectDir)\$(ConfigurationName)"
 376                        >
 377                        <Tool
 378                                Name="VCPreBuildEventTool"
 379                        />
 380                        <Tool
 381                                Name="VCCustomBuildTool"
 382                        />
 383                        <Tool
 384                                Name="VCXMLDataGeneratorTool"
 385                        />
 386                        <Tool
 387                                Name="VCWebServiceProxyGeneratorTool"
 388                        />
 389                        <Tool
 390                                Name="VCMIDLTool"
 391                        />
 392                        <Tool
 393                                Name="VCCLCompilerTool"
 394                                AdditionalOptions="$cflags_debug"
 395                                Optimization="0"
 396                                InlineFunctionExpansion="1"
 397                                AdditionalIncludeDirectories="$includes"
 398                                PreprocessorDefinitions="UNICODE,WIN32,_DEBUG,$defines"
 399                                MinimalRebuild="true"
 400                                RuntimeLibrary="1"
 401                                UsePrecompiledHeader="0"
 402                                WarningLevel="3"
 403                                DebugInformationFormat="3"
 404                        />
 405                        <Tool
 406                                Name="VCManagedResourceCompilerTool"
 407                        />
 408                        <Tool
 409                                Name="VCResourceCompilerTool"
 410                        />
 411                        <Tool
 412                                Name="VCPreLinkEventTool"
 413                        />
 414                        <Tool
 415                                Name="VCLinkerTool"
 416                                AdditionalDependencies="$libs"
 417                                AdditionalOptions="$lflags"
 418                                LinkIncremental="2"
 419                                GenerateDebugInformation="true"
 420                                SubSystem="1"
 421                                TargetMachine="1"
 422                        />
 423                        <Tool
 424                                Name="VCALinkTool"
 425                        />
 426                        <Tool
 427                                Name="VCXDCMakeTool"
 428                        />
 429                        <Tool
 430                                Name="VCBscMakeTool"
 431                        />
 432                        <Tool
 433                                Name="VCFxCopTool"
 434                        />
 435                        <Tool
 436                                Name="VCPostBuildEventTool"
 437                        />
 438                </Configuration>
 439                <Configuration
 440                        Name="Release|Win32"
 441                        OutputDirectory="$rel_dir"
 442                        ConfigurationType="1"
 443                        CharacterSet="0"
 444                        WholeProgramOptimization="1"
 445                        IntermediateDirectory="\$(ProjectDir)\$(ConfigurationName)"
 446                        >
 447                        <Tool
 448                                Name="VCPreBuildEventTool"
 449                        />
 450                        <Tool
 451                                Name="VCCustomBuildTool"
 452                        />
 453                        <Tool
 454                                Name="VCXMLDataGeneratorTool"
 455                        />
 456                        <Tool
 457                                Name="VCWebServiceProxyGeneratorTool"
 458                        />
 459                        <Tool
 460                                Name="VCMIDLTool"
 461                        />
 462                        <Tool
 463                                Name="VCCLCompilerTool"
 464                                AdditionalOptions="$cflags_release"
 465                                Optimization="2"
 466                                InlineFunctionExpansion="1"
 467                                EnableIntrinsicFunctions="true"
 468                                AdditionalIncludeDirectories="$includes"
 469                                PreprocessorDefinitions="UNICODE,WIN32,NDEBUG,$defines"
 470                                RuntimeLibrary="0"
 471                                EnableFunctionLevelLinking="true"
 472                                UsePrecompiledHeader="0"
 473                                WarningLevel="3"
 474                                DebugInformationFormat="3"
 475                        />
 476                        <Tool
 477                                Name="VCManagedResourceCompilerTool"
 478                        />
 479                        <Tool
 480                                Name="VCResourceCompilerTool"
 481                        />
 482                        <Tool
 483                                Name="VCPreLinkEventTool"
 484                        />
 485                        <Tool
 486                                Name="VCLinkerTool"
 487                                AdditionalDependencies="$libs"
 488                                AdditionalOptions="$lflags"
 489                                LinkIncremental="1"
 490                                GenerateDebugInformation="true"
 491                                SubSystem="1"
 492                                TargetMachine="1"
 493                                OptimizeReferences="2"
 494                                EnableCOMDATFolding="2"
 495                        />
 496                        <Tool
 497                                Name="VCALinkTool"
 498                        />
 499                        <Tool
 500                                Name="VCXDCMakeTool"
 501                        />
 502                        <Tool
 503                                Name="VCBscMakeTool"
 504                        />
 505                        <Tool
 506                                Name="VCFxCopTool"
 507                        />
 508                        <Tool
 509                                Name="VCPostBuildEventTool"
 510                        />
 511                </Configuration>
 512        </Configurations>
 513        <Files>
 514                <Filter
 515                        Name="Source Files"
 516                        Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 517                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 518EOM
 519    foreach(@sources) {
 520        print F << "EOM";
 521                        <File
 522                                RelativePath="$_"/>
 523EOM
 524    }
 525    print F << "EOM";
 526                </Filter>
 527        </Files>
 528        <Globals>
 529        </Globals>
 530</VisualStudioProject>
 531EOM
 532    close F;
 533}
 534
 535sub createGlueProject {
 536    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;
 537    print "Generate solutions file\n";
 538    $rel_dir = "..\\$rel_dir";
 539    $rel_dir =~ s/\//\\/g;
 540    my $SLN_HEAD = "Microsoft Visual Studio Solution File, Format Version 10.00\n";
 541    my $SLN_PRE  = "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = ";
 542    my $SLN_POST = "\nEndProject\n";
 543
 544    my @libs = @{$build_structure{"LIBS"}};
 545    my @tmp;
 546    foreach (@libs) {
 547        $_ =~ s/\//_/g;
 548        $_ =~ s/\.a//;
 549        push(@tmp, $_);
 550    }
 551    @libs = @tmp;
 552
 553    my @apps = @{$build_structure{"APPS"}};
 554    @tmp = ();
 555    foreach (@apps) {
 556        $_ =~ s/\//_/g;
 557        $_ =~ s/\.exe//;
 558        push(@tmp, $_);
 559    }
 560    @apps = @tmp;
 561
 562    open F, ">git.sln" || die "Could not open git.sln for writing!\n";
 563    print F "$SLN_HEAD";
 564    foreach (@libs) {
 565        my $libname = $_;
 566        my $uuid = $build_structure{"LIBS_${libname}_GUID"};
 567        print F "$SLN_PRE";
 568        print F "\"${libname}\", \"${libname}\\${libname}.vcproj\", \"${uuid}\"";
 569        print F "$SLN_POST";
 570    }
 571    foreach (@apps) {
 572        my $appname = $_;
 573        my $uuid = $build_structure{"APPS_${appname}_GUID"};
 574        print F "$SLN_PRE";
 575        print F "\"${appname}\", \"${appname}\\${appname}.vcproj\", \"${uuid}\"";
 576        print F "$SLN_POST";
 577    }
 578
 579    print F << "EOM";
 580Global
 581        GlobalSection(SolutionConfiguration) = preSolution
 582                ConfigName.0 = Debug|Win32
 583                ConfigName.1 = Release|Win32
 584        EndGlobalSection
 585        GlobalSection(ProjectDependencies) = postSolution
 586EOM
 587    foreach (@{$build_structure{"APPS"}}) {
 588        my $appname = $_;
 589        my $appname_clean = $_;
 590        $appname_clean =~ s/\//_/g;
 591        $appname_clean =~ s/\.exe//;
 592
 593        my $uuid = $build_structure{"APPS_${appname_clean}_GUID"};
 594        my $dep_index = 0;
 595        foreach(@{$build_structure{"APPS_${appname}_LIBS"}}) {
 596            my $libname = $_;
 597            $libname =~ s/\//_/g;
 598            $libname =~ s/\.(a|lib)//;
 599            my $libuuid = $build_structure{"LIBS_${libname}_GUID"};
 600            if (defined $libuuid) {
 601                print F "\t\t${uuid}.${dep_index} = ${libuuid}\n";
 602                $dep_index += 1;
 603            }
 604        }
 605    }
 606
 607    print F << "EOM";
 608        EndGlobalSection
 609        GlobalSection(ProjectConfiguration) = postSolution
 610EOM
 611    foreach (@libs) {
 612        my $libname = $_;
 613        my $uuid = $build_structure{"LIBS_${libname}_GUID"};
 614        print F "\t\t${uuid}.Debug|Win32.ActiveCfg = Debug|Win32\n";
 615        print F "\t\t${uuid}.Debug|Win32.Build.0 = Debug|Win32\n";
 616        print F "\t\t${uuid}.Release|Win32.ActiveCfg = Release|Win32\n";
 617        print F "\t\t${uuid}.Release|Win32.Build.0 = Release|Win32\n";
 618    }
 619    foreach (@apps) {
 620        my $appname = $_;
 621        my $uuid = $build_structure{"APPS_${appname}_GUID"};
 622        print F "\t\t${uuid}.Debug|Win32.ActiveCfg = Debug|Win32\n";
 623        print F "\t\t${uuid}.Debug|Win32.Build.0 = Debug|Win32\n";
 624        print F "\t\t${uuid}.Release|Win32.ActiveCfg = Release|Win32\n";
 625        print F "\t\t${uuid}.Release|Win32.Build.0 = Release|Win32\n";
 626    }
 627
 628    print F << "EOM";
 629        EndGlobalSection
 630        GlobalSection(ExtensibilityGlobals) = postSolution
 631        EndGlobalSection
 632        GlobalSection(ExtensibilityAddIns) = postSolution
 633        EndGlobalSection
 634EndGlobal
 635EOM
 636    close F;
 637}
 638
 6391;