From c6a82f27f197b1129eddb561eb14d26f67b4cd36 Mon Sep 17 00:00:00 2001 From: Barath Kannan Date: Sun, 3 Dec 2017 19:19:08 +1100 Subject: put qtmain in manual link directory, resolve resultant build issues with qtdeclarative --- ports/qt5base/fixcmake.py | 11 +++++++++++ ports/qt5base/portfile.cmake | 20 ++++++++++++++++++++ ports/qt5modularscripts/qt_modular_library.cmake | 21 ++++++++++++++------- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/ports/qt5base/fixcmake.py b/ports/qt5base/fixcmake.py index 923e600bc..bcfb12ac5 100644 --- a/ports/qt5base/fixcmake.py +++ b/ports/qt5base/fixcmake.py @@ -42,6 +42,17 @@ for f in files: builder += " else()" builder += "\n " + line.replace("/plugins/", "/debug/plugins/") builder += " endif()\n" + elif "_install_prefix}/lib/qtmaind.lib" in line: + # qtmaind.lib has been moved to manual-link: + builder += line.replace("/lib/", "/debug/lib/manual-link/") + elif "_install_prefix}/lib/qtmain.lib" in line: + # qtmain(d).lib has been moved to manual-link: + builder += line.replace("/lib/", "/lib/manual-link/") + builder += " set(imported_location_debug \"${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib\")\n" + builder += "\n" + builder += " set_target_properties(Qt5::WinMain PROPERTIES\n" + builder += " IMPORTED_LOCATION_DEBUG ${imported_location_debug}\n" + builder += " )\n" elif dllpattern.search(line) != None: builder += line.replace("/bin/", "/debug/bin/") elif libpattern.search(line) != None: diff --git a/ports/qt5base/portfile.cmake b/ports/qt5base/portfile.cmake index c5ec1ea9d..02122f9cc 100644 --- a/ports/qt5base/portfile.cmake +++ b/ports/qt5base/portfile.cmake @@ -91,4 +91,24 @@ vcpkg_execute_required_process( vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}) vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/qt5) +#--------------------------------------------------------------------------- +# qtmain(d) vs. Qt5AxServer(d) +#--------------------------------------------------------------------------- +# Qt applications have to either link to qtmain(d) or to Qt5AxServer(d), +# never both. See http://doc.qt.io/qt-5/activeqt-server.html for more info. +# +# Create manual-link folders: +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/lib/manual-link) +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link) +# +# Either have users explicitly link against qtmain.lib, qtmaind.lib: +file(COPY ${CURRENT_PACKAGES_DIR}/lib/qtmain.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib/manual-link) +file(COPY ${CURRENT_PACKAGES_DIR}/lib/qtmain.prl DESTINATION ${CURRENT_PACKAGES_DIR}/lib/manual-link) +file(REMOVE ${CURRENT_PACKAGES_DIR}/lib/qtmain.lib) +file(REMOVE ${CURRENT_PACKAGES_DIR}/lib/qtmain.prl) +file(COPY ${CURRENT_PACKAGES_DIR}/debug/lib/qtmaind.lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link) +file(COPY ${CURRENT_PACKAGES_DIR}/debug/lib/qtmaind.prl DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link) +file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/lib/qtmaind.lib) +file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/lib/qtmaind.prl) + file(INSTALL ${SOURCE_PATH}/LICENSE.LGPLv3 DESTINATION ${CURRENT_PACKAGES_DIR}/share/qt5base RENAME copyright) diff --git a/ports/qt5modularscripts/qt_modular_library.cmake b/ports/qt5modularscripts/qt_modular_library.cmake index 6fa4c20c8..518f226bb 100644 --- a/ports/qt5modularscripts/qt_modular_library.cmake +++ b/ports/qt5modularscripts/qt_modular_library.cmake @@ -41,6 +41,12 @@ function(qt_modular_library NAME HASH) get_filename_component(PYTHON3_EXE_PATH ${PYTHON3} DIRECTORY) set(ENV{PATH} "${PYTHON3_EXE_PATH};$ENV{PATH}") + file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR) + file(TO_NATIVE_PATH "${CURRENT_PACKAGES_DIR}" NATIVE_PACKAGES_DIR) + + string(SUBSTRING "${NATIVE_INSTALLED_DIR}" 2 -1 INSTALLED_DIR_WITHOUT_DRIVE) + string(SUBSTRING "${NATIVE_PACKAGES_DIR}" 2 -1 PACKAGES_DIR_WITHOUT_DRIVE) + #Configure debug vcpkg_configure_qmake_debug( SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/${SRCDIR_NAME} @@ -56,6 +62,7 @@ function(qt_modular_library NAME HASH) file(READ "${DEBUG_MAKEFILE}" _contents) string(REPLACE "zlib.lib" "zlibd.lib" _contents "${_contents}") string(REPLACE "vcpkg\\installed\\${TARGET_TRIPLET}\\lib" "vcpkg\\installed\\${TARGET_TRIPLET}\\debug\\lib" _contents "${_contents}") + string(REPLACE "/LIBPATH:${NATIVE_INSTALLED_DIR}\\debug\\lib qtmaind.lib" "shell32.lib /LIBPATH:${NATIVE_INSTALLED_DIR}\\debug\\lib\\manual-link qtmaind.lib /LIBPATH:${NATIVE_INSTALLED_DIR}\\debug\\lib" _contents "${_contents}") file(WRITE "${DEBUG_MAKEFILE}" "${_contents}") endforeach() @@ -73,6 +80,12 @@ function(qt_modular_library NAME HASH) #Store release makefile path file(GLOB_RECURSE RELEASE_MAKEFILES ${RELEASE_DIR}/*Makefile*) + foreach(RELEASE_MAKEFILE ${RELEASE_MAKEFILES}) + file(READ "${RELEASE_MAKEFILE}" _contents) + string(REPLACE "/LIBPATH:${NATIVE_INSTALLED_DIR}\\lib qtmain.lib" "shell32.lib /LIBPATH:${NATIVE_INSTALLED_DIR}\\lib\\manual-link qtmain.lib /LIBPATH:${NATIVE_INSTALLED_DIR}\\lib" _contents "${_contents}") + file(WRITE "${RELEASE_MAKEFILE}" "${_contents}") + endforeach() + #Build release vcpkg_build_qmake_release() @@ -84,13 +97,7 @@ function(qt_modular_library NAME HASH) LOGNAME fix-cmake ) endif() - - file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR) - file(TO_NATIVE_PATH "${CURRENT_PACKAGES_DIR}" NATIVE_PACKAGES_DIR) - - string(SUBSTRING "${NATIVE_INSTALLED_DIR}" 2 -1 INSTALLED_DIR_WITHOUT_DRIVE) - string(SUBSTRING "${NATIVE_PACKAGES_DIR}" 2 -1 PACKAGES_DIR_WITHOUT_DRIVE) - + #Set the correct install directory to packages foreach(MAKEFILE ${RELEASE_MAKEFILES} ${DEBUG_MAKEFILES}) vcpkg_replace_string(${MAKEFILE} "(INSTALL_ROOT)${INSTALLED_DIR_WITHOUT_DRIVE}" "(INSTALL_ROOT)${PACKAGES_DIR_WITHOUT_DRIVE}") -- cgit v1.2.3