From: Johannes Schindelin <Johannes.Schindelin@gmx.de> To: "Øystein Walle" <oystwa@gmail.com> Cc: gitgitgadget@gmail.com, congdanhqx@gmail.com, git@vger.kernel.org, sibisiddharthan.github@gmail.com, sunshine@sunshineco.com, szeder.dev@gmail.com Subject: Re: [PATCH v2 02/10] cmake: do find Git for Windows' shell interpreter Date: Mon, 28 Sep 2020 21:39:30 +0200 (CEST) [thread overview] Message-ID: <nycvar.QRO.7.76.6.2009281557390.50@tvgsbejvaqbjf.bet> (raw) In-Reply-To: <20200928111748.4122-1-oystwa@gmail.com> [-- Attachment #1: Type: text/plain, Size: 3523 bytes --] Hi Øystein, On Mon, 28 Sep 2020, Øystein Walle wrote: > > find_program(SH_EXE sh) > > if(NOT SH_EXE) > > - message(FATAL_ERROR "sh: shell interpreter was not found in your path, please install one." > > - "On Windows, you can get it as part of 'Git for Windows' install at https://gitforwindows.org/") > > + set(SH_EXE "C:/Program Files/Git/bin/sh.exe") > > + if(NOT EXISTS ${SH_EXE}) > > + message(FATAL_ERROR "sh: shell interpreter was not found in your path, please install one." > > + "On Windows, you can get it as part of 'Git for Windows' install at https://gitforwindows.org/") > > + endif() > > endif() > > You can write the find_program() command more succinctly as: > > find_program(SH_EXE sh PATHS "C:/Program Files/Git/bin") > > PATHS is is a list of extra directories to search, which are usually hard-coded > guesses[1]. This way we avoid an extra check and indentation level. Thank you, I was not aware of this neat feature. > I found my Visual Studio installation already contains a sh.exe. I think it > ships with VS by default; I can't even find a way to remove it. It's located > at: > > C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin\sh.exe > > When I started writing this up I figured that could serve as an additional > fallback. However, if I use that shell I have to add (...)/usr/bin to PATH as > the various scripts need expr and sed among other things. I get the same result > if I search "C:/Program Files/Git/usr/bin", but there is no equivalent > (...)/bin in the Git included with VS for some reason. Indeed. This is what I get in that case: -- snip -- 1> [CMake] Generating GIT-VERSION-FILE 1> [CMake] C:/git-sdk-64/usr/src/vs2017-test/contrib/buildsystems/../../GIT-VERSION-GEN: line 24: sed: command not found 1> [CMake] C:/git-sdk-64/usr/src/vs2017-test/contrib/buildsystems/../../GIT-VERSION-GEN: line 29: expr: command not found 1> [CMake] GIT_VERSION = 1> [CMake] CMake Error at C:\git-sdk-64\usr\src\vs2017-test\contrib\buildsystems\CMakeLists.txt:79 (string): 1> [CMake] string sub-command FIND requires 3 or 4 parameters. 1> [CMake] 1> [CMake] 1> [CMake] CMake Error at C:\git-sdk-64\usr\src\vs2017-test\contrib\buildsystems\CMakeLists.txt:83 (string): 1> [CMake] string sub-command REGEX, mode MATCH needs at least 5 arguments total to 1> [CMake] command. 1> [CMake] 1> [CMake] 1> [CMake] CMake Error at C:\git-sdk-64\usr\src\vs2017-test\contrib\buildsystems\CMakeLists.txt:87 (project): 1> [CMake] VERSION ".0" format invalid. -- snap -- The explanation is pretty simple: you cannot just call into `sh.exe` via an absolute path and expect it to add its containing directory to the `PATH`. It does not, and the symptom is that neither `sed` nor `expr` are found. One solution is to add it to the `PATH` manually, which is the original expectation in our `CMakeLists.txt` version. Another solution is to point it to `C:\Program Files\Git\bin\sh.exe` which is not, in fact, a shell, but a small wrapper executable whose job it is to set up a couple environment variables (`PATH` being one of them) and then spawning the _actual_ `sh.exe`. The source code for that wrapper: https://github.com/git-for-windows/MINGW-packages/blob/main/mingw-w64-git/git-wrapper.c As you figured out, it is _not_ enough to use `...\usr\bin\sh.exe` directly without adjusting the `PATH`. Ciao, Dscho
next prev parent reply other threads:[~2020-09-28 19:39 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-25 14:28 [PATCH 00/10] CMake and Visual Studio Johannes Schindelin via GitGitGadget 2020-09-25 14:28 ` [PATCH 01/10] cmake: ignore files generated by CMake as run in " Johannes Schindelin via GitGitGadget 2020-09-25 14:28 ` [PATCH 02/10] cmake: do find Git for Windows' shell interpreter Johannes Schindelin via GitGitGadget 2020-09-25 16:25 ` Sibi Siddharthan 2020-09-26 20:32 ` Johannes Schindelin 2020-09-27 2:25 ` Đoàn Trần Công Danh 2020-09-28 13:56 ` Johannes Schindelin 2020-09-29 14:04 ` Đoàn Trần Công Danh 2020-09-29 18:42 ` Johannes Schindelin 2020-09-25 14:28 ` [PATCH 03/10] cmake: ensure that the `vcpkg` packages are found on Windows Johannes Schindelin via GitGitGadget 2020-09-25 14:28 ` [PATCH 04/10] cmake: fall back to using `vcpkg`'s `msgfmt.exe` " Johannes Schindelin via GitGitGadget 2020-09-25 14:28 ` [PATCH 05/10] cmake: quote the path accurately when editing `test-lib.sh` Johannes Schindelin via GitGitGadget 2020-09-25 14:28 ` [PATCH 06/10] cmake (Windows): let the `.dll` files are found when running the tests Johannes Schindelin via GitGitGadget 2020-09-25 19:48 ` Eric Sunshine 2020-09-26 21:00 ` Johannes Schindelin 2020-09-25 14:28 ` [PATCH 07/10] cmake (Windows): complain when encountering an unknown compiler Johannes Schindelin via GitGitGadget 2020-09-25 17:29 ` Sibi Siddharthan 2020-09-26 20:33 ` Johannes Schindelin 2020-09-25 14:28 ` [PATCH 08/10] cmake (Windows): initialize vcpkg/build dependencies automatically Johannes Schindelin via GitGitGadget 2020-09-30 5:05 ` Sibi Siddharthan 2020-09-30 15:25 ` Johannes Schindelin 2020-09-25 14:28 ` [PATCH 09/10] cmake (Windows): recommend using Visual Studio's built-in CMake support Johannes Schindelin via GitGitGadget 2020-09-25 18:22 ` Junio C Hamano 2020-09-26 20:45 ` Johannes Schindelin 2020-09-25 14:28 ` [PATCH 10/10] hashmap_for_each_entry(): work around MSVC's run-time check failure #3 Johannes Schindelin via GitGitGadget 2020-09-25 18:38 ` Junio C Hamano 2020-09-26 16:54 ` Junio C Hamano 2020-09-26 20:57 ` Johannes Schindelin 2020-09-26 21:32 ` [PATCH v2 00/10] CMake and Visual Studio Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 01/10] cmake: ignore files generated by CMake as run in " Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 02/10] cmake: do find Git for Windows' shell interpreter Johannes Schindelin via GitGitGadget 2020-09-28 11:17 ` Øystein Walle 2020-09-28 19:39 ` Johannes Schindelin [this message] 2020-09-26 21:32 ` [PATCH v2 03/10] cmake: ensure that the `vcpkg` packages are found on Windows Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 04/10] cmake: fall back to using `vcpkg`'s `msgfmt.exe` " Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 05/10] cmake: quote the path accurately when editing `test-lib.sh` Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 06/10] cmake (Windows): let the `.dll` files be found when running the tests Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 07/10] cmake (Windows): complain when encountering an unknown compiler Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 08/10] cmake (Windows): initialize vcpkg/build dependencies automatically Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 09/10] cmake (Windows): recommend using Visual Studio's built-in CMake support Johannes Schindelin via GitGitGadget 2020-09-26 21:32 ` [PATCH v2 10/10] hashmap_for_each_entry(): workaround MSVC's runtime check failure #3 Junio C Hamano via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 00/11] CMake and Visual Studio Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 01/11] cmake: ignore files generated by CMake as run in " Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 02/11] cmake: do find Git for Windows' shell interpreter Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 03/11] cmake: ensure that the `vcpkg` packages are found on Windows Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 04/11] cmake: fall back to using `vcpkg`'s `msgfmt.exe` " Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 05/11] cmake: quote the path accurately when editing `test-lib.sh` Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 06/11] cmake (Windows): let the `.dll` files be found when running the tests Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 07/11] cmake (Windows): complain when encountering an unknown compiler Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 08/11] cmake (Windows): initialize vcpkg/build dependencies automatically Johannes Schindelin via GitGitGadget 2020-09-29 6:51 ` Sibi Siddharthan 2020-09-29 12:07 ` Johannes Schindelin 2020-09-28 21:09 ` [PATCH v3 09/11] cmake (Windows): recommend using Visual Studio's built-in CMake support Johannes Schindelin via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 10/11] hashmap_for_each_entry(): workaround MSVC's runtime check failure #3 Junio C Hamano via GitGitGadget 2020-09-28 21:09 ` [PATCH v3 11/11] cmake: fix typo in message when `msgfmt` was not found Johannes Schindelin via GitGitGadget 2020-09-28 22:11 ` Junio C Hamano 2020-09-29 12:07 ` Johannes Schindelin 2020-09-30 15:26 ` [PATCH v4 00/10] CMake and Visual Studio Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 01/10] cmake: ignore files generated by CMake as run in " Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 02/10] cmake: do find Git for Windows' shell interpreter Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 03/10] cmake: ensure that the `vcpkg` packages are found on Windows Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 04/10] cmake: fall back to using `vcpkg`'s `msgfmt.exe` " Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 05/10] cmake: quote the path accurately when editing `test-lib.sh` Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 06/10] cmake (Windows): let the `.dll` files be found when running the tests Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 07/10] cmake (Windows): complain when encountering an unknown compiler Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 08/10] cmake (Windows): initialize vcpkg/build dependencies automatically Johannes Schindelin via GitGitGadget 2020-09-30 19:17 ` Johannes Schindelin 2020-09-30 23:08 ` Junio C Hamano 2020-09-30 15:26 ` [PATCH v4 09/10] cmake (Windows): recommend using Visual Studio's built-in CMake support Johannes Schindelin via GitGitGadget 2020-09-30 15:26 ` [PATCH v4 10/10] hashmap_for_each_entry(): workaround MSVC's runtime check failure #3 Junio C Hamano via GitGitGadget
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=nycvar.QRO.7.76.6.2009281557390.50@tvgsbejvaqbjf.bet \ --to=johannes.schindelin@gmx.de \ --cc=congdanhqx@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitgitgadget@gmail.com \ --cc=oystwa@gmail.com \ --cc=sibisiddharthan.github@gmail.com \ --cc=sunshine@sunshineco.com \ --cc=szeder.dev@gmail.com \ --subject='Re: [PATCH v2 02/10] cmake: do find Git for Windows'\'' shell interpreter' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).