diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2023-09-27 19:54:35 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2023-09-27 20:49:46 +0300 |
commit | 0570308ddd9c0e39e85597ebc0e31d4fc81d436f (patch) | |
tree | def3228e05a673786802dd3d099103ff93b268ad | |
parent | liblzma: Update a comment. (diff) | |
download | xz-0570308ddd9c0e39e85597ebc0e31d4fc81d436f.tar.xz |
CMake: Fix Windows build with Clang/LLVM 17.
llvm-windres 17.0.0 has more accurate emulation of GNU windres, so
the hack for GNU windres must now be used with llvm-windres too.
LLVM 16.0.6 has the old behavior and there likely won't be more
16.x releases. So we can simply check for >= 17.0.0.
See also:
https://github.com/llvm/llvm-project/commit/2bcc0fdc58a220cb9921b47ec8a32c85f2511a47
-rw-r--r-- | CMakeLists.txt | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c8d52f2d..ffb381b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,19 +93,21 @@ set(CMAKE_MACOSX_BUNDLE OFF) # "syntax error" from windres. Using --use-temp-file prevents windres # from using popen() and this seems to fix the problem. # -# llvm-windres claims to be compatible with GNU windres but with that -# the \x20 results in "XZx20Utils" in the compiled binary. (At the -# same time it works correctly with clang (the C compiler).) The option -# --use-temp-file makes no difference. +# llvm-windres from Clang/LLVM 16.0.6 and older: The \x20 results +# in "XZx20Utils" in the compiled binary. The option --use-temp-file +# makes no difference. # -# CMake 3.25 doesn't have CMAKE_RC_COMPILER_ID so we rely on -# CMAKE_C_COMPILER_ID. If Clang is used together with GNU windres -# then it will fail, but this way the risk of a bad string in -# the binary should be fairly low. -if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "GNU") - # Use workarounds with GNU windres. The \x20 in PACKAGE_NAME works - # with gcc too so we don't need to worry how to pass different flags - # to windres and gcc. +# llvm-windres 17.0.0 and later: It emulates GNU windres more accurately, so +# the workarounds used with GNU windres must be used with llvm-windres too. +# +# CMake 3.27 doesn't have CMAKE_RC_COMPILER_ID so we rely on +# CMAKE_C_COMPILER_ID. +if(WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR ( + CMAKE_C_COMPILER_ID STREQUAL "Clang" AND + CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "17"))) + # Use workarounds with GNU windres and llvm-windres >= 17.0.0. The \x20 + # in PACKAGE_NAME works with gcc and clang too so we don't need to worry + # how to pass different flags to windres and the C compiler. string(APPEND CMAKE_RC_FLAGS " --use-temp-file") set(PACKAGE_NAME "XZ\\x20Utils") else() |