Skip to content

Fix MSVC support, at long last

Johannes Schindelin via GitGitGadget git 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest20 patches 1 replyIn review
  2. v220 patches 2 repliesSuperseded
  3. v117 patches 20 repliesSuperseded

Changes in v3 from the cover letter

* Fixed the incorrect split-out of the "msvc: update Makefile to allow for spaces in the compiler path" patch: I had accidentally reverted that change in a later patch in the series.

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/20mingw: fix a typo in the msysGit-specific sectionconfig.mak.uname+1 -10 replies
2/20Mark .bat files as requiring CR/LF endings.gitattributes+1 -00 replies
3/20t0001 (mingw): do not expect a specific order of stdout/stderrt/t0001-init.sh+2 -20 replies
4/20cache-tree/blame: avoid reusing the DEBUG constantbuiltin/blame.c cache-tree.c+10 -100 replies
5/20obstack: fix compiler warningcompat/obstack.h+1 -10 replies
6/20mingw: replace mingw_startup() hackcompat/mingw.c compat/mingw.h config.mak.uname+47 -310 replies
7/20msvc: fix dependencies of compat/msvc.cconfig.mak.uname+2 -00 replies
8/20msvc: include sigset_t definitioncompat/msvc.h+2 -00 replies
9/20msvc: define O_ACCMODEcompat/msvc.h+2 -00 replies
10/20msvc: mark a variable as non-constcompat/mingw.c+4 -10 replies
11/20msvc: do not re-declare the timespec structcompat/mingw.h+2 -00 replies
12/20msvc: define ftello()compat/msvc.h+2 -00 replies
13/20msvc: fix detect_msys_tty()compat/winansi.c+13 -00 replies
14/20msvc: update Makefile to allow for spaces in the compiler pathMakefile+1 -10 replies
15/20msvc: support building Git using MS Visual C++Makefile compat/mingw.c compat/vcbuild/.gitignore +6 more+473 -150 replies
16/20msvc: add a compile-time flag to allow detailed heap debuggingcompat/mingw.c config.mak.uname git-compat-util.h+19 -00 replies
17/20msvc: add pragmas for common warningscompat/msvc.h+4 -00 replies
18/20msvc: do not pretend to support all signalscompat/mingw.c+25 -00 replies
19/20msvc: avoid debug assertion windows in Debug Modecompat/mingw.c+4 -00 replies
20/20msvc: ignore .dll and incremental compile output.gitignore+5 -00 replies

Reviews trailers per patch

None of the 20 patches has a Reviewed-by or Acked-by.

PatchYue Lin HoPhilip Oakley
1/20
2/20
3/20
4/20
5/20
6/20
7/20
8/20
9/20
10/20
11/20
12/20
13/20
14/20
15/20Helped-by Helped-by
16/20
17/20
18/20
19/20
20/20

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v3 thread

Cover letter [PATCH v3 00/20] Fix MSVC support, at long last

Philip Oakley and Jeff Hostetler worked quite a bit on getting Git to compile with MS Visual C again, and this patch series is the culmination of those efforts. With these patches, it is as easy as

make MSVC=1

