diff options
Diffstat (limited to 'cmake/QtGenerateLibPri.cmake')
-rw-r--r-- | cmake/QtGenerateLibPri.cmake | 96 |
1 files changed, 15 insertions, 81 deletions
diff --git a/cmake/QtGenerateLibPri.cmake b/cmake/QtGenerateLibPri.cmake index 0e62536a1a..bde42b7723 100644 --- a/cmake/QtGenerateLibPri.cmake +++ b/cmake/QtGenerateLibPri.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + # Generate a qt_lib_XXX.pri file. # # This file is to be used in CMake script mode with the following variables set: @@ -7,6 +10,7 @@ # LIBRARY_SUFFIXES: list of known library extensions, e.g. .so;.a on Linux # LIBRARY_PREFIXES: list of known library prefies, e.g. the "lib" in "libz" on on Linux # LINK_LIBRARY_FLAG: flag used to link a shared library to an executable, e.g. -l on UNIX +# IMPLICIT_LINK_DIRECTORIES: list of implicit linker search paths # # QMAKE_LIBS_XXX values are split into QMAKE_LIBS_XXX_DEBUG and QMAKE_LIBS_XXX_RELEASE if # debug_and_release was detected. The CMake configuration "Debug" is considered for the _DEBUG @@ -15,6 +19,7 @@ # The library values are transformed from an absolute path into link flags # aka from "/usr/lib/x86_64-linux-gnu/libcups.so" to "-lcups". +cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0057 NEW) # Create a qmake-style list from the passed arguments and store it in ${out_var}. @@ -33,79 +38,7 @@ function(qmake_list out_var) set(${out_var} ${result} PARENT_SCOPE) endfunction() -# Given "/usr/lib/x86_64-linux-gnu/libcups.so" -# Returns "cups" or an empty string if the file is not an absolute library path. -# Aka it strips the "lib" prefix, the .so extension and the base path. -function(qt_get_library_name_without_prefix_and_suffix out_var file_path) - set(out_value "") - if(IS_ABSOLUTE "${file_path}") - get_filename_component(basename "${file_path}" NAME_WE) - get_filename_component(ext "${file_path}" EXT) - foreach(libsuffix ${LIBRARY_SUFFIXES}) - # Handle weird prefix extensions like in the case of - # "/usr/lib/x86_64-linux-gnu/libglib-2.0.so" - # it's ".0.so". - if(ext MATCHES "^(\\.[0-9]+)*${libsuffix}(\\.[0-9]+)*") - set(is_linkable_library TRUE) - set(weird_numbered_extension "${CMAKE_MATCH_1}") - break() - endif() - endforeach() - if(is_linkable_library) - set(out_value "${basename}") - if(LIBRARY_PREFIXES) - foreach(libprefix ${LIBRARY_PREFIXES}) - # Strip any library prefix like "lib" for a library that we will use with a link - # flag. - if(libprefix AND out_value MATCHES "^${libprefix}(.+)") - set(out_value "${CMAKE_MATCH_1}") - break() - endif() - endforeach() - endif() - if(weird_numbered_extension) - set(out_value "${out_value}${weird_numbered_extension}") - endif() - endif() - endif() - - # Reverse the dependency order to be in sync with what qmake generated .pri files - # have. - list(REVERSE out_list) - - set(${out_var} "${out_value}" PARENT_SCOPE) -endfunction() - -# Given "/usr/lib/x86_64-linux-gnu/libcups.so" -# Returns "-lcups" or an empty string if the file is not an absolute library path. -function(qt_get_library_with_link_flag out_var file_path) - qt_get_library_name_without_prefix_and_suffix(lib_name "${file_path}") - - set(out_value "") - if(lib_name) - set(out_value "${lib_name}") - if(LINK_LIBRARY_FLAG) - string(PREPEND out_value "${LINK_LIBRARY_FLAG}") - endif() - endif() - - set(${out_var} "${out_value}" PARENT_SCOPE) -endfunction() - -# Given a list of potential library paths, returns a transformed list where absolute library paths -# are replaced with library link flags. -function(qt_transform_absolute_library_paths_to_link_flags out_var library_path_list) - set(out_list "") - foreach(library_path ${library_path_list}) - qt_get_library_with_link_flag(lib_name_with_link_flag "${library_path}") - if(lib_name_with_link_flag) - list(APPEND out_list "${lib_name_with_link_flag}") - else() - list(APPEND out_list "${library_path}") - endif() - endforeach() - set(${out_var} "${out_list}" PARENT_SCOPE) -endfunction() +include("${CMAKE_CURRENT_LIST_DIR}/QtGenerateLibHelpers.cmake") list(POP_FRONT IN_FILES in_pri_file) file(READ ${in_pri_file} content) @@ -134,11 +67,10 @@ foreach(lib ${known_libs}) qt_transform_absolute_library_paths_to_link_flags(value_release "${value_release}") if(value_debug STREQUAL value_release) - if(value_debug) - qmake_list(value_debug ${value_debug}) - string(APPEND content "QMAKE_LIBS_${lib} = ${value_debug}\n") - endif() + qmake_list(value_debug ${value_debug}) + string(APPEND content "QMAKE_LIBS_${lib} = ${value_debug}\n") else() + string(APPEND content "QMAKE_LIBS_${lib} =\n") if(value_debug) qmake_list(value_debug ${value_debug}) string(APPEND content "QMAKE_LIBS_${lib}_DEBUG = ${value_debug}\n") @@ -160,11 +92,13 @@ foreach(lib ${known_libs}) set(value ${QMAKE_${infix}_${lib}_${cfg}}) if(infix STREQUAL "LIBS") qt_transform_absolute_library_paths_to_link_flags(value "${value}") + elseif("${value}" STREQUAL "") + # Do not write empty entries, but ensure to write at least + # the QMAKE_LIBS_FOO entry to make the lib 'foo' known. + continue() endif() - if(value) - qmake_list(value ${value}) - string(APPEND content "QMAKE_${infix}_${lib} = ${value}\n") - endif() + qmake_list(value ${value}) + string(APPEND content "QMAKE_${infix}_${lib} = ${value}\n") endforeach() endforeach() file(WRITE "${OUT_FILE}" "${content}") |