{"thread":{"id":"63395","subject":"[PATCH 0/3] Some CI/buildsystems cleanup","startedAt":"2025-05-05T07:39:54Z","lastAt":"2025-06-02T15:04:22Z","messageCount":10,"participants":["Johannes Schindelin via GitGitGadget","Patrick Steinhardt","Johannes Schindelin","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"517217","messageId":"pull.1916.git.1746430790.gitgitgadget@gmail.com","threadId":"63395","inReplyTo":null,"subject":"[PATCH 0/3] Some CI/buildsystems cleanup","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2025-05-05T07:39:47Z","receivedAt":"2025-05-05T07:39:54Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"This patch series drops a couple of no-longer-used parts of Git's code base.\n\nJohannes Schindelin (3):\n  ci: stop linking the `prove` cache\n  contrib/buildsystems: drop support for building .vcproj/.vcxproj files\n  config.mak.uname: drop the `vcxproj` target\n\n ci/run-build-and-tests.sh                  |   5 -\n ci/run-test-slice.sh                       |   5 -\n config.mak.uname                           |  76 ---\n contrib/buildsystems/Generators.pm         |  42 --\n contrib/buildsystems/Generators/QMake.pm   | 189 -------\n contrib/buildsystems/Generators/Vcproj.pm  | 579 ---------------------\n contrib/buildsystems/Generators/Vcxproj.pm | 402 --------------\n contrib/buildsystems/engine.pl             | 395 --------------\n contrib/buildsystems/generate              |  29 --\n contrib/buildsystems/parse.pl              | 228 --------\n 10 files changed, 1950 deletions(-)\n delete mode 100644 contrib/buildsystems/Generators.pm\n delete mode 100644 contrib/buildsystems/Generators/QMake.pm\n delete mode 100644 contrib/buildsystems/Generators/Vcproj.pm\n delete mode 100644 contrib/buildsystems/Generators/Vcxproj.pm\n delete mode 100755 contrib/buildsystems/engine.pl\n delete mode 100755 contrib/buildsystems/generate\n delete mode 100755 contrib/buildsystems/parse.pl\n\n\nbase-commit: 6c0bd1fc70efaf053abe4e57c976afdc72d15377\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-1916%2Fdscho%2Fci-fixes-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1916/dscho/ci-fixes-v1\nPull-Request: https://github.com/gitgitgadget/git/pull/1916\n-- \ngitgitgadget\n"},{"id":"517218","messageId":"44e4012d03b40b5abe552e6ab51f1c8361af1597.1746430790.git.gitgitgadget@gmail.com","threadId":"63395","inReplyTo":"pull.1916.git.1746430790.gitgitgadget@gmail.com","subject":"[PATCH 1/3] ci: stop linking the `prove` cache","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2025-05-05T07:39:48Z","receivedAt":"2025-05-05T07:39:54Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nIt is not useful because we do not have any persisted directory anymore,\nnot since dropping our Travis CI support.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n ci/run-build-and-tests.sh | 5 -----\n ci/run-test-slice.sh      | 5 -----\n 2 files changed, 10 deletions(-)\n\ndiff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh\nindex f99b7db2ee81..4e1413d3891d 100755\n--- a/ci/run-build-and-tests.sh\n+++ b/ci/run-build-and-tests.sh\n@@ -5,11 +5,6 @@\n \n . ${0%/*}/lib.sh\n \n-case \"$CI_OS_NAME\" in\n-windows*) cmd //c mklink //j t\\\\.prove \"$(cygpath -aw \"$cache_dir/.prove\")\";;\n-*) ln -s \"$cache_dir/.prove\" t/.prove;;\n-esac\n-\n run_tests=t\n \n case \"$jobname\" in\ndiff --git a/ci/run-test-slice.sh b/ci/run-test-slice.sh\nindex e167e646f79e..0444c79c023c 100755\n--- a/ci/run-test-slice.sh\n+++ b/ci/run-test-slice.sh\n@@ -5,11 +5,6 @@\n \n . ${0%/*}/lib.sh\n \n-case \"$CI_OS_NAME\" in\n-windows*) cmd //c mklink //j t\\\\.prove \"$(cygpath -aw \"$cache_dir/.prove\")\";;\n-*) ln -s \"$cache_dir/.prove\" t/.prove;;\n-esac\n-\n group \"Run tests\" make --quiet -C t T=\"$(cd t &&\n \t./helper/test-tool path-utils slice-tests \"$1\" \"$2\" t[0-9]*.sh |\n \ttr '\\n' ' ')\" ||\n-- \ngitgitgadget\n\n"},{"id":"517219","messageId":"225eec050ebfa234a570ca00181e58aa7cb9a78d.1746430791.git.gitgitgadget@gmail.com","threadId":"63395","inReplyTo":"pull.1916.git.1746430790.gitgitgadget@gmail.com","subject":"[PATCH 3/3] config.mak.uname: drop the `vcxproj` target","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2025-05-05T07:39:50Z","receivedAt":"2025-05-05T07:39:56Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nNow that we dropped `contrib/buildsystems/generate` to generate Visual\nStudio Solution files, it is time to also drop the `vcxproj` Makefile\ntarget that depended on that script.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n config.mak.uname | 76 ------------------------------------------------\n 1 file changed, 76 deletions(-)\n\ndiff --git a/config.mak.uname b/config.mak.uname\nindex db22a8fb3113..524a7faa3098 100644\n--- a/config.mak.uname\n+++ b/config.mak.uname\n@@ -766,79 +766,3 @@ ifeq ($(uname_S),QNX)\n \tNO_STRCASESTR = YesPlease\n \tNO_STRLCPY = YesPlease\n endif\n-\n-vcxproj:\n-\t# Require clean work tree\n-\tgit update-index -q --refresh && \\\n-\tgit diff-files --quiet && \\\n-\tgit diff-index --cached --quiet HEAD --\n-\n-\t# Make .vcxproj files and add them\n-\tperl contrib/buildsystems/generate -g Vcxproj\n-\tgit add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj\n-\n-\t# Generate the LinkOrCopyBuiltins.targets and LinkOrCopyRemoteHttp.targets file\n-\t(echo '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">' && \\\n-\t echo '  <Target Name=\"CopyBuiltins_AfterBuild\" AfterTargets=\"AfterBuild\">' && \\\n-\t for name in $(BUILT_INS);\\\n-\t do \\\n-\t   echo '    <Copy SourceFiles=\"$$(OutDir)\\git.exe\" DestinationFiles=\"$$(OutDir)\\'\"$$name\"'\" SkipUnchangedFiles=\"true\" UseHardlinksIfPossible=\"true\" />'; \\\n-\t done && \\\n-\t echo '  </Target>' && \\\n-\t echo '</Project>') >git/LinkOrCopyBuiltins.targets\n-\t(echo '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">' && \\\n-\t echo '  <Target Name=\"CopyBuiltins_AfterBuild\" AfterTargets=\"AfterBuild\">' && \\\n-\t for name in $(REMOTE_CURL_ALIASES); \\\n-\t do \\\n-\t   echo '    <Copy SourceFiles=\"$$(OutDir)\\'\"$(REMOTE_CURL_PRIMARY)\"'\" DestinationFiles=\"$$(OutDir)\\'\"$$name\"'\" SkipUnchangedFiles=\"true\" UseHardlinksIfPossible=\"true\" />'; \\\n-\t done && \\\n-\t echo '  </Target>' && \\\n-\t echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets\n-\tgit add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets\n-\n-\t# Add generated headers\n-\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(GENERATED_H)\n-\tgit add -f $(GENERATED_H)\n-\n-\t# Add scripts\n-\trm -f perl/perl.mak\n-\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(SCRIPT_LIB) $(SCRIPTS)\n-\t# Strip out the sane tool path, needed only for building\n-\tsed -i '/^git_broken_path_fix \".*/d' git-sh-setup\n-\tgit add -f $(SCRIPT_LIB) $(SCRIPTS)\n-\n-\t# Add Perl module\n-\t$(MAKE) $(LIB_PERL_GEN)\n-\tgit add -f perl/build\n-\n-\t# Add bin-wrappers, for testing\n-\trm -rf bin-wrappers/\n-\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(test_bindir_programs)\n-\t# Ensure that the GIT_EXEC_PATH is a Unix-y one, and that the absolute\n-\t# path of the repository is not hard-coded (GIT_EXEC_PATH will be set\n-\t# by test-lib.sh according to the current setup)\n-\tsed -i -e 's/^\\(GIT_EXEC_PATH\\)=.*/test -n \"$${\\1##*:*}\" ||\\\n-\t\t\t\\1=\"$$(cygpath -u \"$$\\1\")\"/' \\\n-\t\t-e \"s|'$$(pwd)|\\\"\\$$GIT_EXEC_PATH\\\"'|g\" bin-wrappers/*\n-\t# Ensure that test-* helpers find the .dll files copied to top-level\n-\tsed -i 's|^PATH=.*|&:\"$$GIT_EXEC_PATH\"|' bin-wrappers/test-*\n-\t# We do not want to force hard-linking builtins\n-\tsed -i 's|\\(git\\)-\\([-a-z]*\\)\\.exe\"|\\1.exe\" \\2|g' \\\n-\t\tbin-wrappers/git-{receive-pack,upload-archive}\n-\tgit add -f $(test_bindir_programs)\n-\n-\t# Add templates\n-\t$(MAKE) -C templates\n-\tgit add -f templates/boilerplates.made templates/blt/\n-\n-\t# Add the translated messages\n-\tmake MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(MOFILES)\n-\tgit add -f $(MOFILES)\n-\n-\t# Add build options\n-\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 GIT-BUILD-OPTIONS\n-\tgit add -f GIT-BUILD-OPTIONS\n-\n-\t# Commit the whole shebang\n-\tgit commit -m \"Generate Visual Studio solution\" \\\n-\t\t-m \"Auto-generated by \\`$(MAKE)$(MAKEFLAGS) $@\\`\"\n-- \ngitgitgadget\n"},{"id":"517220","messageId":"1ec2a4bb1d58ea8cfa6abb2a0e625ef3e0db2a1f.1746430790.git.gitgitgadget@gmail.com","threadId":"63395","inReplyTo":"pull.1916.git.1746430790.gitgitgadget@gmail.com","subject":"[PATCH 2/3] contrib/buildsystems: drop support for building .vcproj/.vcxproj files","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2025-05-05T07:39:49Z","receivedAt":"2025-05-05T07:39:56Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nBefore we had CMake support, the only way to build Git in Visual Studio\nwas via this hacky `generate` script.\n\nFor a while I tried to fix whenever things got broken, in particular to\nallow building confidence in embargoed releases by running the CI builds\nin Azure Pipelines in a private Azure DevOps project. I even carried the\npatches in Git for Windows with the intention of upstreaming them,\neventually.\n\nHowever, it is a lot of work with too little benefit. CMake is much\nbetter supported by Visual Studio. So let's drop this hacky script (plus\nsupport code).\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n contrib/buildsystems/Generators.pm         |  42 --\n contrib/buildsystems/Generators/QMake.pm   | 189 -------\n contrib/buildsystems/Generators/Vcproj.pm  | 579 ---------------------\n contrib/buildsystems/Generators/Vcxproj.pm | 402 --------------\n contrib/buildsystems/engine.pl             | 395 --------------\n contrib/buildsystems/generate              |  29 --\n contrib/buildsystems/parse.pl              | 228 --------\n 7 files changed, 1864 deletions(-)\n delete mode 100644 contrib/buildsystems/Generators.pm\n delete mode 100644 contrib/buildsystems/Generators/QMake.pm\n delete mode 100644 contrib/buildsystems/Generators/Vcproj.pm\n delete mode 100644 contrib/buildsystems/Generators/Vcxproj.pm\n delete mode 100755 contrib/buildsystems/engine.pl\n delete mode 100755 contrib/buildsystems/generate\n delete mode 100755 contrib/buildsystems/parse.pl\n\ndiff --git a/contrib/buildsystems/Generators.pm b/contrib/buildsystems/Generators.pm\ndeleted file mode 100644\nindex aa4cbaa2adac..000000000000\n--- a/contrib/buildsystems/Generators.pm\n+++ /dev/null\n@@ -1,42 +0,0 @@\n-package Generators;\n-require Exporter;\n-\n-use strict;\n-use File::Basename;\n-no strict 'refs';\n-use vars qw($VERSION @AVAILABLE);\n-\n-our $VERSION = '1.00';\n-our(@ISA, @EXPORT, @EXPORT_OK, @AVAILABLE);\n-@ISA = qw(Exporter);\n-\n-BEGIN {\n-    local(*D);\n-    my $me = $INC{\"Generators.pm\"};\n-    die \"Couldn't find myself in \\@INC, which is required to load the generators!\" if (\"$me\" eq \"\");\n-    $me = dirname($me);\n-    if (opendir(D,\"$me/Generators\")) {\n-        foreach my $gen (readdir(D)) {\n-            next unless ($gen  =~ /\\.pm$/);\n-            require \"${me}/Generators/$gen\";\n-            $gen =~ s,\\.pm,,;\n-            push(@AVAILABLE, $gen);\n-        }\n-        closedir(D);\n-        my $gens = join(', ', @AVAILABLE);\n-    }\n-\n-    push @EXPORT_OK, qw(available);\n-}\n-\n-sub available {\n-    return @AVAILABLE;\n-}\n-\n-sub generate {\n-    my ($gen, $git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    return eval(\"Generators::${gen}::generate(\\$git_dir, \\$out_dir, \\$rel_dir, \\%build_structure)\") if grep(/^$gen$/, @AVAILABLE);\n-    die \"Generator \\\"${gen}\\\" is not available!\\nAvailable generators are: @AVAILABLE\\n\";\n-}\n-\n-1;\ndiff --git a/contrib/buildsystems/Generators/QMake.pm b/contrib/buildsystems/Generators/QMake.pm\ndeleted file mode 100644\nindex ff3b657e6105..000000000000\n--- a/contrib/buildsystems/Generators/QMake.pm\n+++ /dev/null\n@@ -1,189 +0,0 @@\n-package Generators::QMake;\n-require Exporter;\n-\n-use strict;\n-use vars qw($VERSION);\n-\n-our $VERSION = '1.00';\n-our(@ISA, @EXPORT, @EXPORT_OK, @AVAILABLE);\n-@ISA = qw(Exporter);\n-\n-BEGIN {\n-    push @EXPORT_OK, qw(generate);\n-}\n-\n-sub generate {\n-    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-\n-    my @libs = @{$build_structure{\"LIBS\"}};\n-    foreach (@libs) {\n-        createLibProject($_, $git_dir, $out_dir, $rel_dir, %build_structure);\n-    }\n-\n-    my @apps = @{$build_structure{\"APPS\"}};\n-    foreach (@apps) {\n-        createAppProject($_, $git_dir, $out_dir, $rel_dir, %build_structure);\n-    }\n-\n-    createGlueProject($git_dir, $out_dir, $rel_dir, %build_structure);\n-    return 0;\n-}\n-\n-sub createLibProject {\n-    my ($libname, $git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    print \"Generate $libname lib project\\n\";\n-    $rel_dir = \"../$rel_dir\";\n-\n-    my $sources = join(\" \\\\\\n\\t\", sort(map(\"$rel_dir/$_\", @{$build_structure{\"LIBS_${libname}_SOURCES\"}})));\n-    my $defines = join(\" \\\\\\n\\t\", sort(@{$build_structure{\"LIBS_${libname}_DEFINES\"}}));\n-    my $includes= join(\" \\\\\\n\\t\", sort(map(\"$rel_dir/$_\", @{$build_structure{\"LIBS_${libname}_INCLUDES\"}})));\n-    my $cflags  = join(\" \", sort(@{$build_structure{\"LIBS_${libname}_CFLAGS\"}}));\n-\n-    my $cflags_debug = $cflags;\n-    $cflags_debug =~ s/-MT/-MTd/;\n-    $cflags_debug =~ s/-O.//;\n-\n-    my $cflags_release = $cflags;\n-    $cflags_release =~ s/-MTd/-MT/;\n-\n-    my @tmp  = @{$build_structure{\"LIBS_${libname}_LFLAGS\"}};\n-    my @tmp2 = ();\n-    foreach (@tmp) {\n-        if (/^-LTCG/) {\n-        } elsif (/^-L/) {\n-            $_ =~ s/^-L/-LIBPATH:$rel_dir\\//;\n-        }\n-        push(@tmp2, $_);\n-    }\n-    my $lflags = join(\" \", sort(@tmp));\n-\n-    my $target = $libname;\n-    $target =~ s/\\//_/g;\n-    $defines =~ s/-D//g;\n-    $defines =~ s/\"/\\\\\\\\\"/g;\n-    $includes =~ s/-I//g;\n-    mkdir \"$target\" || die \"Could not create the directory $target for lib project!\\n\";\n-    open F, \">$target/$target.pro\" || die \"Could not open $target/$target.pro for writing!\\n\";\n-    print F << \"EOM\";\n-TEMPLATE = lib\n-TARGET = $target\n-DESTDIR = $rel_dir\n-\n-CONFIG -= qt\n-CONFIG += static\n-\n-QMAKE_CFLAGS =\n-QMAKE_CFLAGS_RELEASE = $cflags_release\n-QMAKE_CFLAGS_DEBUG = $cflags_debug\n-QMAKE_LIBFLAGS = $lflags\n-\n-DEFINES += \\\\\n-        $defines\n-\n-INCLUDEPATH += \\\\\n-        $includes\n-\n-SOURCES += \\\\\n-        $sources\n-EOM\n-    close F;\n-}\n-\n-sub createAppProject {\n-    my ($appname, $git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    print \"Generate $appname app project\\n\";\n-    $rel_dir = \"../$rel_dir\";\n-\n-    my $sources = join(\" \\\\\\n\\t\", sort(map(\"$rel_dir/$_\", @{$build_structure{\"APPS_${appname}_SOURCES\"}})));\n-    my $defines = join(\" \\\\\\n\\t\", sort(@{$build_structure{\"APPS_${appname}_DEFINES\"}}));\n-    my $includes= join(\" \\\\\\n\\t\", sort(map(\"$rel_dir/$_\", @{$build_structure{\"APPS_${appname}_INCLUDES\"}})));\n-    my $cflags  = join(\" \", sort(@{$build_structure{\"APPS_${appname}_CFLAGS\"}}));\n-\n-    my $cflags_debug = $cflags;\n-    $cflags_debug =~ s/-MT/-MTd/;\n-    $cflags_debug =~ s/-O.//;\n-\n-    my $cflags_release = $cflags;\n-    $cflags_release =~ s/-MTd/-MT/;\n-\n-    my $libs;\n-    foreach (sort(@{$build_structure{\"APPS_${appname}_LIBS\"}})) {\n-        $_ =~ s/\\//_/g;\n-        $libs .= \" $_\";\n-    }\n-    my @tmp  = @{$build_structure{\"APPS_${appname}_LFLAGS\"}};\n-    my @tmp2 = ();\n-    foreach (@tmp) {\n-        # next if ($_ eq \"-NODEFAULTLIB:MSVCRT.lib\");\n-        if (/^-LTCG/) {\n-        } elsif (/^-L/) {\n-            $_ =~ s/^-L/-LIBPATH:$rel_dir\\//;\n-        }\n-        push(@tmp2, $_);\n-    }\n-    my $lflags = join(\" \", sort(@tmp));\n-\n-    my $target = $appname;\n-    $target =~ s/\\.exe//;\n-    $target =~ s/\\//_/g;\n-    $defines =~ s/-D//g;\n-    $defines =~ s/\"/\\\\\\\\\"/g;\n-    $includes =~ s/-I//g;\n-    mkdir \"$target\" || die \"Could not create the directory $target for app project!\\n\";\n-    open F, \">$target/$target.pro\" || die \"Could not open $target/$target.pro for writing!\\n\";\n-    print F << \"EOM\";\n-TEMPLATE = app\n-TARGET = $target\n-DESTDIR = $rel_dir\n-\n-CONFIG -= qt embed_manifest_exe\n-CONFIG += console\n-\n-QMAKE_CFLAGS =\n-QMAKE_CFLAGS_RELEASE = $cflags_release\n-QMAKE_CFLAGS_DEBUG = $cflags_debug\n-QMAKE_LFLAGS = $lflags\n-LIBS   = $libs\n-\n-DEFINES += \\\\\n-        $defines\n-\n-INCLUDEPATH += \\\\\n-        $includes\n-\n-win32:QMAKE_LFLAGS += -LIBPATH:$rel_dir\n-else: QMAKE_LFLAGS += -L$rel_dir\n-\n-SOURCES += \\\\\n-        $sources\n-EOM\n-    close F;\n-}\n-\n-sub createGlueProject {\n-    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    my $libs = join(\" \\\\ \\n\", map(\"\\t$_|$_.pro\", @{$build_structure{\"LIBS\"}}));\n-    my $apps = join(\" \\\\ \\n\", map(\"\\t$_|$_.pro\", @{$build_structure{\"APPS\"}}));\n-    $libs =~ s/\\.a//g;\n-    $libs =~ s/\\//_/g;\n-    $libs =~ s/\\|/\\//g;\n-    $apps =~ s/\\.exe//g;\n-    $apps =~ s/\\//_/g;\n-    $apps =~ s/\\|/\\//g;\n-\n-    my $filename = $out_dir;\n-    $filename =~ s/.*\\/([^\\/]+)$/$1/;\n-    $filename =~ s/\\/$//;\n-    print \"Generate glue project $filename.pro\\n\";\n-    open F, \">$filename.pro\" || die \"Could not open $filename.pro for writing!\\n\";\n-    print F << \"EOM\";\n-TEMPLATE = subdirs\n-CONFIG += ordered\n-SUBDIRS += \\\\\n-$libs \\\\\n-$apps\n-EOM\n-    close F;\n-}\n-\n-1;\ndiff --git a/contrib/buildsystems/Generators/Vcproj.pm b/contrib/buildsystems/Generators/Vcproj.pm\ndeleted file mode 100644\nindex 737647e76afd..000000000000\n--- a/contrib/buildsystems/Generators/Vcproj.pm\n+++ /dev/null\n@@ -1,579 +0,0 @@\n-package Generators::Vcproj;\n-require Exporter;\n-\n-use strict;\n-use vars qw($VERSION);\n-use Digest::SHA qw(sha256_hex);\n-\n-our $VERSION = '1.00';\n-our(@ISA, @EXPORT, @EXPORT_OK, @AVAILABLE);\n-@ISA = qw(Exporter);\n-\n-BEGIN {\n-    push @EXPORT_OK, qw(generate);\n-}\n-\n-sub generate_guid ($) {\n-    my $hex = sha256_hex($_[0]);\n-    $hex =~ s/^(.{8})(.{4})(.{4})(.{4})(.{12}).*/{$1-$2-$3-$4-$5}/;\n-    $hex =~ tr/a-z/A-Z/;\n-    return $hex;\n-}\n-\n-sub generate {\n-    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    my @libs = @{$build_structure{\"LIBS\"}};\n-    foreach (@libs) {\n-        createLibProject($_, $git_dir, $out_dir, $rel_dir, \\%build_structure);\n-    }\n-\n-    my @apps = @{$build_structure{\"APPS\"}};\n-    foreach (@apps) {\n-        createAppProject($_, $git_dir, $out_dir, $rel_dir, \\%build_structure);\n-    }\n-\n-    createGlueProject($git_dir, $out_dir, $rel_dir, %build_structure);\n-    return 0;\n-}\n-\n-sub createLibProject {\n-    my ($libname, $git_dir, $out_dir, $rel_dir, $build_structure) = @_;\n-    print \"Generate $libname vcproj lib project\\n\";\n-    $rel_dir = \"..\\\\$rel_dir\";\n-    $rel_dir =~ s/\\//\\\\/g;\n-\n-    my $target = $libname;\n-    $target =~ s/\\//_/g;\n-    $target =~ s/\\.a//;\n-\n-    my $uuid = generate_guid($libname);\n-    $$build_structure{\"LIBS_${target}_GUID\"} = $uuid;\n-\n-    my @srcs = sort(map(\"$rel_dir\\\\$_\", @{$$build_structure{\"LIBS_${libname}_SOURCES\"}}));\n-    my @sources;\n-    foreach (@srcs) {\n-        $_ =~ s/\\//\\\\/g;\n-        push(@sources, $_);\n-    }\n-    my $defines = join(\",\", sort(@{$$build_structure{\"LIBS_${libname}_DEFINES\"}}));\n-    my $includes= join(\";\", sort(map(\"&quot;$rel_dir\\\\$_&quot;\", @{$$build_structure{\"LIBS_${libname}_INCLUDES\"}})));\n-    my $cflags  = join(\" \", sort(@{$$build_structure{\"LIBS_${libname}_CFLAGS\"}}));\n-    $cflags =~ s/\\\"/&quot;/g;\n-    $cflags =~ s/</&lt;/g;\n-    $cflags =~ s/>/&gt;/g;\n-\n-    my $cflags_debug = $cflags;\n-    $cflags_debug =~ s/-MT/-MTd/;\n-    $cflags_debug =~ s/-O.//;\n-\n-    my $cflags_release = $cflags;\n-    $cflags_release =~ s/-MTd/-MT/;\n-\n-    my @tmp  = @{$$build_structure{\"LIBS_${libname}_LFLAGS\"}};\n-    my @tmp2 = ();\n-    foreach (@tmp) {\n-        if (/^-LTCG/) {\n-        } elsif (/^-L/) {\n-            $_ =~ s/^-L/-LIBPATH:$rel_dir\\//;\n-        }\n-        push(@tmp2, $_);\n-    }\n-    my $lflags = join(\" \", sort(@tmp));\n-\n-    $defines =~ s/-D//g;\n-    $defines =~ s/\\\"/\\\\&quot;/g;\n-    $defines =~ s/</&lt;/g;\n-    $defines =~ s/>/&gt;/g;\n-    $defines =~ s/\\'//g;\n-    $includes =~ s/-I//g;\n-    mkdir \"$target\" || die \"Could not create the directory $target for lib project!\\n\";\n-    open F, \">$target/$target.vcproj\" || die \"Could not open $target/$target.pro for writing!\\n\";\n-    binmode F, \":crlf\";\n-    print F << \"EOM\";\n-<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n-<VisualStudioProject\n-\tProjectType=\"Visual C++\"\n-\tVersion=\"9,00\"\n-\tName=\"$target\"\n-\tProjectGUID=\"$uuid\">\n-\t<Platforms>\n-\t\t<Platform\n-\t\t\tName=\"Win32\"/>\n-\t</Platforms>\n-\t<ToolFiles>\n-\t</ToolFiles>\n-\t<Configurations>\n-\t\t<Configuration\n-\t\t\tName=\"Debug|Win32\"\n-\t\t\tOutputDirectory=\"$rel_dir\"\n-\t\t\tConfigurationType=\"4\"\n-\t\t\tCharacterSet=\"0\"\n-\t\t\tIntermediateDirectory=\"\\$(ProjectDir)\\$(ConfigurationName)\"\n-\t\t\t>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreBuildEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCustomBuildTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCMIDLTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCLCompilerTool\"\n-\t\t\t\tAdditionalOptions=\"$cflags_debug\"\n-\t\t\t\tOptimization=\"0\"\n-\t\t\t\tInlineFunctionExpansion=\"1\"\n-\t\t\t\tAdditionalIncludeDirectories=\"$includes\"\n-\t\t\t\tPreprocessorDefinitions=\"WIN32,_DEBUG,$defines\"\n-\t\t\t\tMinimalRebuild=\"true\"\n-\t\t\t\tRuntimeLibrary=\"1\"\n-\t\t\t\tUsePrecompiledHeader=\"0\"\n-\t\t\t\tProgramDataBaseFileName=\"\\$(IntDir)\\\\\\$(TargetName).pdb\"\n-\t\t\t\tWarningLevel=\"3\"\n-\t\t\t\tDebugInformationFormat=\"3\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreLinkEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCLibrarianTool\"\n-\t\t\t\tSuppressStartupBanner=\"true\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCALinkTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXDCMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCBscMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCFxCopTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPostBuildEventTool\"\n-\t\t\t/>\n-\t\t</Configuration>\n-\t\t<Configuration\n-\t\t\tName=\"Release|Win32\"\n-\t\t\tOutputDirectory=\"$rel_dir\"\n-\t\t\tConfigurationType=\"4\"\n-\t\t\tCharacterSet=\"0\"\n-\t\t\tWholeProgramOptimization=\"1\"\n-\t\t\tIntermediateDirectory=\"\\$(ProjectDir)\\$(ConfigurationName)\"\n-\t\t\t>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreBuildEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCustomBuildTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCMIDLTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCLCompilerTool\"\n-\t\t\t\tAdditionalOptions=\"$cflags_release\"\n-\t\t\t\tOptimization=\"2\"\n-\t\t\t\tInlineFunctionExpansion=\"1\"\n-\t\t\t\tEnableIntrinsicFunctions=\"true\"\n-\t\t\t\tAdditionalIncludeDirectories=\"$includes\"\n-\t\t\t\tPreprocessorDefinitions=\"WIN32,NDEBUG,$defines\"\n-\t\t\t\tRuntimeLibrary=\"0\"\n-\t\t\t\tEnableFunctionLevelLinking=\"true\"\n-\t\t\t\tUsePrecompiledHeader=\"0\"\n-\t\t\t\tProgramDataBaseFileName=\"\\$(IntDir)\\\\\\$(TargetName).pdb\"\n-\t\t\t\tWarningLevel=\"3\"\n-\t\t\t\tDebugInformationFormat=\"3\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreLinkEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCLibrarianTool\"\n-\t\t\t\tSuppressStartupBanner=\"true\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCALinkTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXDCMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCBscMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCFxCopTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPostBuildEventTool\"\n-\t\t\t/>\n-\t\t</Configuration>\n-\t</Configurations>\n-\t<Files>\n-\t\t<Filter\n-\t\t\tName=\"Source Files\"\n-\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n-\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\">\n-EOM\n-    foreach(@sources) {\n-        print F << \"EOM\";\n-\t\t\t<File\n-\t\t\t\tRelativePath=\"$_\"/>\n-EOM\n-    }\n-    print F << \"EOM\";\n-\t\t</Filter>\n-\t</Files>\n-\t<Globals>\n-\t</Globals>\n-</VisualStudioProject>\n-EOM\n-    close F;\n-}\n-\n-sub createAppProject {\n-    my ($appname, $git_dir, $out_dir, $rel_dir, $build_structure) = @_;\n-    print \"Generate $appname vcproj app project\\n\";\n-    $rel_dir = \"..\\\\$rel_dir\";\n-    $rel_dir =~ s/\\//\\\\/g;\n-\n-    my $target = $appname;\n-    $target =~ s/\\//_/g;\n-    $target =~ s/\\.exe//;\n-\n-    my $uuid = generate_guid($appname);\n-    $$build_structure{\"APPS_${target}_GUID\"} = $uuid;\n-\n-    my @srcs = sort(map(\"$rel_dir\\\\$_\", @{$$build_structure{\"APPS_${appname}_SOURCES\"}}));\n-    my @sources;\n-    foreach (@srcs) {\n-        $_ =~ s/\\//\\\\/g;\n-        push(@sources, $_);\n-    }\n-    my $defines = join(\",\", sort(@{$$build_structure{\"APPS_${appname}_DEFINES\"}}));\n-    my $includes= join(\";\", sort(map(\"&quot;$rel_dir\\\\$_&quot;\", @{$$build_structure{\"APPS_${appname}_INCLUDES\"}})));\n-    my $cflags  = join(\" \", sort(@{$$build_structure{\"APPS_${appname}_CFLAGS\"}}));\n-    $cflags =~ s/\\\"/&quot;/g;\n-    $cflags =~ s/</&lt;/g;\n-    $cflags =~ s/>/&gt;/g;\n-\n-    my $cflags_debug = $cflags;\n-    $cflags_debug =~ s/-MT/-MTd/;\n-    $cflags_debug =~ s/-O.//;\n-\n-    my $cflags_release = $cflags;\n-    $cflags_release =~ s/-MTd/-MT/;\n-\n-    my $libs;\n-    foreach (sort(@{$$build_structure{\"APPS_${appname}_LIBS\"}})) {\n-        $_ =~ s/\\//_/g;\n-        $libs .= \" $_\";\n-    }\n-    my @tmp  = @{$$build_structure{\"APPS_${appname}_LFLAGS\"}};\n-    my @tmp2 = ();\n-    foreach (@tmp) {\n-        if (/^-LTCG/) {\n-        } elsif (/^-L/) {\n-            $_ =~ s/^-L/-LIBPATH:$rel_dir\\//;\n-        }\n-        push(@tmp2, $_);\n-    }\n-    my $lflags = join(\" \", sort(@tmp)) . \" -LIBPATH:$rel_dir\";\n-\n-    $defines =~ s/-D//g;\n-    $defines =~ s/\\\"/\\\\&quot;/g;\n-    $defines =~ s/</&lt;/g;\n-    $defines =~ s/>/&gt;/g;\n-    $defines =~ s/\\'//g;\n-    $defines =~ s/\\\\\\\\/\\\\/g;\n-    $includes =~ s/-I//g;\n-    mkdir \"$target\" || die \"Could not create the directory $target for lib project!\\n\";\n-    open F, \">$target/$target.vcproj\" || die \"Could not open $target/$target.pro for writing!\\n\";\n-    binmode F, \":crlf\";\n-    print F << \"EOM\";\n-<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n-<VisualStudioProject\n-\tProjectType=\"Visual C++\"\n-\tVersion=\"9,00\"\n-\tName=\"$target\"\n-\tProjectGUID=\"$uuid\">\n-\t<Platforms>\n-\t\t<Platform\n-\t\t\tName=\"Win32\"/>\n-\t</Platforms>\n-\t<ToolFiles>\n-\t</ToolFiles>\n-\t<Configurations>\n-\t\t<Configuration\n-\t\t\tName=\"Debug|Win32\"\n-\t\t\tOutputDirectory=\"$rel_dir\"\n-\t\t\tConfigurationType=\"1\"\n-\t\t\tCharacterSet=\"0\"\n-\t\t\tIntermediateDirectory=\"\\$(ProjectDir)\\$(ConfigurationName)\"\n-\t\t\t>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreBuildEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCustomBuildTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCMIDLTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCLCompilerTool\"\n-\t\t\t\tAdditionalOptions=\"$cflags_debug\"\n-\t\t\t\tOptimization=\"0\"\n-\t\t\t\tInlineFunctionExpansion=\"1\"\n-\t\t\t\tAdditionalIncludeDirectories=\"$includes\"\n-\t\t\t\tPreprocessorDefinitions=\"WIN32,_DEBUG,$defines\"\n-\t\t\t\tMinimalRebuild=\"true\"\n-\t\t\t\tRuntimeLibrary=\"1\"\n-\t\t\t\tUsePrecompiledHeader=\"0\"\n-\t\t\t\tProgramDataBaseFileName=\"\\$(IntDir)\\\\\\$(TargetName).pdb\"\n-\t\t\t\tWarningLevel=\"3\"\n-\t\t\t\tDebugInformationFormat=\"3\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreLinkEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCLinkerTool\"\n-\t\t\t\tAdditionalDependencies=\"$libs\"\n-\t\t\t\tAdditionalOptions=\"$lflags\"\n-\t\t\t\tLinkIncremental=\"2\"\n-\t\t\t\tGenerateDebugInformation=\"true\"\n-\t\t\t\tSubSystem=\"1\"\n-\t\t\t\tTargetMachine=\"1\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCALinkTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXDCMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCBscMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCFxCopTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPostBuildEventTool\"\n-\t\t\t/>\n-\t\t</Configuration>\n-\t\t<Configuration\n-\t\t\tName=\"Release|Win32\"\n-\t\t\tOutputDirectory=\"$rel_dir\"\n-\t\t\tConfigurationType=\"1\"\n-\t\t\tCharacterSet=\"0\"\n-\t\t\tWholeProgramOptimization=\"1\"\n-\t\t\tIntermediateDirectory=\"\\$(ProjectDir)\\$(ConfigurationName)\"\n-\t\t\t>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreBuildEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCustomBuildTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCMIDLTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCCLCompilerTool\"\n-\t\t\t\tAdditionalOptions=\"$cflags_release\"\n-\t\t\t\tOptimization=\"2\"\n-\t\t\t\tInlineFunctionExpansion=\"1\"\n-\t\t\t\tEnableIntrinsicFunctions=\"true\"\n-\t\t\t\tAdditionalIncludeDirectories=\"$includes\"\n-\t\t\t\tPreprocessorDefinitions=\"WIN32,NDEBUG,$defines\"\n-\t\t\t\tRuntimeLibrary=\"0\"\n-\t\t\t\tEnableFunctionLevelLinking=\"true\"\n-\t\t\t\tUsePrecompiledHeader=\"0\"\n-\t\t\t\tProgramDataBaseFileName=\"\\$(IntDir)\\\\\\$(TargetName).pdb\"\n-\t\t\t\tWarningLevel=\"3\"\n-\t\t\t\tDebugInformationFormat=\"3\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCResourceCompilerTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPreLinkEventTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCLinkerTool\"\n-\t\t\t\tAdditionalDependencies=\"$libs\"\n-\t\t\t\tAdditionalOptions=\"$lflags\"\n-\t\t\t\tLinkIncremental=\"1\"\n-\t\t\t\tGenerateDebugInformation=\"true\"\n-\t\t\t\tSubSystem=\"1\"\n-\t\t\t\tTargetMachine=\"1\"\n-\t\t\t\tOptimizeReferences=\"2\"\n-\t\t\t\tEnableCOMDATFolding=\"2\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCALinkTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCXDCMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCBscMakeTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCFxCopTool\"\n-\t\t\t/>\n-\t\t\t<Tool\n-\t\t\t\tName=\"VCPostBuildEventTool\"\n-\t\t\t/>\n-\t\t</Configuration>\n-\t</Configurations>\n-\t<Files>\n-\t\t<Filter\n-\t\t\tName=\"Source Files\"\n-\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n-\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\">\n-EOM\n-    foreach(@sources) {\n-        print F << \"EOM\";\n-\t\t\t<File\n-\t\t\t\tRelativePath=\"$_\"/>\n-EOM\n-    }\n-    print F << \"EOM\";\n-\t\t</Filter>\n-\t</Files>\n-\t<Globals>\n-\t</Globals>\n-</VisualStudioProject>\n-EOM\n-    close F;\n-}\n-\n-sub createGlueProject {\n-    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    print \"Generate solutions file\\n\";\n-    $rel_dir = \"..\\\\$rel_dir\";\n-    $rel_dir =~ s/\\//\\\\/g;\n-    my $SLN_HEAD = \"Microsoft Visual Studio Solution File, Format Version 10.00\\n# Visual Studio 2008\\n\";\n-    my $SLN_PRE  = \"Project(\\\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\\\") = \";\n-    my $SLN_POST = \"\\nEndProject\\n\";\n-\n-    my @libs = @{$build_structure{\"LIBS\"}};\n-    my @tmp;\n-    foreach (@libs) {\n-        $_ =~ s/\\//_/g;\n-        $_ =~ s/\\.a//;\n-        push(@tmp, $_);\n-    }\n-    @libs = @tmp;\n-\n-    my @apps = @{$build_structure{\"APPS\"}};\n-    @tmp = ();\n-    foreach (@apps) {\n-        $_ =~ s/\\//_/g;\n-        $_ =~ s/\\.exe//;\n-        if ($_ eq \"git\" ) {\n-            unshift(@tmp, $_);\n-        } else {\n-            push(@tmp, $_);\n-        }\n-    }\n-    @apps = @tmp;\n-\n-    open F, \">git.sln\" || die \"Could not open git.sln for writing!\\n\";\n-    binmode F, \":crlf\";\n-    print F \"$SLN_HEAD\";\n-\n-    my $uuid_libgit = $build_structure{\"LIBS_libgit_GUID\"};\n-    my $uuid_xdiff_lib = $build_structure{\"LIBS_xdiff_lib_GUID\"};\n-    foreach (@apps) {\n-        my $appname = $_;\n-        my $uuid = $build_structure{\"APPS_${appname}_GUID\"};\n-        print F \"$SLN_PRE\";\n-        print F \"\\\"${appname}\\\", \\\"${appname}\\\\${appname}.vcproj\\\", \\\"${uuid}\\\"\\n\";\n-        print F \"\tProjectSection(ProjectDependencies) = postProject\\n\";\n-        print F \"\t\t${uuid_libgit} = ${uuid_libgit}\\n\";\n-        print F \"\t\t${uuid_xdiff_lib} = ${uuid_xdiff_lib}\\n\";\n-        print F \"\tEndProjectSection\";\n-        print F \"$SLN_POST\";\n-    }\n-    foreach (@libs) {\n-        my $libname = $_;\n-        my $uuid = $build_structure{\"LIBS_${libname}_GUID\"};\n-        print F \"$SLN_PRE\";\n-        print F \"\\\"${libname}\\\", \\\"${libname}\\\\${libname}.vcproj\\\", \\\"${uuid}\\\"\";\n-        print F \"$SLN_POST\";\n-    }\n-\n-    print F << \"EOM\";\n-Global\n-\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n-\t\tDebug|Win32 = Debug|Win32\n-\t\tRelease|Win32 = Release|Win32\n-\tEndGlobalSection\n-EOM\n-    print F << \"EOM\";\n-\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n-EOM\n-    foreach (@apps) {\n-        my $appname = $_;\n-        my $uuid = $build_structure{\"APPS_${appname}_GUID\"};\n-        print F \"\\t\\t${uuid}.Debug|Win32.ActiveCfg = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Debug|Win32.Build.0 = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|Win32.ActiveCfg = Release|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|Win32.Build.0 = Release|Win32\\n\";\n-    }\n-    foreach (@libs) {\n-        my $libname = $_;\n-        my $uuid = $build_structure{\"LIBS_${libname}_GUID\"};\n-        print F \"\\t\\t${uuid}.Debug|Win32.ActiveCfg = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Debug|Win32.Build.0 = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|Win32.ActiveCfg = Release|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|Win32.Build.0 = Release|Win32\\n\";\n-    }\n-\n-    print F << \"EOM\";\n-\tEndGlobalSection\n-EndGlobal\n-EOM\n-    close F;\n-}\n-\n-1;\ndiff --git a/contrib/buildsystems/Generators/Vcxproj.pm b/contrib/buildsystems/Generators/Vcxproj.pm\ndeleted file mode 100644\nindex b2e68a16715e..000000000000\n--- a/contrib/buildsystems/Generators/Vcxproj.pm\n+++ /dev/null\n@@ -1,402 +0,0 @@\n-package Generators::Vcxproj;\n-require Exporter;\n-\n-use strict;\n-use vars qw($VERSION);\n-use Digest::SHA qw(sha256_hex);\n-\n-our $VERSION = '1.00';\n-our(@ISA, @EXPORT, @EXPORT_OK, @AVAILABLE);\n-@ISA = qw(Exporter);\n-\n-BEGIN {\n-    push @EXPORT_OK, qw(generate);\n-}\n-\n-sub generate_guid ($) {\n-\tmy $hex = sha256_hex($_[0]);\n-\t$hex =~ s/^(.{8})(.{4})(.{4})(.{4})(.{12}).*/{$1-$2-$3-$4-$5}/;\n-\t$hex =~ tr/a-z/A-Z/;\n-\treturn $hex;\n-}\n-\n-sub generate {\n-    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    my @libs = @{$build_structure{\"LIBS\"}};\n-    foreach (@libs) {\n-        createProject($_, $git_dir, $out_dir, $rel_dir, \\%build_structure, 1);\n-    }\n-\n-    my @apps = @{$build_structure{\"APPS\"}};\n-    foreach (@apps) {\n-        createProject($_, $git_dir, $out_dir, $rel_dir, \\%build_structure, 0);\n-    }\n-\n-    createGlueProject($git_dir, $out_dir, $rel_dir, %build_structure);\n-    return 0;\n-}\n-\n-sub createProject {\n-    my ($name, $git_dir, $out_dir, $rel_dir, $build_structure, $static_library) = @_;\n-    my $label = $static_library ? \"lib\" : \"app\";\n-    my $prefix = $static_library ? \"LIBS_\" : \"APPS_\";\n-    my $config_type = $static_library ? \"StaticLibrary\" : \"Application\";\n-    print \"Generate $name vcxproj $label project\\n\";\n-    my $cdup = $name;\n-    $cdup =~ s/[^\\/]+/../g;\n-    $cdup =~ s/\\//\\\\/g;\n-    $rel_dir = $rel_dir eq \".\" ? $cdup : \"$cdup\\\\$rel_dir\";\n-    $rel_dir =~ s/\\//\\\\/g;\n-\n-    my $target = $name;\n-    if ($static_library) {\n-      $target =~ s/\\.a//;\n-    } else {\n-      $target =~ s/\\.exe//;\n-    }\n-\n-    my $uuid = generate_guid($name);\n-    $$build_structure{\"$prefix${target}_GUID\"} = $uuid;\n-    my $vcxproj = $target;\n-    $vcxproj =~ s/(.*\\/)?(.*)/$&\\/$2.vcxproj/;\n-    $vcxproj =~ s/([^\\/]*)(\\/lib)\\/(lib.vcxproj)/$1$2\\/$1_$3/;\n-    $$build_structure{\"$prefix${target}_VCXPROJ\"} = $vcxproj;\n-\n-    my @srcs = sort(map(\"$rel_dir\\\\$_\", @{$$build_structure{\"$prefix${name}_SOURCES\"}}));\n-    my @sources;\n-    foreach (@srcs) {\n-        $_ =~ s/\\//\\\\/g;\n-        push(@sources, $_);\n-    }\n-    my $defines = join(\";\", sort(@{$$build_structure{\"$prefix${name}_DEFINES\"}}));\n-    my $includes= join(\";\", sort(map { s/^-I//; s/\\//\\\\/g; File::Spec->file_name_is_absolute($_) ? $_ : \"$rel_dir\\\\$_\" } @{$$build_structure{\"$prefix${name}_INCLUDES\"}}));\n-    my $cflags = join(\" \", sort(map { s/^-[GLMOWZ].*//; s/.* .*/\"$&\"/; $_; } @{$$build_structure{\"$prefix${name}_CFLAGS\"}}));\n-    $cflags =~ s/</&lt;/g;\n-    $cflags =~ s/>/&gt;/g;\n-\n-    my $libs_release = \"\\n    \";\n-    my $libs_debug = \"\\n    \";\n-    if (!$static_library && $name ne 'headless-git') {\n-      $libs_release = join(\";\", sort(grep /^(?!libgit\\.lib|xdiff\\/lib\\.lib|vcs-svn\\/lib\\.lib|reftable\\/libreftable\\.lib)/, @{$$build_structure{\"$prefix${name}_LIBS\"}}));\n-      $libs_debug = $libs_release;\n-      $libs_debug =~ s/zlib\\.lib/zlibd\\.lib/g;\n-      $libs_debug =~ s/libexpat\\.lib/libexpatd\\.lib/g;\n-      $libs_debug =~ s/libcurl\\.lib/libcurl-d\\.lib/g;\n-    }\n-\n-    $defines =~ s/-D//g;\n-    $defines =~ s/</&lt;/g;\n-    $defines =~ s/>/&gt;/g;\n-    $defines =~ s/\\'//g;\n-\n-    die \"Could not create the directory $target for $label project!\\n\" unless (-d \"$target\" || mkdir \"$target\");\n-\n-    open F, \">$vcxproj\" or die \"Could not open $vcxproj for writing!\\n\";\n-    binmode F, \":crlf :utf8\";\n-    print F chr(0xFEFF);\n-    print F << \"EOM\";\n-<?xml version=\"1.0\" encoding=\"utf-8\"?>\n-<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n-  <ItemGroup Label=\"ProjectConfigurations\">\n-    <ProjectConfiguration Include=\"Debug|Win32\">\n-      <Configuration>Debug</Configuration>\n-      <Platform>Win32</Platform>\n-    </ProjectConfiguration>\n-    <ProjectConfiguration Include=\"Release|Win32\">\n-      <Configuration>Release</Configuration>\n-      <Platform>Win32</Platform>\n-    </ProjectConfiguration>\n-    <ProjectConfiguration Include=\"Debug|x64\">\n-      <Configuration>Debug</Configuration>\n-      <Platform>x64</Platform>\n-    </ProjectConfiguration>\n-    <ProjectConfiguration Include=\"Release|x64\">\n-      <Configuration>Release</Configuration>\n-      <Platform>x64</Platform>\n-    </ProjectConfiguration>\n-  </ItemGroup>\n-  <PropertyGroup Label=\"Globals\">\n-    <ProjectGuid>$uuid</ProjectGuid>\n-    <Keyword>Win32Proj</Keyword>\n-    <VCPKGArch Condition=\"'\\$(Platform)'=='Win32'\">x86-windows</VCPKGArch>\n-    <VCPKGArch Condition=\"'\\$(Platform)'!='Win32'\">x64-windows</VCPKGArch>\n-    <VCPKGArchDirectory>$cdup\\\\compat\\\\vcbuild\\\\vcpkg\\\\installed\\\\\\$(VCPKGArch)</VCPKGArchDirectory>\n-    <VCPKGBinDirectory Condition=\"'\\$(Configuration)'=='Debug'\">\\$(VCPKGArchDirectory)\\\\debug\\\\bin</VCPKGBinDirectory>\n-    <VCPKGLibDirectory Condition=\"'\\$(Configuration)'=='Debug'\">\\$(VCPKGArchDirectory)\\\\debug\\\\lib</VCPKGLibDirectory>\n-    <VCPKGBinDirectory Condition=\"'\\$(Configuration)'!='Debug'\">\\$(VCPKGArchDirectory)\\\\bin</VCPKGBinDirectory>\n-    <VCPKGLibDirectory Condition=\"'\\$(Configuration)'!='Debug'\">\\$(VCPKGArchDirectory)\\\\lib</VCPKGLibDirectory>\n-    <VCPKGIncludeDirectory>\\$(VCPKGArchDirectory)\\\\include</VCPKGIncludeDirectory>\n-    <VCPKGLibs Condition=\"'\\$(Configuration)'=='Debug'\">$libs_debug</VCPKGLibs>\n-    <VCPKGLibs Condition=\"'\\$(Configuration)'!='Debug'\">$libs_release</VCPKGLibs>\n-  </PropertyGroup>\n-  <Import Project=\"\\$(VCTargetsPath)\\\\Microsoft.Cpp.Default.props\" />\n-  <PropertyGroup Condition=\"'\\$(Configuration)'=='Debug'\" Label=\"Configuration\">\n-    <UseDebugLibraries>true</UseDebugLibraries>\n-    <LinkIncremental>true</LinkIncremental>\n-  </PropertyGroup>\n-  <PropertyGroup Condition=\"'\\$(Configuration)'=='Release'\" Label=\"Configuration\">\n-    <UseDebugLibraries>false</UseDebugLibraries>\n-    <WholeProgramOptimization>true</WholeProgramOptimization>\n-  </PropertyGroup>\n-  <PropertyGroup>\n-    <ConfigurationType>$config_type</ConfigurationType>\n-    <PlatformToolset>v140</PlatformToolset>\n-    <!-- <CharacterSet>UTF-8</CharacterSet> -->\n-    <OutDir>..\\\\</OutDir>\n-    <!-- <IntDir>\\$(ProjectDir)\\$(Configuration)\\\\</IntDir> -->\n-  </PropertyGroup>\n-  <Import Project=\"\\$(VCTargetsPath)\\\\Microsoft.Cpp.props\" />\n-  <ImportGroup Label=\"ExtensionSettings\">\n-  </ImportGroup>\n-  <ImportGroup Label=\"Shared\">\n-  </ImportGroup>\n-  <ImportGroup Label=\"PropertySheets\">\n-    <Import Project=\"\\$(UserRootDir)\\\\Microsoft.Cpp.\\$(Platform).user.props\" Condition=\"exists('\\$(UserRootDir)\\\\Microsoft.Cpp.\\$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n-  </ImportGroup>\n-  <PropertyGroup Label=\"UserMacros\" />\n-  <PropertyGroup>\n-    <GenerateManifest>false</GenerateManifest>\n-    <EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>\n-  </PropertyGroup>\n-  <ItemDefinitionGroup>\n-    <ClCompile>\n-      <AdditionalOptions>$cflags %(AdditionalOptions)</AdditionalOptions>\n-      <AdditionalIncludeDirectories>$cdup;$cdup\\\\compat;$cdup\\\\compat\\\\regex;$cdup\\\\compat\\\\win32;$cdup\\\\compat\\\\poll;$cdup\\\\compat\\\\vcbuild\\\\include;\\$(VCPKGIncludeDirectory);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n-      <EnableParallelCodeGeneration />\n-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\n-      <PrecompiledHeader />\n-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n-    </ClCompile>\n-    <Lib>\n-      <SuppressStartupBanner>true</SuppressStartupBanner>\n-    </Lib>\n-    <Link>\n-      <AdditionalLibraryDirectories>\\$(VCPKGLibDirectory);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n-      <AdditionalDependencies>\\$(VCPKGLibs);\\$(AdditionalDependencies)</AdditionalDependencies>\n-      <AdditionalOptions>invalidcontinue.obj %(AdditionalOptions)</AdditionalOptions>\n-      <EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>\n-      <ManifestFile>$cdup\\\\compat\\\\win32\\\\git.manifest</ManifestFile>\n-      <SubSystem>Console</SubSystem>\n-    </Link>\n-EOM\n-    if ($target eq 'libgit') {\n-        print F << \"EOM\";\n-    <PreBuildEvent Condition=\"!Exists('$cdup\\\\compat\\\\vcbuild\\\\vcpkg\\\\installed\\\\\\$(VCPKGArch)\\\\include\\\\openssl\\\\ssl.h')\">\n-      <Message>Initialize VCPKG</Message>\n-      <Command>del \"$cdup\\\\compat\\\\vcbuild\\\\vcpkg\"</Command>\n-      <Command>call \"$cdup\\\\compat\\\\vcbuild\\\\vcpkg_install.bat\"</Command>\n-    </PreBuildEvent>\n-EOM\n-    }\n-    print F << \"EOM\";\n-  </ItemDefinitionGroup>\n-  <ItemDefinitionGroup Condition=\"'\\$(Platform)'=='Win32'\">\n-    <Link>\n-      <TargetMachine>MachineX86</TargetMachine>\n-    </Link>\n-  </ItemDefinitionGroup>\n-  <ItemDefinitionGroup Condition=\"'\\$(Configuration)'=='Debug'\">\n-    <ClCompile>\n-      <Optimization>Disabled</Optimization>\n-      <PreprocessorDefinitions>WIN32;_DEBUG;$defines;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n-    </ClCompile>\n-    <Link>\n-      <GenerateDebugInformation>true</GenerateDebugInformation>\n-    </Link>\n-  </ItemDefinitionGroup>\n-  <ItemDefinitionGroup Condition=\"'\\$(Configuration)'=='Release'\">\n-    <ClCompile>\n-      <Optimization>MaxSpeed</Optimization>\n-      <IntrinsicFunctions>true</IntrinsicFunctions>\n-      <PreprocessorDefinitions>WIN32;NDEBUG;$defines;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n-      <FunctionLevelLinking>true</FunctionLevelLinking>\n-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n-    </ClCompile>\n-    <Link>\n-      <GenerateDebugInformation>true</GenerateDebugInformation>\n-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n-      <OptimizeReferences>true</OptimizeReferences>\n-    </Link>\n-  </ItemDefinitionGroup>\n-  <ItemGroup>\n-EOM\n-    foreach(@sources) {\n-        print F << \"EOM\";\n-    <ClCompile Include=\"$_\" />\n-EOM\n-    }\n-    print F << \"EOM\";\n-  </ItemGroup>\n-EOM\n-    if ((!$static_library || $target =~ 'vcs-svn' || $target =~ 'xdiff') && !($name =~ /headless-git/)) {\n-      my $uuid_libgit = $$build_structure{\"LIBS_libgit_GUID\"};\n-      my $uuid_libreftable = $$build_structure{\"LIBS_reftable/libreftable_GUID\"};\n-      my $uuid_xdiff_lib = $$build_structure{\"LIBS_xdiff/lib_GUID\"};\n-\n-      print F << \"EOM\";\n-  <ItemGroup>\n-    <ProjectReference Include=\"$cdup\\\\libgit\\\\libgit.vcxproj\">\n-      <Project>$uuid_libgit</Project>\n-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\n-    </ProjectReference>\n-EOM\n-      if (!($name =~ /xdiff|libreftable/)) {\n-        print F << \"EOM\";\n-    <ProjectReference Include=\"$cdup\\\\reftable\\\\libreftable\\\\libreftable.vcxproj\">\n-      <Project>$uuid_libreftable</Project>\n-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\n-    </ProjectReference>\n-EOM\n-      }\n-      if (!($name =~ 'xdiff')) {\n-        print F << \"EOM\";\n-    <ProjectReference Include=\"$cdup\\\\xdiff\\\\lib\\\\xdiff_lib.vcxproj\">\n-      <Project>$uuid_xdiff_lib</Project>\n-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\n-    </ProjectReference>\n-EOM\n-      }\n-      if ($name =~ /(test-(line-buffer|svn-fe)|^git-remote-testsvn)\\.exe$/) {\n-        my $uuid_vcs_svn_lib = $$build_structure{\"LIBS_vcs-svn/lib_GUID\"};\n-        print F << \"EOM\";\n-    <ProjectReference Include=\"$cdup\\\\vcs-svn\\\\lib\\\\vcs-svn_lib.vcxproj\">\n-      <Project>$uuid_vcs_svn_lib</Project>\n-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\n-    </ProjectReference>\n-EOM\n-      }\n-      print F << \"EOM\";\n-  </ItemGroup>\n-EOM\n-    }\n-    print F << \"EOM\";\n-  <Import Project=\"\\$(VCTargetsPath)\\\\Microsoft.Cpp.targets\" />\n-EOM\n-    if (!$static_library) {\n-      print F << \"EOM\";\n-  <Target Name=\"${target}_AfterBuild\" AfterTargets=\"AfterBuild\">\n-    <ItemGroup>\n-      <DLLsAndPDBs Include=\"\\$(VCPKGBinDirectory)\\\\*.dll;\\$(VCPKGBinDirectory)\\\\*.pdb\" />\n-    </ItemGroup>\n-    <Copy SourceFiles=\"@(DLLsAndPDBs)\" DestinationFolder=\"\\$(OutDir)\" SkipUnchangedFiles=\"true\" UseHardlinksIfPossible=\"true\" />\n-    <MakeDir Directories=\"..\\\\templates\\\\blt\\\\branches\" />\n-  </Target>\n-EOM\n-    }\n-    if ($target eq 'git') {\n-      print F \"  <Import Project=\\\"LinkOrCopyBuiltins.targets\\\" />\\n\";\n-    }\n-    if ($target eq 'git-remote-http') {\n-      print F \"  <Import Project=\\\"LinkOrCopyRemoteHttp.targets\\\" />\\n\";\n-    }\n-    print F << \"EOM\";\n-</Project>\n-EOM\n-    close F;\n-}\n-\n-sub createGlueProject {\n-    my ($git_dir, $out_dir, $rel_dir, %build_structure) = @_;\n-    print \"Generate solutions file\\n\";\n-    $rel_dir = \"..\\\\$rel_dir\";\n-    $rel_dir =~ s/\\//\\\\/g;\n-    my $SLN_HEAD = \"Microsoft Visual Studio Solution File, Format Version 11.00\\n# Visual Studio 2010\\n\";\n-    my $SLN_PRE  = \"Project(\\\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\\\") = \";\n-    my $SLN_POST = \"\\nEndProject\\n\";\n-\n-    my @libs = @{$build_structure{\"LIBS\"}};\n-    my @tmp;\n-    foreach (@libs) {\n-        $_ =~ s/\\.a//;\n-        push(@tmp, $_);\n-    }\n-    @libs = @tmp;\n-\n-    my @apps = @{$build_structure{\"APPS\"}};\n-    @tmp = ();\n-    foreach (@apps) {\n-        $_ =~ s/\\.exe//;\n-        if ($_ eq \"git\" ) {\n-            unshift(@tmp, $_);\n-        } else {\n-            push(@tmp, $_);\n-        }\n-    }\n-    @apps = @tmp;\n-\n-    open F, \">git.sln\" || die \"Could not open git.sln for writing!\\n\";\n-    binmode F, \":crlf :utf8\";\n-    print F chr(0xFEFF);\n-    print F \"$SLN_HEAD\";\n-\n-    foreach (@apps) {\n-        my $appname = $_;\n-        my $uuid = $build_structure{\"APPS_${appname}_GUID\"};\n-        print F \"$SLN_PRE\";\n-\tmy $vcxproj = $build_structure{\"APPS_${appname}_VCXPROJ\"};\n-\t$vcxproj =~ s/\\//\\\\/g;\n-        $appname =~ s/.*\\///;\n-        print F \"\\\"${appname}\\\", \\\"${vcxproj}\\\", \\\"${uuid}\\\"\";\n-        print F \"$SLN_POST\";\n-    }\n-    foreach (@libs) {\n-        my $libname = $_;\n-        my $uuid = $build_structure{\"LIBS_${libname}_GUID\"};\n-        print F \"$SLN_PRE\";\n-        my $vcxproj = $build_structure{\"LIBS_${libname}_VCXPROJ\"};\n-\t$vcxproj =~ s/\\//\\\\/g;\n-        $libname =~ s/\\//_/g;\n-        print F \"\\\"${libname}\\\", \\\"${vcxproj}\\\", \\\"${uuid}\\\"\";\n-        print F \"$SLN_POST\";\n-    }\n-\n-    print F << \"EOM\";\n-Global\n-\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n-\t\tDebug|x64 = Debug|x64\n-\t\tDebug|x86 = Debug|x86\n-\t\tRelease|x64 = Release|x64\n-\t\tRelease|x86 = Release|x86\n-\tEndGlobalSection\n-EOM\n-    print F << \"EOM\";\n-\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n-EOM\n-    foreach (@apps) {\n-        my $appname = $_;\n-        my $uuid = $build_structure{\"APPS_${appname}_GUID\"};\n-        print F \"\\t\\t${uuid}.Debug|x64.ActiveCfg = Debug|x64\\n\";\n-        print F \"\\t\\t${uuid}.Debug|x64.Build.0 = Debug|x64\\n\";\n-        print F \"\\t\\t${uuid}.Debug|x86.ActiveCfg = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Debug|x86.Build.0 = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|x64.ActiveCfg = Release|x64\\n\";\n-        print F \"\\t\\t${uuid}.Release|x64.Build.0 = Release|x64\\n\";\n-        print F \"\\t\\t${uuid}.Release|x86.ActiveCfg = Release|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|x86.Build.0 = Release|Win32\\n\";\n-    }\n-    foreach (@libs) {\n-        my $libname = $_;\n-        my $uuid = $build_structure{\"LIBS_${libname}_GUID\"};\n-        print F \"\\t\\t${uuid}.Debug|x64.ActiveCfg = Debug|x64\\n\";\n-        print F \"\\t\\t${uuid}.Debug|x64.Build.0 = Debug|x64\\n\";\n-        print F \"\\t\\t${uuid}.Debug|x86.ActiveCfg = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Debug|x86.Build.0 = Debug|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|x64.ActiveCfg = Release|x64\\n\";\n-        print F \"\\t\\t${uuid}.Release|x64.Build.0 = Release|x64\\n\";\n-        print F \"\\t\\t${uuid}.Release|x86.ActiveCfg = Release|Win32\\n\";\n-        print F \"\\t\\t${uuid}.Release|x86.Build.0 = Release|Win32\\n\";\n-    }\n-\n-    print F << \"EOM\";\n-\tEndGlobalSection\n-\tGlobalSection(SolutionProperties) = preSolution\n-\t\tHideSolutionNode = FALSE\n-\tEndGlobalSection\n-EndGlobal\n-EOM\n-    close F;\n-}\n-\n-1;\ndiff --git a/contrib/buildsystems/engine.pl b/contrib/buildsystems/engine.pl\ndeleted file mode 100755\nindex 069be7e4befc..000000000000\n--- a/contrib/buildsystems/engine.pl\n+++ /dev/null\n@@ -1,395 +0,0 @@\n-#!/usr/bin/perl -w\n-######################################################################\n-# Do not call this script directly!\n-#\n-# The generate script ensures that @INC is correct before the engine\n-# is executed.\n-#\n-# Copyright (C) 2009 Marius Storm-Olsen <mstormo@gmail.com>\n-######################################################################\n-use strict;\n-use File::Basename;\n-use File::Spec;\n-use Cwd;\n-use Generators;\n-use Text::ParseWords;\n-\n-my (%build_structure, %compile_options, @makedry);\n-my $out_dir = getcwd();\n-my $git_dir = $out_dir;\n-$git_dir =~ s=\\\\=/=g;\n-$git_dir = dirname($git_dir) while (!-e \"$git_dir/git.c\" && \"$git_dir\" ne \"\");\n-die \"Couldn't find Git repo\" if (\"$git_dir\" eq \"\");\n-\n-my @gens = Generators::available();\n-my $gen = \"Vcproj\";\n-\n-sub showUsage\n-{\n-    my $genlist = join(', ', @gens);\n-    print << \"EOM\";\n-generate usage:\n-  -g <GENERATOR>  --gen <GENERATOR> Specify the buildsystem generator    (default: $gen)\n-                                    Available: $genlist\n-  -o <PATH>       --out <PATH>      Specify output directory generation  (default: .)\n-                  --make-out <PATH> Write the output of GNU Make into a file\n-  -i <FILE>       --in <FILE>       Specify input file, instead of running GNU Make\n-  -h,-?           --help            This help\n-EOM\n-    exit 0;\n-}\n-\n-# Parse command-line options\n-my $make_out;\n-while (@ARGV) {\n-    my $arg = shift @ARGV;\n-    if (\"$arg\" eq \"-h\" || \"$arg\" eq \"--help\" || \"$arg\" eq \"-?\") {\n-\tshowUsage();\n-\texit(0);\n-    } elsif(\"$arg\" eq \"--out\" || \"$arg\" eq \"-o\") {\n-\t$out_dir = shift @ARGV;\n-    } elsif(\"$arg\" eq \"--make-out\") {\n-\t$make_out = shift @ARGV;\n-    } elsif(\"$arg\" eq \"--gen\" || \"$arg\" eq \"-g\") {\n-\t$gen = shift @ARGV;\n-    } elsif(\"$arg\" eq \"--in\" || \"$arg\" eq \"-i\") {\n-\tmy $infile = shift @ARGV;\n-        open(F, \"<$infile\") || die \"Couldn't open file $infile\";\n-        @makedry = <F>;\n-        close(F);\n-    } else {\n-        die \"Unknown option: \" . $arg;\n-    }\n-}\n-\n-# NOT using File::Spec->rel2abs($path, $base) here, as\n-# it fails badly for me in the msysgit environment\n-$git_dir = File::Spec->rel2abs($git_dir);\n-$out_dir = File::Spec->rel2abs($out_dir);\n-my $rel_dir = makeOutRel2Git($git_dir, $out_dir);\n-\n-# Print some information so the user feels informed\n-print << \"EOM\";\n------\n-Generator: $gen\n-Git dir:   $git_dir\n-Out dir:   $out_dir\n------\n-Running GNU Make to figure out build structure...\n-EOM\n-\n-# Pipe a make --dry-run into a variable, if not already loaded from file\n-# Capture the make dry stderr to file for review (will be empty for a release build).\n-\n-my $ErrsFile = \"msvc-build-makedryerrors.txt\";\n-@makedry = `make -C $git_dir -n MSVC=1 SKIP_VCPKG=1 V=1 2>$ErrsFile`\n-if !@makedry;\n-# test for an empty Errors file and remove it\n-unlink $ErrsFile if -f -z $ErrsFile;\n-\n-if (defined $make_out) {\n-    open OUT, \">\" . $make_out;\n-    print OUT @makedry;\n-    close OUT;\n-}\n-\n-# Parse the make output into usable info\n-parseMakeOutput();\n-\n-# Finally, ask the generator to start generating..\n-Generators::generate($gen, $git_dir, $out_dir, $rel_dir, %build_structure);\n-\n-# main flow ends here\n-# -------------------------------------------------------------------------------------------------\n-\n-\n-# 1) path: /foo/bar/baz        2) path: /foo/bar/baz   3) path: /foo/bar/baz\n-#    base: /foo/bar/baz/temp      base: /foo/bar          base: /tmp\n-#    rel:  ..                     rel:  baz               rel:  ../foo/bar/baz\n-sub makeOutRel2Git\n-{\n-    my ($path, $base) = @_;\n-    my $rel;\n-    if (\"$path\" eq \"$base\") {\n-        return \".\";\n-    } elsif ($base =~ /^$path/) {\n-        # case 1\n-        my $tmp = $base;\n-        $tmp =~ s/^$path//;\n-        foreach (split('/', $tmp)) {\n-            $rel .= \"../\" if (\"$_\" ne \"\");\n-        }\n-    } elsif ($path =~ /^$base/) {\n-        # case 2\n-        $rel = $path;\n-        $rel =~ s/^$base//;\n-        $rel = \"./$rel\";\n-    } else {\n-        my $tmp = $base;\n-        foreach (split('/', $tmp)) {\n-            $rel .= \"../\" if (\"$_\" ne \"\");\n-        }\n-        $rel .= $path;\n-    }\n-    $rel =~ s/\\/\\//\\//g; # simplify\n-    $rel =~ s/\\/$//;     # don't end with /\n-    return $rel;\n-}\n-\n-sub parseMakeOutput\n-{\n-    print \"Parsing GNU Make output to figure out build structure...\\n\";\n-    my $line = 0;\n-    while (my $text = shift @makedry) {\n-        my $ate_next;\n-        do {\n-            $ate_next = 0;\n-            $line++;\n-            chomp $text;\n-            chop $text if ($text =~ /\\r$/);\n-            if ($text =~ /\\\\$/) {\n-                $text =~ s/\\\\$//;\n-                $text .= shift @makedry;\n-                $ate_next = 1;\n-            }\n-        } while($ate_next);\n-\n-        if ($text =~ /^test /) {\n-            # options to test (eg -o) may be mistaken for linker options\n-            next;\n-        }\n-\n-        if ($text =~ /^(mkdir|msgfmt) /) {\n-            # options to the Portable Object translations\n-            # the line \"mkdir ... && msgfmt ...\" contains no linker options\n-            next;\n-        }\n-\n-        if($text =~ / -c /) {\n-            # compilation\n-            handleCompileLine($text, $line);\n-\n-        } elsif ($text =~ / -o /) {\n-            # linking executable\n-            handleLinkLine($text, $line);\n-\n-        } elsif ($text =~ /\\.o / && $text =~ /\\.a /) {\n-            # libifying\n-            handleLibLine($text, $line);\n-#\n-#        } elsif ($text =~ /^cp /) {\n-#            # copy file around\n-#\n-#        } elsif ($text =~ /^rm -f /) {\n-#            # shell command\n-#\n-#        } elsif ($text =~ /^make[ \\[]/) {\n-#            # make output\n-#\n-#        } elsif ($text =~ /^echo /) {\n-#            # echo to file\n-#\n-#        } elsif ($text =~ /^if /) {\n-#            # shell conditional\n-#\n-#        } elsif ($text =~ /^tclsh /) {\n-#            # translation stuff\n-#\n-#        } elsif ($text =~ /^umask /) {\n-#            # handling boilerplates\n-#\n-#        } elsif ($text =~ /\\$\\(\\:\\)/) {\n-#            # ignore\n-#\n-#        } elsif ($text =~ /^FLAGS=/) {\n-#            # flags check for dependencies\n-#\n-#        } elsif ($text =~ /^'\\/usr\\/bin\\/perl' -MError -e/) {\n-#            # perl commands for copying files\n-#\n-#        } elsif ($text =~ /generate-cmdlist\\.sh/) {\n-#            # command for generating list of commands\n-#\n-#        } elsif ($text =~ /new locations or Tcl/) {\n-#            # command for detecting Tcl/Tk changes\n-#\n-#        } elsif ($text =~ /mkdir -p/) {\n-#            # command creating path\n-#\n-#        } elsif ($text =~ /: no custom templates yet/) {\n-#            # whatever\n-#\n-#        } else {\n-#            print \"Unhandled (line: $line): $text\\n\";\n-        }\n-    }\n-\n-#    use Data::Dumper;\n-#    print \"Parsed build structure:\\n\";\n-#    print Dumper(%build_structure);\n-}\n-\n-# variables for the compilation part of each step\n-my (@defines, @incpaths, @cflags, @sources);\n-\n-sub clearCompileStep\n-{\n-    @defines = ();\n-    @incpaths = ();\n-    @cflags = ();\n-    @sources = ();\n-}\n-\n-sub removeDuplicates\n-{\n-    my (%dupHash, $entry);\n-    %dupHash = map { $_, 1 } @defines;\n-    @defines = keys %dupHash;\n-\n-    %dupHash = map { $_, 1 } @incpaths;\n-    @incpaths = keys %dupHash;\n-\n-    %dupHash = map { $_, 1 } @cflags;\n-    @cflags = keys %dupHash;\n-}\n-\n-sub handleCompileLine\n-{\n-    my ($line, $lineno) = @_;\n-    my @parts = shellwords($line);\n-    my $sourcefile;\n-    shift(@parts); # ignore cmd\n-    while (my $part = shift @parts) {\n-        if (\"$part\" eq \"-o\") {\n-            # ignore object file\n-            shift @parts;\n-        } elsif (\"$part\" eq \"-c\") {\n-            # ignore compile flag\n-        } elsif (\"$part\" eq \"-c\") {\n-        } elsif ($part =~ /^.?-I/) {\n-            push(@incpaths, $part);\n-        } elsif ($part =~ /^.?-D/) {\n-            push(@defines, $part);\n-        } elsif ($part =~ /^-/) {\n-            push(@cflags, $part);\n-        } elsif ($part =~ /\\.(c|cc|cpp)$/) {\n-            $sourcefile = $part;\n-        } else {\n-            die \"Unhandled compiler option @ line $lineno: $part\";\n-        }\n-    }\n-    @{$compile_options{\"${sourcefile}_CFLAGS\"}} = @cflags;\n-    @{$compile_options{\"${sourcefile}_DEFINES\"}} = @defines;\n-    @{$compile_options{\"${sourcefile}_INCPATHS\"}} = @incpaths;\n-    clearCompileStep();\n-}\n-\n-sub handleLibLine\n-{\n-    my ($line, $lineno) = @_;\n-    my (@objfiles, @lflags, $libout, $part);\n-    # kill cmd and rm 'prefix'\n-    $line =~ s/^rm -f .* && .* rcs //;\n-    my @parts = shellwords($line);\n-    while ($part = shift @parts) {\n-        if ($part =~ /^-/) {\n-            push(@lflags, $part);\n-        } elsif ($part =~ /\\.(o|obj)$/) {\n-            push(@objfiles, $part);\n-        } elsif ($part =~ /\\.(a|lib)$/) {\n-            $libout = $part;\n-            $libout =~ s/\\.a$//;\n-        } else {\n-            die \"Unhandled lib option @ line $lineno: $part\";\n-        }\n-    }\n-#    print \"LibOut: '$libout'\\nLFlags: @lflags\\nOfiles: @objfiles\\n\";\n-#    exit(1);\n-    foreach (@objfiles) {\n-        my $sourcefile = $_;\n-        $sourcefile =~ s/\\.o$/.c/;\n-        push(@sources, $sourcefile);\n-        push(@cflags, @{$compile_options{\"${sourcefile}_CFLAGS\"}});\n-        push(@defines, @{$compile_options{\"${sourcefile}_DEFINES\"}});\n-        push(@incpaths, @{$compile_options{\"${sourcefile}_INCPATHS\"}});\n-    }\n-    removeDuplicates();\n-\n-    push(@{$build_structure{\"LIBS\"}}, $libout);\n-    @{$build_structure{\"LIBS_${libout}\"}} = (\"_DEFINES\", \"_INCLUDES\", \"_CFLAGS\", \"_SOURCES\",\n-                                             \"_OBJECTS\");\n-    @{$build_structure{\"LIBS_${libout}_DEFINES\"}} = @defines;\n-    @{$build_structure{\"LIBS_${libout}_INCLUDES\"}} = @incpaths;\n-    @{$build_structure{\"LIBS_${libout}_CFLAGS\"}} = @cflags;\n-    @{$build_structure{\"LIBS_${libout}_LFLAGS\"}} = @lflags;\n-    @{$build_structure{\"LIBS_${libout}_SOURCES\"}} = @sources;\n-    @{$build_structure{\"LIBS_${libout}_OBJECTS\"}} = @objfiles;\n-    clearCompileStep();\n-}\n-\n-sub handleLinkLine\n-{\n-    my ($line, $lineno) = @_;\n-    my (@objfiles, @lflags, @libs, $appout, $part);\n-    my @parts = shellwords($line);\n-    shift(@parts); # ignore cmd\n-    while ($part = shift @parts) {\n-        if ($part =~ /^-IGNORE/) {\n-            push(@lflags, $part);\n-        } elsif ($part =~ /^-[GRIMDO]/) {\n-            # eat compiler flags\n-        } elsif (\"$part\" eq \"-o\") {\n-            $appout = shift @parts;\n-        } elsif (\"$part\" eq \"-lz\") {\n-            push(@libs, \"zlib.lib\");\n-        } elsif (\"$part\" eq \"-lcrypto\") {\n-            push(@libs, \"libcrypto.lib\");\n-        } elsif (\"$part\" eq \"-lssl\") {\n-            push(@libs, \"libssl.lib\");\n-        } elsif (\"$part\" eq \"-lcurl\") {\n-            push(@libs, \"libcurl.lib\");\n-        } elsif (\"$part\" eq \"-lexpat\") {\n-            push(@libs, \"libexpat.lib\");\n-        } elsif (\"$part\" eq \"-liconv\") {\n-            push(@libs, \"iconv.lib\");\n-        } elsif ($part =~ /^[-\\/]/) {\n-            push(@lflags, $part);\n-        } elsif ($part =~ /\\.(a|lib)$/) {\n-            $part =~ s/\\.a$/.lib/;\n-            push(@libs, $part);\n-        } elsif ($part eq 'invalidcontinue.obj') {\n-            # ignore - known to MSVC\n-        } elsif ($part =~ /\\.o$/) {\n-            push(@objfiles, $part);\n-        } elsif ($part =~ /\\.obj$/) {\n-            # do nothing, 'make' should not be producing .obj, only .o files\n-        } else {\n-            die \"Unhandled link option @ line $lineno: $part\";\n-        }\n-    }\n-#    print \"AppOut: '$appout'\\nLFlags: @lflags\\nLibs  : @libs\\nOfiles: @objfiles\\n\";\n-#    exit(1);\n-    foreach (@objfiles) {\n-        my $sourcefile = $_;\n-        $sourcefile =~ s/^headless-git\\.o$/compat\\/win32\\/headless.c/;\n-        $sourcefile =~ s/\\.o$/.c/;\n-        push(@sources, $sourcefile);\n-        push(@cflags, @{$compile_options{\"${sourcefile}_CFLAGS\"}});\n-        push(@defines, @{$compile_options{\"${sourcefile}_DEFINES\"}});\n-        push(@incpaths, @{$compile_options{\"${sourcefile}_INCPATHS\"}});\n-    }\n-    removeDuplicates();\n-\n-    removeDuplicates();\n-    push(@{$build_structure{\"APPS\"}}, $appout);\n-    @{$build_structure{\"APPS_${appout}\"}} = (\"_DEFINES\", \"_INCLUDES\", \"_CFLAGS\", \"_LFLAGS\",\n-                                             \"_SOURCES\", \"_OBJECTS\", \"_LIBS\");\n-    @{$build_structure{\"APPS_${appout}_DEFINES\"}} = @defines;\n-    @{$build_structure{\"APPS_${appout}_INCLUDES\"}} = @incpaths;\n-    @{$build_structure{\"APPS_${appout}_CFLAGS\"}} = @cflags;\n-    @{$build_structure{\"APPS_${appout}_LFLAGS\"}} = @lflags;\n-    @{$build_structure{\"APPS_${appout}_SOURCES\"}} = @sources;\n-    @{$build_structure{\"APPS_${appout}_OBJECTS\"}} = @objfiles;\n-    @{$build_structure{\"APPS_${appout}_LIBS\"}} = @libs;\n-    clearCompileStep();\n-}\ndiff --git a/contrib/buildsystems/generate b/contrib/buildsystems/generate\ndeleted file mode 100755\nindex bc10f25ff24a..000000000000\n--- a/contrib/buildsystems/generate\n+++ /dev/null\n@@ -1,29 +0,0 @@\n-#!/usr/bin/perl -w\n-######################################################################\n-# Generate buildsystem files\n-#\n-# This script generate buildsystem files based on the output of a\n-# GNU Make --dry-run, enabling Windows users to develop Git with their\n-# trusted IDE with native projects.\n-#\n-# Note:\n-# It is not meant as *the* way of building Git with MSVC, but merely a\n-# convenience. The correct way of building Git with MSVC is to use the\n-# GNU Make tool to build with the maintained Makefile in the root of\n-# the project. If you have the msysgit environment installed and\n-# available in your current console, together with the Visual Studio\n-# environment you wish to build for, all you have to do is run the\n-# command:\n-#     make MSVC=1\n-#\n-# Copyright (C) 2009 Marius Storm-Olsen <mstormo@gmail.com>\n-######################################################################\n-use strict;\n-use File::Basename;\n-use Cwd;\n-\n-my $git_dir = getcwd();\n-$git_dir =~ s=\\\\=/=g;\n-$git_dir = dirname($git_dir) while (!-e \"$git_dir/git.c\" && \"$git_dir\" ne \"\");\n-die \"Couldn't find Git repo\" if (\"$git_dir\" eq \"\");\n-exec join(\" \", (\"PERL5LIB=${git_dir}/contrib/buildsystems ${git_dir}/contrib/buildsystems/engine.pl\", @ARGV));\ndiff --git a/contrib/buildsystems/parse.pl b/contrib/buildsystems/parse.pl\ndeleted file mode 100755\nindex c9656ece9931..000000000000\n--- a/contrib/buildsystems/parse.pl\n+++ /dev/null\n@@ -1,228 +0,0 @@\n-#!/usr/bin/perl -w\n-######################################################################\n-# Do not call this script directly!\n-#\n-# The generate script ensures that @INC is correct before the engine\n-# is executed.\n-#\n-# Copyright (C) 2009 Marius Storm-Olsen <mstormo@gmail.com>\n-######################################################################\n-use strict;\n-use File::Basename;\n-use Cwd;\n-\n-my $file = $ARGV[0];\n-die \"No file provided!\" if !defined $file;\n-\n-my ($cflags, $target, $type, $line);\n-\n-open(F, \"<$file\") || die \"Couldn't open file $file\";\n-my @data = <F>;\n-close(F);\n-\n-while (my $text = shift @data) {\n-    my $ate_next;\n-    do {\n-        $ate_next = 0;\n-        $line++;\n-        chomp $text;\n-        chop $text if ($text =~ /\\r$/);\n-        if ($text =~ /\\\\$/) {\n-            $text =~ s/\\\\$//;\n-            $text .= shift @data;\n-            $ate_next = 1;\n-        }\n-    } while($ate_next);\n-\n-    if($text =~ / -c /) {\n-        # compilation\n-        handleCompileLine($text, $line);\n-\n-    } elsif ($text =~ / -o /) {\n-        # linking executable\n-        handleLinkLine($text, $line);\n-\n-    } elsif ($text =~ /\\.o / && $text =~ /\\.a /) {\n-        # libifying\n-        handleLibLine($text, $line);\n-\n-#    } elsif ($text =~ /^cp /) {\n-#        # copy file around\n-#\n-#    } elsif ($text =~ /^rm -f /) {\n-#        # shell command\n-#\n-#    } elsif ($text =~ /^make[ \\[]/) {\n-#        # make output\n-#\n-#    } elsif ($text =~ /^echo /) {\n-#        # echo to file\n-#\n-#    } elsif ($text =~ /^if /) {\n-#        # shell conditional\n-#\n-#    } elsif ($text =~ /^tclsh /) {\n-#        # translation stuff\n-#\n-#    } elsif ($text =~ /^umask /) {\n-#        # handling boilerplates\n-#\n-#    } elsif ($text =~ /\\$\\(\\:\\)/) {\n-#        # ignore\n-#\n-#    } elsif ($text =~ /^FLAGS=/) {\n-#        # flags check for dependencies\n-#\n-#    } elsif ($text =~ /^'\\/usr\\/bin\\/perl' -MError -e/) {\n-#        # perl commands for copying files\n-#\n-#    } elsif ($text =~ /generate-cmdlist\\.sh/) {\n-#        # command for generating list of commands\n-#\n-#    } elsif ($text =~ /^test / && $text =~ /|| rm -f /) {\n-#        # commands removing executables, if they exist\n-#\n-#    } elsif ($text =~ /new locations or Tcl/) {\n-#        # command for detecting Tcl/Tk changes\n-#\n-#    } elsif ($text =~ /mkdir -p/) {\n-#        # command creating path\n-#\n-#    } elsif ($text =~ /: no custom templates yet/) {\n-#        # whatever\n-\n-    } else {\n-#        print \"Unhandled (line: $line): $text\\n\";\n-    }\n-}\n-close(F);\n-\n-# use Data::Dumper;\n-# print \"Parsed build structure:\\n\";\n-# print Dumper(%build_structure);\n-\n-# -------------------------------------------------------------------\n-# Functions under here\n-# -------------------------------------------------------------------\n-my (%build_structure, @defines, @incpaths, @cflags, @sources);\n-\n-sub clearCompileStep\n-{\n-    @defines = ();\n-    @incpaths = ();\n-    @cflags = ();\n-    @sources = ();\n-}\n-\n-sub removeDuplicates\n-{\n-    my (%dupHash, $entry);\n-    %dupHash = map { $_, 1 } @defines;\n-    @defines = keys %dupHash;\n-\n-    %dupHash = map { $_, 1 } @incpaths;\n-    @incpaths = keys %dupHash;\n-\n-    %dupHash = map { $_, 1 } @cflags;\n-    @cflags = keys %dupHash;\n-\n-    %dupHash = map { $_, 1 } @sources;\n-    @sources = keys %dupHash;\n-}\n-\n-sub handleCompileLine\n-{\n-    my ($line, $lineno) = @_;\n-    my @parts = split(' ', $line);\n-    shift(@parts); # ignore cmd\n-    while (my $part = shift @parts) {\n-        if (\"$part\" eq \"-o\") {\n-            # ignore object file\n-            shift @parts;\n-        } elsif (\"$part\" eq \"-c\") {\n-            # ignore compile flag\n-        } elsif (\"$part\" eq \"-c\") {\n-        } elsif ($part =~ /^.?-I/) {\n-            push(@incpaths, $part);\n-        } elsif ($part =~ /^.?-D/) {\n-            push(@defines, $part);\n-        } elsif ($part =~ /^-/) {\n-            push(@cflags, $part);\n-        } elsif ($part =~ /\\.(c|cc|cpp)$/) {\n-            push(@sources, $part);\n-        } else {\n-            die \"Unhandled compiler option @ line $lineno: $part\";\n-        }\n-    }\n-    #print \"Sources: @sources\\nCFlags: @cflags\\nDefine: @defines\\nIncpat: @incpaths\\n\";\n-    #exit(1);\n-}\n-\n-sub handleLibLine\n-{\n-    my ($line, $lineno) = @_;\n-    my (@objfiles, @lflags, $libout, $part);\n-    # kill cmd and rm 'prefix'\n-    $line =~ s/^rm -f .* && .* rcs //;\n-    my @parts = split(' ', $line);\n-    while ($part = shift @parts) {\n-        if ($part =~ /^-/) {\n-            push(@lflags, $part);\n-        } elsif ($part =~ /\\.(o|obj)$/) {\n-            push(@objfiles, $part);\n-        } elsif ($part =~ /\\.(a|lib)$/) {\n-            $libout = $part;\n-        } else {\n-            die \"Unhandled lib option @ line $lineno: $part\";\n-        }\n-    }\n-    #print \"LibOut: '$libout'\\nLFlags: @lflags\\nOfiles: @objfiles\\n\";\n-    #exit(1);\n-    removeDuplicates();\n-    push(@{$build_structure{\"LIBS\"}}, $libout);\n-    @{$build_structure{\"LIBS_${libout}\"}} = (\"_DEFINES\", \"_INCLUDES\", \"_CFLAGS\", \"_SOURCES\",\n-                                             \"_OBJECTS\");\n-    @{$build_structure{\"LIBS_${libout}_DEFINES\"}} = @defines;\n-    @{$build_structure{\"LIBS_${libout}_INCLUDES\"}} = @incpaths;\n-    @{$build_structure{\"LIBS_${libout}_CFLAGS\"}} = @cflags;\n-    @{$build_structure{\"LIBS_${libout}_SOURCES\"}} = @sources;\n-    @{$build_structure{\"LIBS_${libout}_OBJECTS\"}} = @objfiles;\n-    clearCompileStep();\n-}\n-\n-sub handleLinkLine\n-{\n-    my ($line, $lineno) = @_;\n-    my (@objfiles, @lflags, @libs, $appout, $part);\n-    my @parts = split(' ', $line);\n-    shift(@parts); # ignore cmd\n-    while ($part = shift @parts) {\n-        if ($part =~ /^-[GRIDO]/) {\n-            # eat compiler flags\n-        } elsif (\"$part\" eq \"-o\") {\n-            $appout = shift @parts;\n-        } elsif ($part =~ /^-/) {\n-            push(@lflags, $part);\n-        } elsif ($part =~ /\\.(a|lib)$/) {\n-            push(@libs, $part);\n-        } elsif ($part =~ /\\.(o|obj)$/) {\n-            push(@objfiles, $part);\n-        } else {\n-            die \"Unhandled lib option @ line $lineno: $part\";\n-        }\n-    }\n-    #print \"AppOut: '$appout'\\nLFlags: @lflags\\nLibs  : @libs\\nOfiles: @objfiles\\n\";\n-    #exit(1);\n-    removeDuplicates();\n-    push(@{$build_structure{\"APPS\"}}, $appout);\n-    @{$build_structure{\"APPS_${appout}\"}} = (\"_DEFINES\", \"_INCLUDES\", \"_CFLAGS\", \"_LFLAGS\",\n-                                             \"_SOURCES\", \"_OBJECTS\", \"_LIBS\");\n-    @{$build_structure{\"APPS_${appout}_DEFINES\"}} = @defines;\n-    @{$build_structure{\"APPS_${appout}_INCLUDES\"}} = @incpaths;\n-    @{$build_structure{\"APPS_${appout}_CFLAGS\"}} = @cflags;\n-    @{$build_structure{\"APPS_${appout}_LFLAGS\"}} = @lflags;\n-    @{$build_structure{\"APPS_${appout}_SOURCES\"}} = @sources;\n-    @{$build_structure{\"APPS_${appout}_OBJECTS\"}} = @objfiles;\n-    @{$build_structure{\"APPS_${appout}_LIBS\"}} = @libs;\n-    clearCompileStep();\n-}\n-- \ngitgitgadget\n\n"},{"id":"517245","messageId":"aBi8KQWP4YAi6Gph@pks.im","threadId":"63395","inReplyTo":"1ec2a4bb1d58ea8cfa6abb2a0e625ef3e0db2a1f.1746430790.git.gitgitgadget@gmail.com","subject":"Re: [PATCH 2/3] contrib/buildsystems: drop support for building .vcproj/.vcxproj files","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-05-05T13:24:57Z","receivedAt":"2025-05-05T13:25:02Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Mon, May 05, 2025 at 07:39:49AM +0000, Johannes Schindelin via GitGitGadget wrote:\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> \n> Before we had CMake support, the only way to build Git in Visual Studio\n> was via this hacky `generate` script.\n> \n> For a while I tried to fix whenever things got broken, in particular to\n> allow building confidence in embargoed releases by running the CI builds\n> in Azure Pipelines in a private Azure DevOps project. I even carried the\n> patches in Git for Windows with the intention of upstreaming them,\n> eventually.\n> \n> However, it is a lot of work with too little benefit. CMake is much\n> better supported by Visual Studio. So let's drop this hacky script (plus\n> support code).\n\nMakes sense. This made me wonder whether we also want to get rid of\n\"contrib/vscode\", which is similar in spirit. Both Meson and CMake can\nbe used natively with VSCode.\n\nThanks for working on these cleanups!\n\nPatrick\n"},{"id":"517247","messageId":"ddcbbd1a-dd36-a115-aa77-d5bd3c210cd7@gmx.de","threadId":"63395","inReplyTo":"aBi8KQWP4YAi6Gph@pks.im","subject":"Re: [PATCH 2/3] contrib/buildsystems: drop support for building .vcproj/.vcxproj files","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2025-05-05T13:46:14Z","receivedAt":"2025-05-05T13:46:19Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Patrick,\n\nOn Mon, 5 May 2025, Patrick Steinhardt wrote:\n\n> [I] wonder whether we also want to get rid of \"contrib/vscode\", which is\n> similar in spirit. Both Meson and CMake can be used natively with\n> VSCode.\n\nI would like to avoid that, as the `contrib/vscode/` files do not even\nhave anything in the way of building Git. Instead, there is a\nconfiguration that allows Intellisense to find the symbols' declarations\nand definitions, and it specifies a little bit the style conventions as\nwell as common terms that the cSpell checker benefits from.\n\nI use this on almost a daily basis, so I believe that `contrib/vscode/` is\nin a _much_ better shape than `contrib/buildsystems/`' Visual Studio\nsupport code ever was. For that reason, I am a lot more in favor of\nkeeping the `vscode/` stuff.\n\nCiao,\nJohannes\n"},{"id":"517248","messageId":"xmqq4ixzrwq0.fsf@gitster.g","threadId":"63395","inReplyTo":"pull.1916.git.1746430790.gitgitgadget@gmail.com","subject":"Re: [PATCH 0/3] Some CI/buildsystems cleanup","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-05-05T13:52:23Z","receivedAt":"2025-05-05T13:52:26Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Johannes Schindelin via GitGitGadget\" <gitgitgadget@gmail.com>\nwrites:\n\n> This patch series drops a couple of no-longer-used parts of Git's code base.\n>\n> Johannes Schindelin (3):\n>   ci: stop linking the `prove` cache\n>   contrib/buildsystems: drop support for building .vcproj/.vcxproj files\n>   config.mak.uname: drop the `vcxproj` target\n\nThanks, will queue.\n"},{"id":"517250","messageId":"aBjMJO9VSAVjOQWB@pks.im","threadId":"63395","inReplyTo":"ddcbbd1a-dd36-a115-aa77-d5bd3c210cd7@gmx.de","subject":"Re: [PATCH 2/3] contrib/buildsystems: drop support for building .vcproj/.vcxproj files","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-05-05T14:33:08Z","receivedAt":"2025-05-05T14:33:13Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Mon, May 05, 2025 at 03:46:14PM +0200, Johannes Schindelin wrote:\n> Hi Patrick,\n> \n> On Mon, 5 May 2025, Patrick Steinhardt wrote:\n> \n> > [I] wonder whether we also want to get rid of \"contrib/vscode\", which is\n> > similar in spirit. Both Meson and CMake can be used natively with\n> > VSCode.\n> \n> I would like to avoid that, as the `contrib/vscode/` files do not even\n> have anything in the way of building Git. Instead, there is a\n> configuration that allows Intellisense to find the symbols' declarations\n> and definitions, and it specifies a little bit the style conventions as\n> well as common terms that the cSpell checker benefits from.\n> \n> I use this on almost a daily basis, so I believe that `contrib/vscode/` is\n> in a _much_ better shape than `contrib/buildsystems/`' Visual Studio\n> support code ever was. For that reason, I am a lot more in favor of\n> keeping the `vscode/` stuff.\n\nFine with me, thanks for the explanation!\n\nPatrick\n"},{"id":"519400","messageId":"c3273a46-aab4-8dda-1634-9de233290f55@gmx.de","threadId":"63395","inReplyTo":"1ec2a4bb1d58ea8cfa6abb2a0e625ef3e0db2a1f.1746430790.git.gitgitgadget@gmail.com","subject":"Re: [PATCH 2/3] contrib/buildsystems: drop support for building .vcproj/.vcxproj files","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2025-06-02T08:38:27Z","receivedAt":"2025-06-02T08:38:33Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Mon, 5 May 2025, Johannes Schindelin via GitGitGadget wrote:\n\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> \n> Before we had CMake support, the only way to build Git in Visual Studio\n> was via this hacky `generate` script.\n> \n> For a while I tried to fix whenever things got broken, in particular to\n> allow building confidence in embargoed releases by running the CI builds\n> in Azure Pipelines in a private Azure DevOps project. I even carried the\n> patches in Git for Windows with the intention of upstreaming them,\n> eventually.\n> \n> However, it is a lot of work with too little benefit. CMake is much\n> better supported by Visual Studio. So let's drop this hacky script (plus\n> support code).\n\nI just noticed that you applied this patch as dc5e178f608f\n(contrib/buildsystems: drop support for building . vcproj/.vcxproj files,\n2025-05-05). Notice the incorrect space between \".\" and \"vcproj\". Any idea\nwhere that came from?\n\nCiao,\nJohannes\n"},{"id":"519471","messageId":"xmqqh60yuqvg.fsf@gitster.g","threadId":"63395","inReplyTo":"c3273a46-aab4-8dda-1634-9de233290f55@gmx.de","subject":"Re: [PATCH 2/3] contrib/buildsystems: drop support for building .vcproj/.vcxproj files","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-06-02T15:04:19Z","receivedAt":"2025-06-02T15:04:22Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> I just noticed that you applied this patch as dc5e178f608f\n> (contrib/buildsystems: drop support for building . vcproj/.vcxproj files,\n> 2025-05-05). Notice the incorrect space between \".\" and \"vcproj\". Any idea\n> where that came from?\n\nIt was almost a month ago.  \n\nI have no idea and I only have one reflog entry on that topic branch\n(meaning it is unlikely that it came from a manual editing).\n"}]}