diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-03-12 16:16:55 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-04-17 20:42:10 +0200 |
commit | bfcf36d459c7a36a92dd6f9127e6513f7a08277e (patch) | |
tree | 971b021ae9b51046af28512f6e4c69d289fdfe2e /cmake/QtFinishPrlFile.cmake | |
parent | 6f5c91e98599f1c79085ea7bb819a6e2d3411053 (diff) |
CMake: Generate qmake .prl files
This commit also adds a qt_finalize_module function that is called for
every Qt module after all link dependencies have been added.
Change-Id: I489d188d05e368208a8a62828bb12fb395df54bc
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake/QtFinishPrlFile.cmake')
-rw-r--r-- | cmake/QtFinishPrlFile.cmake | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/cmake/QtFinishPrlFile.cmake b/cmake/QtFinishPrlFile.cmake new file mode 100644 index 0000000000..2edc8bdd9c --- /dev/null +++ b/cmake/QtFinishPrlFile.cmake @@ -0,0 +1,57 @@ +# Finish a preliminary .prl file. +# +# - Replaces occurrences of the build libdir with $$[QT_INSTALL_LIBDIR/get]. +# - Strips version number suffixes from absolute paths, because qmake's lflag +# merging does not handle them correctly. +# +# This file is to be used in CMake script mode with the following variables set: +# IN_FILE: path to the preliminary .prl file +# OUT_FILE: path to the final .prl file that's going to be installed +# QT_BUILD_LIBDIR: path to Qt's libdir when building (those paths get replaced) +# LIBRARY_SUFFIXES: list of known library extensions, e.g. .so;.a on Linux + +function(strip_library_version_suffix out_var file_path) + get_filename_component(dir "${file_path}" DIRECTORY) + get_filename_component(basename "${file_path}" NAME_WE) + get_filename_component(ext "${file_path}" EXT) + foreach(libsuffix ${LIBRARY_SUFFIXES}) + if(ext MATCHES "^${libsuffix}(\\.[0-9]+)+") + set(ext ${libsuffix}) + break() + endif() + endforeach() + set(${out_var} "${dir}/${basename}${ext}" PARENT_SCOPE) +endfunction() + +file(STRINGS "${IN_FILE}" lines) +set(content "") +foreach(line ${lines}) + if(line MATCHES "^QMAKE_PRL_LIBS_FOR_CMAKE = (.*)") + unset(adjusted_libs) + foreach(lib ${CMAKE_MATCH_1}) + if("${lib}" STREQUAL "") + continue() + endif() + if(IS_ABSOLUTE "${lib}") + strip_library_version_suffix(lib "${lib}") + file(RELATIVE_PATH relative_lib "${QT_BUILD_LIBDIR}" "${lib}") + if(IS_ABSOLUTE "${relative_lib}" OR (relative_lib MATCHES "^\\.\\.")) + list(APPEND adjusted_libs "${lib}") + else() + list(APPEND adjusted_libs "$$[QT_INSTALL_LIBS/get]/${relative_lib}") + endif() + else() + if(NOT lib MATCHES "^-l") + string(PREPEND lib "-l") + endif() + list(APPEND adjusted_libs "${lib}") + endif() + endforeach() + list(JOIN adjusted_libs " " adjusted_libs_for_qmake) + string(APPEND content "QMAKE_PRL_LIBS = ${adjusted_libs_for_qmake}\n") + string(APPEND content "QMAKE_PRL_LIBS_FOR_CMAKE = ${adjusted_libs}\n") + else() + string(APPEND content "${line}\n") + endif() +endforeach() +file(WRITE "${OUT_FILE}" "${content}") |