summaryrefslogtreecommitdiffstats
path: root/Source/cmSystemTools.cxx
Commit message (Collapse)AuthorAgeFilesLines
* file(ARCHIVE_CREATE): add WORKING_DIRECTORY optionYuri Witte2024-09-111-1/+8
| | | | | Fixes: #25260 Issue: #21653
* Source: Avoid comparing pointers to nullptrVitaly Stakhovsky2024-08-271-4/+4
|
* Merge topic 'autogen-predefs-emscripten'Brad King2024-08-221-0/+11
|\ | | | | | | | | | | | | | | 8d1803d463 AutoGen: Run batch scripts using cmd.exe on windows platforms explicitly 9ab270f47d cmSystemTools: Add GetComspec method to get cmd on Windows Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9733
| * cmSystemTools: Add GetComspec method to get cmd on WindowsAlexey Edelev2024-08-211-0/+11
| | | | | | | | | | | | The function attempts to read the path to cmd executable from the COMSPEC environment variable. Falls back to cmd.exe if the respective environment variable is not set or path doesn't exist.
* | Refactor: Eliminate redundant `operator<<` callsAlex Turbov2024-08-141-8/+8
| |
* | Refactor: Eliminate sequential calls to `cmSystemTools::Stdout`Alex Turbov2024-08-131-4/+3
|/
* cmSystemTools: Revise MoveFileIfDifferent to return cmsys::StatusAlex Turbov2024-07-181-4/+6
| | | | Help callers recover errors without relying on global state.
* cmSystemTools: Add CMake config directoryMartin Duffy2024-07-031-0/+47
|
* file(RPATH_CHANGE ...): no-op for static binaryHarmen Stoppels2024-06-241-0/+4
| | | | | | | | | | Setting `CMAKE_INSTALL_RPATH` on a project that contains statically linked executables breaks the install step, since rpaths cannot be changed. This commit makes rpath adjustments not an error on static libraries. Fixes #26078
* Merge topic 'ctest-windows-std-handles'Brad King2024-06-141-27/+0
|\ | | | | | | | | | | | | | | e4d0169107 ctest: Fix spurious build failures with CTEST_USE_LAUNCHERS on Windows Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !9598
| * ctest: Fix spurious build failures with CTEST_USE_LAUNCHERS on WindowsBrad King2024-06-141-27/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove the stdio handle inheritance suppression originally added by commit f262298bb0 (... do not inherit pipes in child procs for ctest so it can kill them, 2007-09-11, v2.6.0~1136). It's not clear what problem it was trying to solve, was only done in `ctest` and not `cmake`, and since commit 9c3ffe2474 (BUG: fix problem with stdout and stderr not showing up in ms dos shells, 2007-09-25, v2.6.0~1066) has not been done in `ctest` launched under interactive consoles. Furthermore, the code has been spuriously breaking stdio when `ctest` is started with both stdout and stderr connected to the same pipe, such as when `ctest --launch` is used under `ninja`. This is because it used `DuplicateHandle` with `DUPLICATE_CLOSE_SOURCE` on the stdout handle and then the stderr handle. If the handles are the same, then the stderr handle becomes invalid in between these operations, leading to likely-undefined behavior. Since commit 96b3dd329e (cmCTestLaunchReporter: Replace cmsysProcess with cmUVProcessChain, 2023-07-26, v3.28.0-rc1~138^2~2) this became more noticeable because `uv_spawn` performs additional verification on stdio handles. This could be fixed by instead suppressing inheritance via SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0); However, the functionality no longer seems necessary, so remove it.
| * Revert use of libuv for process execution for 3.28Brad King2024-01-241-175/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Wide use of CMake 3.28.{1,0[-rcN]} has uncovered some hangs and crashes in libuv SIGCHLD handling on some platforms, particularly in virtualization environments on macOS hosts. Although the bug does not seem to be in CMake, we can restore stability in the CMake 3.28 release series for users of such platforms by reverting our new uses of libuv for process execution. Revert implementation changes merged by commit 4771544386 (Merge topic 'replace-cmsysprocess-with-cmuvprocesschain', 2023-09-06, v3.28.0-rc1~138), but keep test suite updates. Issue: #25414, #25500, #25562, #25589
* | cmSystemTools: Fix compilation on DragonFly BSDCharlotte Koch2024-04-021-1/+2
| | | | | | | | Define `_XOPEN_SOURCE >= 700` to make `gettimeofday()` et al. available.
* | MSYS,CYGWIN: Hard-code host system names when built for these runtimesBrad King2024-02-011-9/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When CMake is built against the MSYS runtime library, `uname()` returns a name that depends on the `MSYSTEM` environment variable. Previously we truncated `MSYS_...` to just `MSYS`, but outside `MSYSTEM=MSYS` environments, names like `MINGW64_NT-10.0-22000` were reported. The latter causes CMake to report an unsupported-platform error, which users report as an issue when the real problem is that they should be using a `MSYSTEM=MSYS` environment or a CMake that is not built against the MSYS runtime. For our purposes, if CMake is built against the MSYS runtime, the host platform is always `MSYS`. Similarly for `CYGWIN`.
* | Ensure stdin, stdout, stderr FILE streams are open on WindowsBrad King2024-01-251-28/+15
| | | | | | | | | | | | | | | | Extend commit c85524a94a (Ensure stdin, stdout, and stderr pipes are always open, 2019-05-02, v3.15.0-rc1~171^2) to cover the `stdin`, `stdout`, and `stderr` FILE streams from `<stdio.h>`. Issue: #25625
* | Merge topic 'cmuvprocesschain'Brad King2024-01-251-9/+3
|\ \ | |/ | | | | | | | | | | | | | | | | adb3e13d32 cmUVProcessChain: Tolerate fileno() of invalid FILE stream b6e4e4babc cmUVProcessChain: Simplify SetExternalStream usage 116bb2b70f cmUVProcessChain: Simplify builder initialization d32c30906a Tests: Add missing include in testUVProcessChainHelper on Windows Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9181
| * cmUVProcessChain: Simplify SetExternalStream usageBrad King2024-01-241-9/+3
| | | | | | | | | | It is commonly called with the `fileno()` of a `FILE*` stream, so accept the latter directly.
* | Source: Avoid out-of-range inputs to std::isspace()Brad King2024-01-171-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | `isspace` takes `int` but documents that the value must be representable by `unsigned char`, or be EOF. Use a wrapper to cast to `unsigned char` to avoid sign extension while converting to `int`. This generalizes the fix from commit 5e8c176e2a (cmExecuteProcessCommand: Cast c to unsigned char before cast to int, 2024-01-05) to other `isspace` call sites. This was detected by assertions in the MSVC standard library while processing UTF-8 text. Issue: #25561
* | LCC: get rid of ambiguous assignments of {} for LCCmakise-homura2024-01-161-2/+2
|/ | | | | | LCC 1.21 can't determine the exact type of right side of assignment and so produces an error. Here it is resolved by an intermediate variable.
* cmSystemTools::RunSingleCommand(): Pass stdin to child processKyle Edwards2023-11-021-1/+3
| | | | Fixes: #25383
* cmSystemTools::RunSingleCommand(): Replace cmsysProcess with cmUVProcessChainKyle Edwards2023-08-291-88/+114
| | | | And pass OUTPUT_PASSTHROUGH in one call where it was missing.
* cmCTestScriptHandler: Replace cmsysProcess with cmUVProcessChainKyle Edwards2023-08-291-20/+64
| | | | And update cmSystemTools::WaitForLine() to use cmUVProcessChain.
* cmSystemTools: move `ComputeCertificateThumbprint` to the only consumerBen Boeckel2023-08-081-76/+0
| | | | | There's no need to have this API on `cmSystemTools` with only a single consumer.
* cmSystemTools: remove `ComputeFileHash` methodBen Boeckel2023-08-081-8/+0
| | | | No longer used.
* cmSystemTools: remove `ComputeStringMD5` methodBen Boeckel2023-08-081-6/+0
| | | | No longer used.
* IWYU: Update for Debian 12 CI jobBrad King2023-07-281-1/+1
| | | | | | `include-what-you-use` diagnostics, in practice, are specific to the environment's compiler and standard library. Update includes to satisfy IWYU for our CI job under Debian 12.
* macOS: Add support for linking against .xcframework foldersKyle Edwards2023-07-261-0/+6
| | | | Issue: #21752
* cmSystemTools: Add helpers for reading and parsing PATH env varsBrad King2023-02-231-0/+26
|
* Remove component size limit for version comparisonsDavid Gobbi2023-02-201-7/+28
| | | | | | | | | The VersionCompare() function converted version components to 'unsigned long' prior to comparing them. Any version components too large for 'unsigned long' were treated as equal to ULONG_MAX. This impacted operators like VERSION_GREATER, VERSION_LESS, and VERSION_EQUAL. The new code does not limit the length of the version components for valid comparisons.
* Source: use C++11 nullptrscivision2023-02-141-21/+22
|
* Revise C++ coding style using clang-format-15Kitware Robot2023-01-181-1/+1
| | | | | | | | | | | | | | Run the `clang-format.bash` script to update all our C and C++ code to a new style defined by `.clang-format`. Use `clang-format` version 15. * If you reached this commit for a line in `git blame`, re-run the blame operation starting at the parent of this commit to see older history for the content. * See the parent commit for instructions to rebase a change across this style transition commit. Fixes: #24315
* file(COPY_FILE): Add option to retry on Windows if input access failsBrad King2022-11-171-1/+18
| | | | | | | | On Windows, a file may be inaccessible for a short time after it is created. This occurs for various reasons, including indexing, antivirus tools, and NTFS's asynchronous semantics. Add an `INPUT_MAY_BE_RECENT` option to tell CMake that the input file may have been recently created so that we can retry a few times to read it.
* cmSystemTools: Remove unused CopySingleFile overloadBrad King2022-11-171-7/+0
|
* file(COPY_FILE): Report if failure occurred on input or output pathBrad King2022-11-151-4/+14
| | | | | When we know whether a failure was associated with the input or the output path, include this information in the error message.
* cmSystemTools: Provide quiet link creation methodsBrad King2022-10-061-18/+25
| | | | Offer variants that let the caller handle error messages.
* cmSystemTools: Fix encoding of whole-environment lookup on Windowszhenhaonong2022-09-231-0/+9
| | | | | | | On Windows, `environ` is encoded by `CP_ACP`, which may be different from `KWSYS_ENCODING_DEFAULT_CODEPAGE`. When environment variables include a unicode character, they may be corrupted. Use `_wenviron` instead.
* cmSystemTools: Add MakeTempDirectoryMatthew Woehlke2022-09-051-1/+92
| | | | | | | | | | | | Add a cross-platform wrapper over mkdtemp. This will allow us to create guaranteed-unique directories. On POSIX platforms, this is simply a wrapper over mkdtemp. On Windows, we take a brute-force approach using C++11's random facilities and relying on attempts to create an existing directory resulting in an error. (This approach is very possibly how mkdtemp is implemented internally, and should be suitable for any platform if needed, although at present it only uses a partial set of substitution characters since Windows likely implies a case-insensitive file system.)
* cmake -E env: Add --modify flagAlex Reinking2022-08-171-1/+6
| | | | | | | | | | | | | | | | | | | | | | When `cmake -E env` is given the `--modify` flag, try to parse the following argument as an `ENVIRONMENT_MODIFICATION` operation and apply it to the environment. This generalizes `--unset=`: 1. When implementing `ENVIRONMENT_MODIFICATION` features for other CMake commands, the `MYVAR=OP:VALUE` strings do not need to be translated to OP-specific flags. 2. This provides a natural and consistent extension point to introduce new operations without introducing very many flags. 3. Users need to learn only one syntax to access the same functionality. There is one difference between the behavior here as compared to CTest's interpretation of the `ENVIRONMENT_MODIFICATION` test property. The `MYVAR=reset:` command when run in `cmake -E env` will reset `MYVAR` to whatever its value was when `cmake -E env` launched, rather than try to checkpoint after plain `MYVAR=VALUE` options. This makes `MYVAR=VALUE` and `--modify MYVAR=set:VALUE` semantically equivalent.
* cmCTestRunTest: Implement the ENVIRONMENT test property with EnvDiff tooAlex Reinking2022-08-151-5/+18
| | | | | | | | Going through the same internal API for both `ENVIRONMENT` and `ENVIRONMENT_MODIFICATION` properties will make it easier to implement checkpointing for `MYVAR=reset:` more efficiently if the need ever presents itself. It also makes the two-stage nature of the environment mutation clearer in the code itself.
* cmSystemTools: Add EnvDiff class to hold ENVIRONMENT_MODIFICATION logicAlex Reinking2022-08-151-0/+121
| | | | Prepare to re-use this logic when enhancing `cmake -E env`.
* Merge topic 'windows-symlink-dir'Brad King2022-08-021-12/+2
|\ | | | | | | | | | | | | a4f1c0fac8 Windows: Revert "Prefer junctions for directory symlinks" Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7530
| * Windows: Revert "Prefer junctions for directory symlinks"Brad King2022-08-011-12/+2
| | | | | | | | | | | | | | | | | | | | Revert commit 5101d586c4 (Windows: Prefer junctions for directory symlinks, 2022-02-22, v3.24.0-rc1~575^2). Junctions do not support `../` and other non-canonical paths. Revert their use pending further investigation. Fixes: #23781 Issue: #23257
* | Merge topic 'refactor-win-ver'Brad King2022-07-261-0/+38
|\ \ | |/ | | | | | | | | | | ee047a68f2 cmSystemTools: Factor out method to get Windows OS version Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7509
| * cmSystemTools: Factor out method to get Windows OS versionBrad King2022-07-251-0/+38
| | | | | | | | Factor the implementation out of `cmGlobalGenerator`.
* | cmSystemTools: Fix unsetenv() fallbackRaul Tambre2022-06-261-2/+1
| | | | | | | | | | | | | | The fallback path boils down to putenv(). Calling that with a "=" sets the variable to an empty string. Use cmSystemTools::UnPutEnv() instead, which correctly handles unsetting variables on a variety of systems.
* | Source: Replace uses of sprintf with safer snprintfSean McBride2022-06-221-1/+1
|/
* cmSystemTools: Fix 'ErrorOccurred' spellingFeRD (Frank Dana)2022-06-131-3/+3
| | | | | | | | Rename the booleans 's_ErrorOccured' and 's_FatalErrorOccured' to 's_ErrorOccurred' and 's_FatalErrorOccurred', respectively. Rename the getters and setters to 'Get[Fatal]ErrorOccurred' and 'Set[Fatal]ErrorOccurred', and fix all uses across the codebase.
* clang-tidy: address `readability-container-data-pointer` lintsBen Boeckel2022-05-241-5/+5
|
* cmake-presets: add ${pathListSep} macroErin Melucci2022-05-121-0/+9
| | | | Fixes: #23282
* cmake -E tar: Add --touch optionKasper Laudrup2022-03-231-6/+12
| | | | | | | | Similar to GNU tar add a --touch option to the tar extract command to skip extracting the timestamps from the files in the archive effectively touching them as if they were just created. Issue: #22746