From d2419b0d8c449bc60bc7abad3dab129dd4e8a2d0 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Tue, 10 Mar 2020 14:49:46 +0100 Subject: [PATCH] CMake: pro2cmake: Handle LIBS_SUFFIX define correctly Matches the LIBS_SUFFIX define we use in Android conditions and replaces it with a sane amount of escaped characters. Change-Id: I7d870f992c70b105dd80b6fa94f87d3fa5644006 Reviewed-by: Leander Beernaert Reviewed-by: Alexandru Croitor --- src/corelib/.prev_CMakeLists.txt | 2 +- src/corelib/CMakeLists.txt | 2 +- util/cmake/pro2cmake.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/corelib/.prev_CMakeLists.txt b/src/corelib/.prev_CMakeLists.txt index e33ce41e199..8bdc2debd3c 100644 --- a/src/corelib/.prev_CMakeLists.txt +++ b/src/corelib/.prev_CMakeLists.txt @@ -316,7 +316,7 @@ qt_extend_target(Core CONDITION ANDROID kernel/qsharedmemory_android.cpp kernel/qsystemsemaphore_android.cpp DEFINES - LIBS_SUFFIX='\\"_${CMAKE_SYSTEM_PROCESSOR}.so\\"' + LIBS_SUFFIX="_${CMAKE_SYSTEM_PROCESSOR}.so" ) qt_extend_target(Core CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386") diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index 37079bdc72d..783346578b0 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -427,7 +427,7 @@ qt_extend_target(Core CONDITION ANDROID kernel/qsharedmemory_android.cpp kernel/qsystemsemaphore_android.cpp DEFINES - LIBS_SUFFIX="\\\\"_${CMAKE_SYSTEM_PROCESSOR}.so\\\\"" # special case + LIBS_SUFFIX="_${CMAKE_SYSTEM_PROCESSOR}.so" ) qt_extend_target(Core CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386") diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index de2f1759534..7bc29990c52 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -1956,6 +1956,18 @@ def write_defines( d.replace('=\\\\\\"$$PWD/\\\\\\"', '="${CMAKE_CURRENT_SOURCE_DIR}/"') for d in defines ] + # Handle LIBS_SUFFIX='\\"_$${QT_ARCH}.so\\"'. + # The escaping of backslashes is still needed even if it's a raw + # string, because backslashes have a special meaning for regular + # expressions (escape next char). So we actually expect to match + # 2 backslashes in the input string. + pattern = r"""([^ ]+)='\\\\"([^ ]*)\\\\"'""" + + # Replace with regular quotes, CMake will escape the quotes when + # passing the define to the compiler. + replacement = r'\1="\2"' + defines = [re.sub(pattern, replacement, d) for d in defines] + if "qml_debug" in scope.get("CONFIG"): defines.append("QT_QML_DEBUG")