summaryrefslogtreecommitdiffstats
path: root/cmake/QtGenerateLibPri.cmake
blob: bde42b772306f52260603a78986d4d45925f7027 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
# 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:# IN_FILES: path to the qt_lib_XXX.cmake files# OUT_FILE: path to the generated qt_lib_XXX.pri file# CONFIGS: the configurations Qt is being built with# 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# values. The first config that is not "Debug" is treated as _RELEASE.## 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}.function(qmake_list out_var)set(result "")# Surround values that contain spaces with double quotes.foreach(v ${ARGN})if(v MATCHES" "AND NOT MATCHES"^-framework")set(v "\"${v}\"")endif()list(APPEND result ${v})endforeach()list(JOIN result " " result)set(${out_var} ${result}PARENT_SCOPE)endfunction()include("${CMAKE_CURRENT_LIST_DIR}/QtGenerateLibHelpers.cmake")list(POP_FRONT IN_FILES in_pri_file)file(READ${in_pri_file} content)string(APPEND content "\n")foreach(in_file ${IN_FILES})include(${in_file})endforeach()list(REMOVE_DUPLICATES known_libs)set(is_debug_and_release FALSE)if("Debug"IN_LIST CONFIGS AND("Release"IN_LIST CONFIGS OR"RelWithDebInfo"IN_LIST CONFIGS))set(is_debug_and_release TRUE)set(release_configs ${CONFIGS})list(REMOVE_ITEM release_configs "Debug")list(GET release_configs 0 release_cfg)string(TOUPPER"${release_cfg}" release_cfg)endif()foreach(lib ${known_libs})set(configuration_independent_infixes LIBDIR INCDIR DEFINES)if(is_debug_and_release)set(value_debug ${QMAKE_LIBS_${lib}_DEBUG})set(value_release ${QMAKE_LIBS_${lib}_${release_cfg}})qt_transform_absolute_library_paths_to_link_flags(value_debug "${value_debug}")qt_transform_absolute_library_paths_to_link_flags(value_release "${value_release}")if(value_debug STREQUAL value_release)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")endif()if(value_release)qmake_list(value_release ${value_release})string(APPEND content "QMAKE_LIBS_${lib}_RELEASE = ${value_release}\n")endif()endif()else()list(APPEND configuration_independent_infixes LIBS)endif()# The remaining values are considered equal for all configurations.# Pick the first configuration and use its values.list(GET CONFIGS0 cfg)string(TOUPPER${cfg} cfg)foreach(infix ${configuration_independent_infixes})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()qmake_list(value ${value})string(APPEND content "QMAKE_${infix}_${lib} = ${value}\n")endforeach()endforeach()file(WRITE"${OUT_FILE}""${content}")
close