summaryrefslogtreecommitdiffstats
path: root/cmake/QtFlagHandlingHelpers.cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2023-07-14 15:24:19 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2023-07-14 18:40:44 +0200
commit53b6c88a2529a5767b2f4c6ff91680b93dc5e357 (patch)
treee7e4e73b11f165a88c724bf77518782b7d3afb91 /cmake/QtFlagHandlingHelpers.cmake
parenta4ca9e80658bca7dad1529f03c1b59173a6ecf62 (diff)
CMake: Fix gc_sections genex evaluation in pkgconfig file creation
The gc_sections linker flag was recently wrapped in a $<CXX_COMPILER_ID> genex to prevent adding it the command line when using an incompatible compiler. This causes an issue when generating .pc pkg-config files because $<CXX_COMPILER_ID> can't be used in the output of a file(GENERATE) call. Record the flag in a global property, both the genex-wrapped and bare forms, so that we can perform a string replacement when generating the pkg-config file to remove the genex wrapping. This is not perfect, in the sense that consumers of the .pc file might get the wrong flag if using an incompatible compiler, but it's better than outright failing the Qt build. Distros will be expected to patch the .pc files if necessary. Note the issue does not usually happen for regular Qt builds because gc_sections is only enabled automatically for static builds, but for static builds we don't currently generate .pc files. So the issue only happens in shared Qt builds where the gc_sections feature is enabled manually. Amends a2b6c2f3437bf1779da787e719bea08bc6f28622 Pick-to: 6.5 6.6 Fixes: QTBUG-115243 Change-Id: I3f6bdf86c24ee90b6da04994e458b438cc41fc7a Reviewed-by: Amir Masoud Abdol <amir.abdol@qt.io>
Diffstat (limited to 'cmake/QtFlagHandlingHelpers.cmake')
-rw-r--r--cmake/QtFlagHandlingHelpers.cmake7
1 files changed, 7 insertions, 0 deletions
diff --git a/cmake/QtFlagHandlingHelpers.cmake b/cmake/QtFlagHandlingHelpers.cmake
index a80dfdd020..6784232ca9 100644
--- a/cmake/QtFlagHandlingHelpers.cmake
+++ b/cmake/QtFlagHandlingHelpers.cmake
@@ -139,8 +139,15 @@ function(qt_internal_apply_gc_binaries target visibility)
elseif(LINUX OR BSD OR WIN32 OR ANDROID)
set(gc_sections_flag "-Wl,--gc-sections")
endif()
+
+ # Save the flag value with and without genex wrapping, so we can remove the wrapping
+ # when generating .pc pkgconfig files.
+ set_property(GLOBAL PROPERTY _qt_internal_gc_sections_without_genex "${gc_sections_flag}")
+
set(gc_sections_flag
"${clang_or_gcc_begin}${gc_sections_flag}${clang_or_gcc_end}")
+
+ set_property(GLOBAL PROPERTY _qt_internal_gc_sections_with_genex "${gc_sections_flag}")
endif()
if(gc_sections_flag)
target_link_options("${target}" ${visibility} "${gc_sections_flag}")