Note: the patches went through quite the number of iterations. For example, for a long time we targeted Visual Studio 2015, and used NuGet packages for the dependencies (such as OpenSSL, cURL, etc), while the current iteration targets Visual Studio 2017 and uses vcpkg
[https://docs.microsoft.com/en-us/cpp/vcpkg?view=vs-2017] for dependencies. Hopefully I did not forget to remove any remnants of those previous versions.

Please also note that this patch series is part 1 of 3 in a bigger story:
the next patch series will add support to build Git in Microsoft Visual Studio, and the third patch series will add Continuous Testing by adding an MSVC build and a corresponding parallelized test job to our Azure Pipeline.

Changes since v2:

* Fixed the incorrect split-out of the "msvc: update Makefile to allow for spaces in the compiler path" patch: I had accidentally reverted that change in a later patch in the series.

Changes since v1:

* The BASIC_CLFAGS typo was fixed.
* Instead of sorting the output of stdout/stderr, the fixed test case in t0001 now greps for the tell-tales it wants to be present.
* In addition to cache-tree.c's DEBUG constant, now also builtin/blame.c's is renamed.
* Two changes were factored out of the patch titled "msvc: support building Git using MS Visual C++": the support for spaces in SANE_TOOL_PATH, and the support for the compile time flag to enable CrtDbg's detailed heap diagnostics.
* A comment about the vcxproj target has been dropped; The corresponding change is slated for a future patch series.
* A left-over "TODO" comment was replaced by stating the final decision that only Visual Studio 2015 or later are supported for now.
* A left-over, commented-out SIGINT case label was removed, and an adjacent comment was moved so that its indentation no longer looks strange.

Jeff Hostetler (10):
cache-tree/blame: avoid reusing the DEBUG constant
msvc: mark a variable as non-const
msvc: do not re-declare the timespec struct
msvc: define ftello()
msvc: fix detect_msys_tty()
msvc: update Makefile to allow for spaces in the compiler path
msvc: support building Git using MS Visual C++
msvc: add a compile-time flag to allow detailed heap debugging
msvc: do not pretend to support all signals
msvc: ignore .dll and incremental compile output

Johannes Schindelin (7):
mingw: fix a typo in the msysGit-specific section Mark .bat files as requiring CR/LF endings
t0001 (mingw): do not expect a specific order of stdout/stderr
obstack: fix compiler warning
mingw: replace mingw_startup() hack
msvc: fix dependencies of compat/msvc.c
msvc: avoid debug assertion windows in Debug Mode

Philip Oakley (3):
msvc: include sigset_t definition
msvc: define O_ACCMODE
msvc: add pragmas for common warnings

 .gitattributes                     |   1 +
 .gitignore                         |   5 +
 Makefile                           |  42 +++++++-
 builtin/blame.c                    |   6 +-
 cache-tree.c                       |  14 +--
 compat/mingw.c                     |  99 +++++++++++++----
 compat/mingw.h                     |  24 +++--
 compat/msvc.h                      |  10 ++
 compat/obstack.h                   |   2 +-
 compat/vcbuild/.gitignore          |   3 +
 compat/vcbuild/README              |  39 +++++++
 compat/vcbuild/find_vs_env.bat     | 168 +++++++++++++++++++++++++++++
 compat/vcbuild/scripts/clink.pl    |  41 ++++++-
 compat/vcbuild/vcpkg_copy_dlls.bat |  39 +++++++
 compat/vcbuild/vcpkg_install.bat   |  80 ++++++++++++++
 compat/winansi.c                   |  13 +++
 config.mak.uname                   |  83 +++++++++++---
 git-compat-util.h                  |   9 ++
 t/t0001-init.sh                    |   4 +-
 19 files changed, 620 insertions(+), 62 deletions(-)
 create mode 100644 compat/vcbuild/.gitignore
 create mode 100644 compat/vcbuild/find_vs_env.bat
 create mode 100644 compat/vcbuild/vcpkg_copy_dlls.bat
 create mode 100644 compat/vcbuild/vcpkg_install.bat

base-commit: b697d92f56511e804b8ba20ccbe7bdc85dc66810
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-149%2Fdscho%2Fmsvc-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-149/dscho/msvc-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/149

Range-diff vs v2:

  1:  9d4d6ae7db =  1:  9d4d6ae7db mingw: fix a typo in the msysGit-specific section
  2:  aa27e7f9cb =  2:  aa27e7f9cb Mark .bat files as requiring CR/LF endings
  3:  3e108cfb02 =  3:  3e108cfb02 t0001 (mingw): do not expect a specific order of stdout/stderr
  4:  90ac088d22 =  4:  90ac088d22 cache-tree/blame: avoid reusing the DEBUG constant
  5:  71d85b58b6 =  5:  71d85b58b6 obstack: fix compiler warning
  6:  02f618464f =  6:  02f618464f mingw: replace mingw_startup() hack
  7:  5c383985a1 =  7:  5c383985a1 msvc: fix dependencies of compat/msvc.c
  8:  0a2985dc3c =  8:  0a2985dc3c msvc: include sigset_t definition
  9:  99a2939cc2 =  9:  99a2939cc2 msvc: define O_ACCMODE
 10:  1542e8abe5 = 10:  1542e8abe5 msvc: mark a variable as non-const
 11:  51d73c61d3 = 11:  51d73c61d3 msvc: do not re-declare the timespec struct
 12:  7cfd0fc9b4 = 12:  7cfd0fc9b4 msvc: define ftello()
 13:  f528883d97 = 13:  f528883d97 msvc: fix detect_msys_tty()
 14:  63bf9f1f92 = 14:  63bf9f1f92 msvc: update Makefile to allow for spaces in the compiler path
 15:  245f28ac3b ! 15:  fee0ad048e msvc: support building Git using MS Visual C++
     @@ -43,15 +43,6 @@
       --- a/Makefile
       +++ b/Makefile
      @@
     - 
     - ifdef SANE_TOOL_PATH
     - SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
     --BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix "$(SANE_TOOL_PATH_SQ)"|'
     -+BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
     - PATH := $(SANE_TOOL_PATH):${PATH}
     - else
     - BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
     -@@
       	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
       	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
       	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
 16:  e7888bedbd = 16:  993b6bcd0a msvc: add a compile-time flag to allow detailed heap debugging
 17:  d9668558dd = 17:  42f5b8cee8 msvc: add pragmas for common warnings
 18:  c883f037e0 = 18:  c9a6f6892c msvc: do not pretend to support all signals
 19:  51a20ff2df = 19:  7cb0434fac msvc: avoid debug assertion windows in Debug Mode
 20:  4d44d1fab1 = 20:  4a7ceb2172 msvc: ignore .dll and incremental compile output
Signature · 1 line
gitgitgadget