CMake/Windows: Add a workaround for windres from GNU binutils.
This is combined from the following commits in the master branch:443dfebced
6b117d3b1f
5e34774c31
Thanks to Iouri Kharon for the bug report, the original patch, and testing.
This commit is contained in:
parent
35167d71f8
commit
f2192d13b5
|
@ -72,10 +72,40 @@ project(xz VERSION "${XZ_VERSION}" LANGUAGES C)
|
|||
# On Apple OSes, don't build executables as bundles:
|
||||
set(CMAKE_MACOSX_BUNDLE OFF)
|
||||
|
||||
# windres from GNU binutils can be tricky with command line arguments
|
||||
# that contain spaces or other funny characters. Unfortunately we need
|
||||
# a space in PACKAGE_NAME. Using \x20 to encode the US-ASCII space seems
|
||||
# to work in both cmd.exe and /bin/sh.
|
||||
#
|
||||
# However, even \x20 isn't enough in all situations, resulting in
|
||||
# "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.
|
||||
#
|
||||
# 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.
|
||||
string(APPEND CMAKE_RC_FLAGS " --use-temp-file")
|
||||
set(PACKAGE_NAME "XZ\\x20Utils")
|
||||
else()
|
||||
# Elsewhere a space is safe. This also keeps things compatible with
|
||||
# EBCDIC in case CMake-based build is ever done on such a system.
|
||||
set(PACKAGE_NAME "XZ Utils")
|
||||
endif()
|
||||
|
||||
# Definitions common to all targets:
|
||||
add_compile_definitions(
|
||||
# Package info:
|
||||
PACKAGE_NAME="XZ Utils"
|
||||
PACKAGE_NAME="${PACKAGE_NAME}"
|
||||
PACKAGE_BUGREPORT="xz@tukaani.org"
|
||||
PACKAGE_URL="https://tukaani.org/xz/"
|
||||
|
||||
|
|
Loading…
Reference in New Issue