summaryrefslogtreecommitdiffstats
path: root/cmake/QtGenerateLibPri.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtGenerateLibPri.cmake')
-rw-r--r--cmake/QtGenerateLibPri.cmake96
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}")