From: Philip Oakley Date: Wed, 27 Nov 2019 17:56:55 GMT Subject: Re: [PATCH 1/1] contrib/buildsystems: fix Visual Studio Debug configuration Message-ID: In-Reply-To: <525669b3b38ed57d6d4f188dfe0bb8fe10b63749.1569227313.git.gitgitgadget@gmail.com> On 23/09/2019 09:28, Alexandr Miloslavskiy via GitGitGadget wrote: > From: Alexandr Miloslavskiy > > Even though Debug configuration builds, the resulting build is incorrect > in a subtle way: it mixes up Debug and Release binaries, which in turn > causes hard-to-predict bugs. > > In my case, when git calls iconv library, iconv sets 'errno' and git > then tests it, but in Debug and Release CRT those 'errno' are different > memory locations. > > This patch addresses 3 connected bugs: > 1) Typo in '\(Configuration)'. As a result, Debug configuration > condition is always false and Release path is taken instead. > 2) Regexp that replaced 'zlib.lib' with 'zlibd.lib' was only affecting > the first occurrence. However, some projects have it listed twice. > Previously this bug was hidden, because Debug path was never taken. > I decided that avoiding double -lz in makefile is fragile and I'd > better replace all occurrences instead. > 3) In Debug, 'libcurl-d.lib' should be used instead of 'libcurl.lib'. > Previously this bug was hidden, because Debug path was never taken. I just bumped against a potential issue like this. I was test compiling [1a,b] the `vs/master` branch from Git-For-Windows and got the LINK error that the 'libcurl-d.lib' was not found (4 places). Error    LNK1104    cannot open file 'libcurl-d.lib' git-imap-send    C:\git-sdk-64\usr\src\git\git-imap-send\ LINK    1 Having just located this email, I changed the build type to 'Release' and the errors disappeared. Do we also need to identify where the libcurl-d.lib will be found? i.e. is it something that needs including via the sdk pacman list (I think I'm up to date but maybe not..) A quick web search didn't show any hits for `libcurl-d.lib` (with the dash `-`), though did find a few for `libcurld.lib`. Philip Why compiling: [1a] https://www.sourcetrail.com is a cross-platform source explorer that helps you get productive on unfamiliar source code. [1b] Sourcetrail is now free and open-source https://www.sourcetrail.com/blog/open_source/ > > Signed-off-by: Alexandr Miloslavskiy > --- > contrib/buildsystems/Generators/Vcxproj.pm | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/contrib/buildsystems/Generators/Vcxproj.pm b/contrib/buildsystems/Generators/Vcxproj.pm > index 576ccabe1d..7b1e277eca 100644 > --- a/contrib/buildsystems/Generators/Vcxproj.pm > +++ b/contrib/buildsystems/Generators/Vcxproj.pm > @@ -79,7 +79,8 @@ sub createProject { > if (!$static_library) { > $libs_release = join(";", sort(grep /^(?!libgit\.lib|xdiff\/lib\.lib|vcs-svn\/lib\.lib)/, @{$$build_structure{"$prefix${name}_LIBS"}})); > $libs_debug = $libs_release; > - $libs_debug =~ s/zlib\.lib/zlibd\.lib/; > + $libs_debug =~ s/zlib\.lib/zlibd\.lib/g; > + $libs_debug =~ s/libcurl\.lib/libcurl-d\.lib/g; > } > > $defines =~ s/-D//g; > @@ -119,13 +120,13 @@ sub createProject { > x86-windows > x64-windows > $cdup\\compat\\vcbuild\\vcpkg\\installed\\\$(VCPKGArch) > - \$(VCPKGArchDirectory)\\debug\\bin > - \$(VCPKGArchDirectory)\\debug\\lib > - \$(VCPKGArchDirectory)\\bin > - \$(VCPKGArchDirectory)\\lib > + \$(VCPKGArchDirectory)\\debug\\bin > + \$(VCPKGArchDirectory)\\debug\\lib > + \$(VCPKGArchDirectory)\\bin > + \$(VCPKGArchDirectory)\\lib > \$(VCPKGArchDirectory)\\include > - $libs_debug > - $libs_release > + $libs_debug > + $libs_release > > >