summaryrefslogtreecommitdiffstats
path: root/cmake/QtFinishPrlFile.cmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-03-12 16:16:55 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2020-04-17 20:42:10 +0200
commitbfcf36d459c7a36a92dd6f9127e6513f7a08277e (patch)
tree971b021ae9b51046af28512f6e4c69d289fdfe2e /cmake/QtFinishPrlFile.cmake
parent6f5c91e98599f1c79085ea7bb819a6e2d3411053 (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.cmake57
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}")