diff options
Diffstat (limited to 'vcpkg/ports/qt5-base')
36 files changed, 2481 insertions, 0 deletions
diff --git a/vcpkg/ports/qt5-base/cmake/configure_qt.cmake b/vcpkg/ports/qt5-base/cmake/configure_qt.cmake new file mode 100644 index 0000000..7951086 --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/configure_qt.cmake @@ -0,0 +1,210 @@ +function(configure_qt) + cmake_parse_arguments(_csc "" "SOURCE_PATH;TARGET_PLATFORM;HOST_PLATFORM;HOST_TOOLS_ROOT" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN}) + + if(NOT _csc_TARGET_PLATFORM) + message(FATAL_ERROR "configure_qt requires a TARGET_PLATFORM argument.") + endif() + + if(DEFINED _csc_HOST_PLATFORM) + list(APPEND _csc_OPTIONS -platform ${_csc_HOST_PLATFORM}) + endif() + + if(DEFINED _csc_HOST_TOOLS_ROOT) + ## vcpkg internal file struture assumed here! + message(STATUS "Building Qt with prepared host tools from ${_csc_HOST_TOOLS_ROOT}!") + vcpkg_add_to_path("${_csc_HOST_TOOLS_ROOT}/bin") + vcpkg_add_to_path("${_csc_HOST_TOOLS_ROOT}") + set(EXT_BIN_DIR -external-hostbindir ${_csc_HOST_TOOLS_ROOT}/bin) # we only use release binaries for building + find_program(QMAKE_COMMAND NAMES qmake PATHS ${_csc_HOST_TOOLS_ROOT}/bin NO_DEFAULT_PATH) + set(INVOKE "${QMAKE_COMMAND}" ) + else() + if(CMAKE_HOST_WIN32) + set(CONFIGURE_BAT "configure.bat") + else() + set(CONFIGURE_BAT "configure") + endif() + set(INVOKE "${_csc_SOURCE_PATH}/${CONFIGURE_BAT}") + endif() + + #Cleanup previous build folders + file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + + vcpkg_cmake_get_vars(detected_file) + include("${detected_file}") + function(qmake_append_program var qmake_var value) + get_filename_component(prog "${value}" NAME) + # QMake assumes everything is on PATH? + vcpkg_list(APPEND ${var} "${qmake_var}=${prog}") + find_program(${qmake_var} NAMES "${prog}") + cmake_path(COMPARE "${${qmake_var}}" EQUAL "${value}" correct_prog_on_path) + if(NOT correct_prog_on_path AND NOT "${value}" MATCHES "|:") + message(FATAL_ERROR "Detect path mismatch for '${qmake_var}'. '${value}' is not the same as '${${qmake_var}}'. Please correct your PATH!") + endif() + unset(${qmake_var}) + unset(${qmake_var} CACHE) + set(${var} "${${var}}" PARENT_SCOPE) + endfunction() + # Setup Build tools + set(qmake_build_tools "") + qmake_append_program(qmake_build_tools "QMAKE_CC" "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_CXX" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_AR" "${VCPKG_DETECTED_CMAKE_AR}") + qmake_append_program(qmake_build_tools "QMAKE_RANLIB" "${VCPKG_DETECTED_CMAKE_RANLIB}") + qmake_append_program(qmake_build_tools "QMAKE_STRIP" "${VCPKG_DETECTED_CMAKE_STRIP}") + qmake_append_program(qmake_build_tools "QMAKE_NM" "${VCPKG_DETECTED_CMAKE_NM}") + qmake_append_program(qmake_build_tools "QMAKE_RC" "${VCPKG_DETECTED_CMAKE_RC_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_MT" "${VCPKG_DETECTED_CMAKE_MT}") + if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_DETECTED_CMAKE_AR MATCHES "ar$") + # This is the reason why users should probably use a + # customized qt.conf with more domain knowledge. + vcpkg_list(APPEND qmake_build_tools "QMAKE_AR+=qc") + endif() + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + qmake_append_program(qmake_build_tools "QMAKE_LIB" "${VCPKG_DETECTED_CMAKE_AR}") + qmake_append_program(qmake_build_tools "QMAKE_LINK" "${VCPKG_DETECTED_CMAKE_LINKER}") + else() + qmake_append_program(qmake_build_tools "QMAKE_LINK" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_LINK_SHLIB" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_LINK_C" "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_LINK_C_SHLIB" "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + endif() + + #Find and ad Perl to PATH + vcpkg_find_acquire_program(PERL) + get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY) + vcpkg_add_to_path("${PERL_EXE_PATH}") + + if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static") + list(APPEND _csc_OPTIONS -static) + else() + #list(APPEND _csc_OPTIONS_DEBUG -separate-debug-info) + endif() + + if(VCPKG_TARGET_IS_WINDOWS AND "${VCPKG_CRT_LINKAGE}" STREQUAL "static") + list(APPEND _csc_OPTIONS -static-runtime) + endif() + + list(APPEND _csc_OPTIONS_RELEASE -release) + list(APPEND _csc_OPTIONS_DEBUG -debug) + + #Replace with VCPKG variables if PR #7733 is merged + unset(BUILDTYPES) + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug") + set(_buildname "DEBUG") + list(APPEND BUILDTYPES ${_buildname}) + set(_short_name_${_buildname} "dbg") + set(_path_suffix_${_buildname} "/debug") + set(_build_type_${_buildname} "debug") + endif() + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release") + set(_buildname "RELEASE") + list(APPEND BUILDTYPES ${_buildname}) + set(_short_name_${_buildname} "rel") + set(_path_suffix_${_buildname} "") + set(_build_type_${_buildname} "release") + endif() + unset(_buildname) + + vcpkg_find_acquire_program(PKGCONFIG) + set(ENV{PKG_CONFIG} "${PKGCONFIG}") + get_filename_component(PKGCONFIG_PATH "${PKGCONFIG}" DIRECTORY) + vcpkg_add_to_path("${PKGCONFIG_PATH}") + + foreach(_buildname ${BUILDTYPES}) + set(PKGCONFIG_INSTALLED_DIR "${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib/pkgconfig") + set(PKGCONFIG_INSTALLED_SHARE_DIR "${CURRENT_INSTALLED_DIR}/share/pkgconfig") + set(PKGCONFIG_PACKAGES_DIR "${CURRENT_PACKAGES_DIR}${_path_suffix_${_buildname}}/lib/pkgconfig") + set(PKGCONFIG_PACKAGES_SHARE_DIR "${CURRENT_PACKAGES_DIR}/share/pkgconfig") + if(DEFINED ENV{PKG_CONFIG_PATH}) + set(BACKUP_ENV_PKG_CONFIG_PATH_${_config} $ENV{PKG_CONFIG_PATH}) + set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_INSTALLED_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}$ENV{PKG_CONFIG_PATH}") + else() + set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_INSTALLED_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_SHARE_DIR}") + endif() + + set(_build_triplet ${TARGET_TRIPLET}-${_short_name_${_buildname}}) + message(STATUS "Configuring ${_build_triplet}") + set(_build_dir "${CURRENT_BUILDTREES_DIR}/${_build_triplet}") + file(MAKE_DIRECTORY ${_build_dir}) + + set(qmake_comp_flags "") + # Note sure about these. VCPKG_QMAKE_OPTIONS offers a way to opt out of these. (earlier values being overwritten by later values; = set +=append *=append unique -=remove) + macro(qmake_add_flags qmake_var operation flags) + string(STRIP "${flags}" striped_flags) + if(striped_flags) + vcpkg_list(APPEND qmake_comp_flags "${qmake_var}${operation}${striped_flags}") + endif() + endmacro() + + qmake_add_flags("QMAKE_LIBS" "+=" "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + qmake_add_flags("QMAKE_RC" "+=" "${VCPKG_COMBINED_RC_FLAGS_${_buildname}}") + qmake_add_flags("QMAKE_CFLAGS_${_buildname}" "+=" "${VCPKG_COMBINED_C_FLAGS_${_buildname}}") + qmake_add_flags("QMAKE_CXXFLAGS_${_buildname}" "+=" "${VCPKG_COMBINED_CXX_FLAGS_${_buildname}}") + qmake_add_flags("QMAKE_LFLAGS" "+=" "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_${_buildname}}") + qmake_add_flags("QMAKE_LFLAGS_SHLIB" "+=" "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_${_buildname}}") + qmake_add_flags("QMAKE_LFLAGS_PLUGIN" "+=" "${VCPKG_COMBINED_MODULE_LINKER_FLAGS_${_buildname}}") + qmake_add_flags("QMAKE_LIBFLAGS_${_buildname}" "+=" "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_${_buildname}}") + + # These paths get hardcoded into qmake. So point them into the CURRENT_INSTALLED_DIR instead of CURRENT_PACKAGES_DIR + # makefiles will be fixed to install into CURRENT_PACKAGES_DIR in install_qt + set(BUILD_OPTIONS ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildname}} + -prefix ${CURRENT_INSTALLED_DIR} + #-extprefix ${CURRENT_INSTALLED_DIR} + ${EXT_BIN_DIR} + -hostprefix ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}} + #-hostprefix ${CURRENT_INSTALLED_DIR}/tools/qt5 + -hostlibdir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}/lib # could probably be move to manual-link + -hostbindir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}/bin + #-hostbindir ${CURRENT_INSTALLED_DIR}/tools/qt5/bin + # Qt VS Plugin requires a /bin subfolder with the executables in the root dir. But to use the wizard a correctly setup lib folder is also required + # So with the vcpkg layout there is no way to make it work unless all dll are are copied to tools/qt5/bin and all libs to tools/qt5/lib + -archdatadir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}} + -datadir ${CURRENT_INSTALLED_DIR}${_path_suffix}/share/qt5${_path_suffix_${_buildname}} + -plugindir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/plugins + -qmldir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/qml + -headerdir ${CURRENT_INSTALLED_DIR}/include/qt5 + -libexecdir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}} + -bindir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/bin + -libdir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib + -I ${CURRENT_INSTALLED_DIR}/include + -I ${CURRENT_INSTALLED_DIR}/include/qt5 + -L ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib + -L ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib/manual-link + -platform ${_csc_TARGET_PLATFORM} + ) + + if(DEFINED _csc_HOST_TOOLS_ROOT) #use qmake + if(WIN32) + set(INVOKE_OPTIONS "QMAKE_CXX.QMAKE_MSC_VER=1911" "QMAKE_MSC_VER=1911") + endif() + vcpkg_execute_required_process( + COMMAND ${INVOKE} "${_csc_SOURCE_PATH}" "${INVOKE_OPTIONS}" -- ${BUILD_OPTIONS} ${qmake_build_tools} ${qmake_comp_flags} + WORKING_DIRECTORY ${_build_dir} + LOGNAME config-${_build_triplet} + ) + else()# call configure (builds qmake for triplet and calls it like above) + vcpkg_execute_required_process( + COMMAND "${INVOKE}" ${BUILD_OPTIONS} ${qmake_build_tools} ${qmake_comp_flags} + WORKING_DIRECTORY ${_build_dir} + LOGNAME config-${_build_triplet} + ) + endif() + + # Note archdatadir and datadir are required to be prefixed with the hostprefix? + message(STATUS "Configuring ${_build_triplet} done") + + # Copy configuration dependent qt.conf + file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" CMAKE_CURRENT_PACKAGES_DIR_PATH) + file(TO_CMAKE_PATH "${CURRENT_INSTALLED_DIR}" CMAKE_CURRENT_INSTALLED_DIR_PATH) + file(READ "${CURRENT_BUILDTREES_DIR}/${_build_triplet}/bin/qt.conf" _contents) + string(REPLACE "${CMAKE_CURRENT_PACKAGES_DIR_PATH}" "\${CURRENT_INSTALLED_DIR}" _contents ${_contents}) + string(REPLACE "${CMAKE_CURRENT_INSTALLED_DIR_PATH}" "\${CURRENT_INSTALLED_DIR}" _contents ${_contents}) + #string(REPLACE "HostPrefix=\${CURRENT_PACKAGES_DIR}" "HostPrefix=\${CURRENT_INSTALLED_DIR}" _contents ${_contents}) + string(REPLACE "[EffectivePaths]\nPrefix=..\n" "" _contents ${_contents}) + string(REGEX REPLACE "\\[EffectiveSourcePaths\\]\r?\nPrefix=[^\r\n]+\r?\n" "" _contents ${_contents}) + string(REPLACE "Sysroot=\n" "" _contents ${_contents}) + string(REPLACE "SysrootifyPrefix=false\n" "" _contents ${_contents}) + file(WRITE "${CURRENT_PACKAGES_DIR}/tools/qt5/qt_${_build_type_${_buildname}}.conf" "${_contents}") + endforeach() + +endfunction() diff --git a/vcpkg/ports/qt5-base/cmake/find_qt_mkspec.cmake b/vcpkg/ports/qt5-base/cmake/find_qt_mkspec.cmake new file mode 100644 index 0000000..161726c --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/find_qt_mkspec.cmake @@ -0,0 +1,103 @@ +function(find_qt_mkspec TARGET_PLATFORM_MKSPEC_OUT HOST_PLATFORM_MKSPEC_OUT EXT_HOST_TOOLS_OUT)
+ ## Figure out QTs target mkspec
+ if(NOT DEFINED VCPKG_QT_TARGET_MKSPEC)
+ message(STATUS "Figuring out qt target mkspec. Target arch ${VCPKG_TARGET_ARCHITECTURE}")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ if(VCPKG_TARGET_IS_MINGW)
+ set(_tmp_targ_out "win32-g++")
+ elseif(VCPKG_TARGET_IS_UWP)
+ if(VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
+ set(msvc_year "2015")
+ elseif(VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
+ set(msvc_year "2017")
+ elseif(VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
+ set(msvc_year "2019")
+ else()
+ message(FATAL_ERROR "No target mkspec found!")
+ endif()
+ set(_tmp_targ_out "winrt-${VCPKG_TARGET_ARCHITECTURE}-msvc${msvc_year}")
+ else()
+ if("${VCPKG_TARGET_ARCHITECTURE}" MATCHES "arm64")
+ message(STATUS "Figuring out arm64")
+ set(_tmp_targ_out "win32-arm64-msvc2017") #mkspec does not have anything defined related to msvc2017 so this should work
+ else()
+ set(_tmp_targ_out "win32-msvc")
+ endif()
+ endif()
+ elseif(VCPKG_TARGET_IS_LINUX)
+ set(_tmp_targ_out "linux-g++" )
+ elseif(VCPKG_TARGET_IS_OSX)
+ set(_tmp_targ_out "macx-clang") # switch to macx-g++ since vcpkg requires g++ to compile any way?
+ endif()
+ else()
+ set(_tmp_targ_out ${VCPKG_QT_TARGET_MKSPEC})
+ endif()
+ message(STATUS "Target mkspec set to: ${_tmp_targ_out}")
+ set(${TARGET_PLATFORM_MKSPEC_OUT} ${_tmp_targ_out} PARENT_SCOPE)
+
+ ## Figure out QTs host mkspec
+ if(NOT DEFINED VCPKG_QT_HOST_MKSPEC)
+ #if(WIN32)
+ # set(_tmp_host_out "win32-msvc")
+ #elseif("${CMAKE_HOST_SYSTEM}" STREQUAL "Linux")
+ # set(_tmp_host_out "linux-g++")
+ #elseif("${CMAKE_HOST_SYSTEM}" STREQUAL "Darwin")
+ # set(_tmp_host_out "macx-clang")
+ #endif()
+ if(DEFINED _tmp_host_out)
+ message(STATUS "Host mkspec set to: ${_tmp_host_out}")
+ else()
+ message(STATUS "Host mkspec not set. Qt's own buildsystem will try to figure out the host system")
+ endif()
+ else()
+ set(_tmp_host_out ${VCPKG_QT_HOST_MKSPEC})
+ endif()
+
+ if(DEFINED _tmp_host_out)
+ set(${HOST_PLATFORM_MKSPEC_OUT} ${_tmp_host_out} PARENT_SCOPE)
+ endif()
+
+ ## Figure out VCPKG qt-tools directory for the port.
+ if(NOT DEFINED VCPKG_QT_HOST_TOOLS_ROOT AND DEFINED VCPKG_QT_HOST_PLATFORM) ## Root dir of the required host tools
+ if(NOT "${_tmp_host_out}" MATCHES "${_tmp_host_out}")
+ if(CMAKE_HOST_WIN32)
+
+ if($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[aA][rR][mM]64")
+ list(APPEND _test_triplets arm64-windows)
+ elseif($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[aA][mM][dD]64")
+ list(APPEND _test_triplets x64-windows x64-windows-static)
+ list(APPEND _test_triplets x86-windows x86-windows-static)
+ elseif($ENV{PROCESSOR_ARCHITECTURE} MATCHES "x86")
+ list(APPEND _test_triplets x86-windows x86-windows-static)
+ else()
+ message(FATAL_ERROR "Unknown host processor! Host Processor $ENV{PROCESSOR_ARCHITECTURE}")
+ endif()
+ elseif(CMAKE_HOST_SYSTEM STREQUAL "Linux")
+ list(APPEND _test_triplets "x64-linux")
+ elseif(CMAKE_HOST_SYSTEM STREQUAL "Darwin")
+ list(APPEND _test_triplets "x64-osx")
+ else()
+ endif()
+ foreach(_triplet ${_test_triplets})
+ find_program(QMAKE_PATH qmake PATHS ${VCPKG_INSTALLED_DIR}/${_triplet}/tools/qt5/bin NO_DEFAULT_PATHS)
+ message(STATUS "Checking: ${VCPKG_INSTALLED_DIR}/${_triplet}/tools/qt5/bin. ${QMAKE_PATH}")
+ if(QMAKE_PATH)
+ set(_tmp_host_root "${VCPKG_INSTALLED_DIR}/${_triplet}/tools/qt5")
+ set(_tmp_host_qmake ${QMAKE_PATH} PARENT_SCOPE)
+ message(STATUS "Qt host tools root dir within vcpkg: ${_tmp_host_root}")
+ break()
+ endif()
+ endforeach()
+ if(NOT DEFINED _tmp_host_root)
+ message(FATAL_ERROR "Unable to locate required host tools. Please define VCPKG_QT_HOST_TOOLS_ROOT to the required root dir of the host tools")
+ endif()
+ endif()
+ else()
+ set(_tmp_host_root ${VCPKG_QT_HOST_TOOLS_ROOT})
+ endif()
+
+ if(DEFINED _tmp_host_root)
+ set(${EXT_HOST_TOOLS_OUT} ${_tmp_host_root} PARENT_SCOPE)
+ endif()
+
+endfunction()
diff --git a/vcpkg/ports/qt5-base/cmake/install_qt.cmake b/vcpkg/ports/qt5-base/cmake/install_qt.cmake new file mode 100644 index 0000000..86202ab --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/install_qt.cmake @@ -0,0 +1,123 @@ +include(qt_fix_makefile_install) + +function(install_qt) + if(CMAKE_HOST_WIN32) + if(VCPKG_TARGET_IS_MINGW) + find_program(MINGW32_MAKE mingw32-make REQUIRED) + set(INVOKE "${MINGW32_MAKE}" -j${VCPKG_CONCURRENCY}) + set(INVOKE_SINGLE "${MINGW32_MAKE}" -j1) + elseif (VCPKG_QMAKE_USE_NMAKE) + find_program(NMAKE nmake REQUIRED) + set(INVOKE "${NMAKE}") + set(INVOKE_SINGLE "${NMAKE}") + get_filename_component(NMAKE_EXE_PATH ${NMAKE} DIRECTORY) + set(PATH_GLOBAL "$ENV{PATH}") + set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}") + set(ENV{CL} "$ENV{CL} /MP${VCPKG_CONCURRENCY}") + else() + vcpkg_find_acquire_program(JOM) + set(INVOKE "${JOM}" /J ${VCPKG_CONCURRENCY}) + set(INVOKE_SINGLE "${JOM}" /J 1) + endif() + else() + find_program(MAKE make) + set(INVOKE "${MAKE}" -j${VCPKG_CONCURRENCY}) + set(INVOKE_SINGLE "${MAKE}" -j1) + endif() + vcpkg_find_acquire_program(PYTHON3) + get_filename_component(PYTHON3_EXE_PATH ${PYTHON3} DIRECTORY) + vcpkg_add_to_path(PREPEND "${PYTHON3_EXE_PATH}") + + if (CMAKE_HOST_WIN32) + # flex and bison for ANGLE library + vcpkg_find_acquire_program(FLEX) + get_filename_component(FLEX_EXE_PATH ${FLEX} DIRECTORY) + get_filename_component(FLEX_DIR ${FLEX_EXE_PATH} NAME) + + file(COPY ${FLEX_EXE_PATH} DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-tools" ) + set(FLEX_TEMP "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-tools/${FLEX_DIR}") + file(RENAME "${FLEX_TEMP}/win_bison.exe" "${FLEX_TEMP}/bison.exe") + file(RENAME "${FLEX_TEMP}/win_flex.exe" "${FLEX_TEMP}/flex.exe") + vcpkg_add_to_path("${FLEX_TEMP}") + endif() + + set(_path "$ENV{PATH}") + + #Replace with VCPKG variables if PR #7733 is merged + unset(BUILDTYPES) + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + set(_buildname "DEBUG") + list(APPEND BUILDTYPES ${_buildname}) + set(_short_name_${_buildname} "dbg") + set(_path_suffix_${_buildname} "/debug") + set(_build_type_${_buildname} "debug") + endif() + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + set(_buildname "RELEASE") + list(APPEND BUILDTYPES ${_buildname}) + set(_short_name_${_buildname} "rel") + set(_path_suffix_${_buildname} "") + set(_build_type_${_buildname} "release") + endif() + unset(_buildname) + + foreach(_buildname ${BUILDTYPES}) + set(_build_triplet ${TARGET_TRIPLET}-${_short_name_${_buildname}}) + + set(_installed_prefix_ "${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}") + set(_installed_libpath_ "${_installed_prefix_}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_installed_prefix_}/lib/manual-link/") + + vcpkg_add_to_path(PREPEND "${_installed_prefix_}/bin") + vcpkg_add_to_path(PREPEND "${_installed_prefix_}/lib") + + # We set LD_LIBRARY_PATH ENV variable to allow executing Qt tools (rcc,...) even with dynamic linking + if(CMAKE_HOST_UNIX) + if(DEFINED ENV{LD_LIBRARY_PATH}) + set(_ld_library_path_defined_ TRUE) + set(_ld_library_path_backup_ $ENV{LD_LIBRARY_PATH}) + set(ENV{LD_LIBRARY_PATH} "${_installed_libpath_}${VCPKG_HOST_PATH_SEPARATOR}${_ld_library_path_backup_}") + else() + set(_ld_library_path_defined_ FALSE) + set(ENV{LD_LIBRARY_PATH} "${_installed_libpath_}") + endif() + endif() + + message(STATUS "Building ${_build_triplet}") + vcpkg_execute_build_process( + COMMAND ${INVOKE} + NO_PARALLEL_COMMAND ${INVOKE_SINGLE} + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet} + LOGNAME build-${_build_triplet} + ) + + if(VCPKG_TARGET_IS_OSX) + # For some reason there will be an error on MacOSX without this clean! + message(STATUS "Cleaning after build before install ${_build_triplet}") + vcpkg_execute_required_process( + COMMAND ${INVOKE_SINGLE} clean + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet}/qmake + LOGNAME cleaning-after-build-${_build_triplet} + ) + endif() + + message(STATUS "Fixing makefile installation path ${_build_triplet}") + qt_fix_makefile_install("${CURRENT_BUILDTREES_DIR}/${_build_triplet}") + message(STATUS "Installing ${_build_triplet}") + vcpkg_execute_required_process( + COMMAND ${INVOKE} install + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet} + LOGNAME package-${_build_triplet} + ) + message(STATUS "Package ${_build_triplet} done") + set(ENV{PATH} "${_path}") + + # Restore backup + if(CMAKE_HOST_UNIX) + if(_ld_library_path_defined_) + set(ENV{LD_LIBRARY_PATH} "${_ld_library_path_backup_}") + else() + unset(ENV{LD_LIBRARY_PATH}) + endif() + endif() + endforeach() +endfunction() diff --git a/vcpkg/ports/qt5-base/cmake/qt_build_submodule.cmake b/vcpkg/ports/qt5-base/cmake/qt_build_submodule.cmake new file mode 100644 index 0000000..36aff7d --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_build_submodule.cmake @@ -0,0 +1,143 @@ +
+function(qt_build_submodule SOURCE_PATH)
+ if(NOT PORT STREQUAL "qt5-webengine")
+ vcpkg_find_acquire_program(PYTHON3)
+ get_filename_component(PYTHON3_EXE_PATH ${PYTHON3} DIRECTORY)
+ vcpkg_add_to_path("${PYTHON3_EXE_PATH}")
+ endif()
+
+ vcpkg_configure_qmake(SOURCE_PATH ${SOURCE_PATH} ${ARGV})
+
+ vcpkg_build_qmake(SKIP_MAKEFILES)
+
+ #Fix the installation location within the makefiles
+ qt_fix_makefile_install("${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/")
+ qt_fix_makefile_install("${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/")
+
+ #Install the module files
+ vcpkg_build_qmake(TARGETS install SKIP_MAKEFILES BUILD_LOGNAME install)
+
+ qt_fix_cmake(${CURRENT_PACKAGES_DIR} ${PORT})
+ vcpkg_fixup_pkgconfig() # Needs further investigation if this is enough!
+
+ # taken from qt5-base portfile.cmake
+ if(VCPKG_TARGET_IS_OSX)
+ file(GLOB _debug_files "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/*_debug.pc")
+ foreach(_file ${_debug_files})
+ string(REGEX REPLACE "_debug\\.pc$" ".pc" _new_filename "${_file}")
+ string(REGEX MATCH "(Qt5[a-zA-Z]+)_debug\\.pc$" _not_used "${_file}")
+ set(_name ${CMAKE_MATCH_1})
+ file(STRINGS "${_file}" _version REGEX "^(Version):.+$")
+ file(WRITE "${_new_filename}" "Name: ${_name}\nDescription: Forwarding to the _debug version by vcpkg\n${_version}\nRequires: ${_name}_debug\n")
+ endforeach()
+ endif()
+
+ #Replace with VCPKG variables if PR #7733 is merged
+ unset(BUILDTYPES)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ set(_buildname "DEBUG")
+ list(APPEND BUILDTYPES ${_buildname})
+ set(_short_name_${_buildname} "dbg")
+ set(_path_suffix_${_buildname} "/debug")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ set(_buildname "RELEASE")
+ list(APPEND BUILDTYPES ${_buildname})
+ set(_short_name_${_buildname} "rel")
+ set(_path_suffix_${_buildname} "")
+ endif()
+ unset(_buildname)
+
+ foreach(_buildname ${BUILDTYPES})
+ set(CURRENT_BUILD_PACKAGE_DIR "${CURRENT_PACKAGES_DIR}${_path_suffix_${_buildname}}")
+ #Fix PRL files
+ file(GLOB_RECURSE PRL_FILES "${CURRENT_BUILD_PACKAGE_DIR}/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5${_path_suffix_${_buildname}}/lib/*.prl"
+ "${CURRENT_PACKAGES_DIR}/tools/qt5${_path_suffix_${_buildname}}/mkspecs/*.pri")
+ qt_fix_prl("${CURRENT_BUILD_PACKAGE_DIR}" "${PRL_FILES}")
+
+ # This makes it impossible to use the build tools in any meaningful way. qt5 assumes they are all in one folder!
+ # So does the Qt VS Plugin which even assumes all of the in a bin folder
+ #Move tools to the correct directory
+ #if(EXISTS ${CURRENT_BUILD_PACKAGE_DIR}/tools/qt5)
+ # file(RENAME ${CURRENT_BUILD_PACKAGE_DIR}/tools/qt5 ${CURRENT_PACKAGES_DIR}/tools/${PORT})
+ #endif()
+
+ # Move executables in bin to tools
+ # This is ok since those are not build tools.
+ file(GLOB PACKAGE_EXE ${CURRENT_BUILD_PACKAGE_DIR}/bin/*.exe)
+ if(PACKAGE_EXE)
+ file(INSTALL ${PACKAGE_EXE} DESTINATION "${CURRENT_BUILD_PACKAGE_DIR}/tools/${PORT}")
+ file(REMOVE ${PACKAGE_EXE})
+ foreach(_exe ${PACKAGE_EXE})
+ string(REPLACE ".exe" ".pdb" _prb_file ${_exe})
+ if(EXISTS ${_prb_file})
+ file(INSTALL ${_prb_file} DESTINATION "${CURRENT_BUILD_PACKAGE_DIR}/tools/${PORT}")
+ file(REMOVE ${_prb_file})
+ endif()
+ endforeach()
+ endif()
+
+ #cleanup empty folders
+ file(GLOB PACKAGE_LIBS "${CURRENT_BUILD_PACKAGE_DIR}/lib/*")
+ if(NOT PACKAGE_LIBS)
+ file(REMOVE_RECURSE "${CURRENT_BUILD_PACKAGE_DIR}/lib")
+ endif()
+
+ file(GLOB PACKAGE_BINS "${CURRENT_BUILD_PACKAGE_DIR}/bin/*")
+ if(NOT PACKAGE_BINS)
+ file(REMOVE_RECURSE "${CURRENT_BUILD_PACKAGE_DIR}/bin")
+ endif()
+ endforeach()
+ if(EXISTS "${CURRENT_PACKAGES_DIR}/tools/qt5/bin")
+ file(COPY "${CURRENT_PACKAGES_DIR}/tools/qt5/bin" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+
+ set(CURRENT_INSTALLED_DIR_BACKUP "${CURRENT_INSTALLED_DIR}")
+ set(CURRENT_INSTALLED_DIR "./../../.." ) # Making the qt.conf relative and not absolute
+ configure_file(${CURRENT_INSTALLED_DIR_BACKUP}/tools/qt5/qt_release.conf ${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/qt.conf) # This makes the tools at least useable for release
+ set(CURRENT_INSTALLED_DIR "${CURRENT_INSTALLED_DIR_BACKUP}")
+
+ vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ file(GLOB_RECURSE DLL_DEPS_AVAIL "${CURRENT_INSTALLED_DIR}/tools/qt5/bin/*.dll")
+ string(REPLACE "${CURRENT_INSTALLED_DIR}/tools/qt5/bin/" "" DLL_DEPS_AVAIL "${DLL_DEPS_AVAIL}")
+ file(GLOB_RECURSE DLL_DEPS_NEEDED "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/*.dll")
+ string(REPLACE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/" "" DLL_DEPS_NEEDED "${DLL_DEPS_NEEDED}")
+ if(DLL_DEPS_AVAIL AND DLL_DEPS_NEEDED)
+ list(REMOVE_ITEM DLL_DEPS_NEEDED ${DLL_DEPS_AVAIL})
+ endif()
+ foreach(dll_dep ${DLL_DEPS_NEEDED})
+ string(REGEX REPLACE "[^/]+$" "" dll_subpath "${dll_dep}")
+ file(COPY "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/${dll_dep}" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/qt5/bin/${dll_subpath}")
+ endforeach()
+ endif()
+ endif()
+
+ #This should be removed if somehow possible
+ if(EXISTS "${CURRENT_PACKAGES_DIR}/tools/qt5/debug/bin")
+ set(CURRENT_INSTALLED_DIR_BACKUP "${CURRENT_INSTALLED_DIR}")
+ set(CURRENT_INSTALLED_DIR "./../../../.." ) # Making the qt.conf relative and not absolute
+ configure_file(${CURRENT_INSTALLED_DIR_BACKUP}/tools/qt5/qt_debug.conf ${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug/bin/qt.conf) # This makes the tools at least useable for release
+ set(CURRENT_INSTALLED_DIR "${CURRENT_INSTALLED_DIR_BACKUP}")
+
+ vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug/bin")
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ file(GLOB_RECURSE DLL_DEPS_AVAIL "${CURRENT_INSTALLED_DIR}/tools/qt5/debug/bin/*.dll")
+ string(REPLACE "${CURRENT_INSTALLED_DIR}/tools/qt5/debug/bin/" "" DLL_DEPS_AVAIL "${DLL_DEPS_AVAIL}")
+ file(GLOB_RECURSE DLL_DEPS_NEEDED "${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug/bin/*.dll")
+ string(REPLACE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/" "" DLL_DEPS_NEEDED "${DLL_DEPS_NEEDED}")
+ if(DLL_DEPS_AVAIL AND DLL_DEPS_NEEDED)
+ list(REMOVE_ITEM DLL_DEPS_NEEDED ${DLL_DEPS_AVAIL})
+ endif()
+ foreach(dll_dep ${DLL_DEPS_NEEDED})
+ string(REGEX REPLACE "[^/]+$" "" dll_subpath "${dll_dep}")
+ file(COPY "${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug/bin/${dll_dep}" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/qt5/debug/bin/${dll_subpath}")
+ endforeach()
+ endif()
+ endif()
+
+ # Remove duplicate flags from qmodule.pri issue -> https://github.com/microsoft/vcpkg/issues/28835
+ file(READ "${CURRENT_INSTALLED_DIR}/tools/qt5/mkspecs/qmodule.pri" QMODULE_PRI_CONTENT)
+ string(REGEX REPLACE "QMAKE_CXXFLAGS_RELEASE\\+=[^\n]*\n" "QMAKE_CXXFLAGS_RELEASE=\n" QMODULE_PRI_CONTENT ${QMODULE_PRI_CONTENT})
+ file(WRITE "${CURRENT_INSTALLED_DIR}/tools/qt5/mkspecs/qmodule.pri" "${QMODULE_PRI_CONTENT}")
+
+endfunction()
\ No newline at end of file diff --git a/vcpkg/ports/qt5-base/cmake/qt_download_submodule.cmake b/vcpkg/ports/qt5-base/cmake/qt_download_submodule.cmake new file mode 100644 index 0000000..9b5491d --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_download_submodule.cmake @@ -0,0 +1,42 @@ +function(qt_get_submodule_name OUT_NAME)
+ string(REPLACE "5-" "" _tmp_name ${PORT})
+ set(${OUT_NAME} ${_tmp_name} PARENT_SCOPE)
+endfunction()
+
+function(qt_download_submodule)
+ cmake_parse_arguments(_csc "" "OUT_SOURCE_PATH" "PATCHES;BUILD_OPTIONS;BUILD_OPTIONS_RELEASE;BUILD_OPTIONS_DEBUG" ${ARGN})
+
+ if(NOT DEFINED _csc_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "qt_download_module requires parameter OUT_SOURCE_PATH to be set! Please correct the portfile!")
+ endif()
+
+ vcpkg_buildpath_length_warning(37)
+ qt_get_submodule_name(NAME)
+
+ set(FULL_VERSION "${QT_MAJOR_MINOR_VER}.${QT_PATCH_VER}")
+ set(ARCHIVE_NAME "${NAME}-everywhere-opensource-src-${FULL_VERSION}.tar.xz")
+ set(URLS
+ "https://download.qt.io/archive/qt/${QT_MAJOR_MINOR_VER}/${FULL_VERSION}/submodules/${ARCHIVE_NAME}"
+ "https://mirrors.ocf.berkeley.edu/qt/archive/qt/${QT_MAJOR_MINOR_VER}/${FULL_VERSION}/submodules/${ARCHIVE_NAME}"
+ )
+ vcpkg_download_distfile(ARCHIVE_FILE
+ URLS ${URLS}
+ FILENAME ${ARCHIVE_NAME}
+ SHA512 ${QT_HASH_${PORT}}
+ )
+
+ if(QT_UPDATE_VERSION)
+ file(SHA512 "${ARCHIVE_FILE}" ARCHIVE_HASH)
+ message(STATUS "${PORT} new hash is ${ARCHIVE_HASH}")
+ file(APPEND "${VCPKG_ROOT_DIR}/ports/qt5-base/cmake/qt_new_hashes.cmake" "set(QT_HASH_${PORT} ${ARCHIVE_HASH})\n")
+ else()
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${ARCHIVE_FILE}"
+ REF ${FULL_VERSION}
+ PATCHES ${_csc_PATCHES}
+ )
+ endif()
+
+ set(${_csc_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/ports/qt5-base/cmake/qt_fix_cmake.cmake b/vcpkg/ports/qt5-base/cmake/qt_fix_cmake.cmake new file mode 100644 index 0000000..1b65227 --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_fix_cmake.cmake @@ -0,0 +1,21 @@ +function(qt_fix_cmake PACKAGE_DIR_TO_FIX PORT_TO_FIX)
+
+ file(GLOB_RECURSE cmakefiles ${PACKAGE_DIR_TO_FIX}/share/cmake/*.cmake ${PACKAGE_DIR_TO_FIX}/lib/cmake/*.cmake)
+ foreach(cmakefile ${cmakefiles})
+ file(READ "${cmakefile}" _contents)
+ if(_contents MATCHES "_install_prefix}/tools/qt5/bin/([a-z0-9]+)") # there are only about 3 to 5 cmake files which require the fix in ports: qt5-tools qt5-xmlpattern at5-activeqt qt5-quick
+ string(REGEX REPLACE "_install_prefix}/tools/qt5/bin/([a-z0-9]+)" "_install_prefix}/tools/${PORT_TO_FIX}/bin/\\1" _contents "${_contents}")
+ file(WRITE "${cmakefile}" "${_contents}")
+ endif()
+ endforeach()
+
+ #Install cmake files
+ if(EXISTS ${PACKAGE_DIR_TO_FIX}/lib/cmake)
+ file(MAKE_DIRECTORY ${PACKAGE_DIR_TO_FIX}/share)
+ file(RENAME ${PACKAGE_DIR_TO_FIX}/lib/cmake ${PACKAGE_DIR_TO_FIX}/share/cmake)
+ endif()
+ #Remove extra cmake files
+ if(EXISTS ${PACKAGE_DIR_TO_FIX}/debug/lib/cmake)
+ file(REMOVE_RECURSE ${PACKAGE_DIR_TO_FIX}/debug/lib/cmake)
+ endif()
+endfunction()
\ No newline at end of file diff --git a/vcpkg/ports/qt5-base/cmake/qt_fix_makefile_install.cmake b/vcpkg/ports/qt5-base/cmake/qt_fix_makefile_install.cmake new file mode 100644 index 0000000..025adf9 --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_fix_makefile_install.cmake @@ -0,0 +1,33 @@ +#Could probably be a vcpkg_fix_makefile_install for other ports?
+function(qt_fix_makefile_install BUILD_DIR)
+ #Fix the installation location
+ set(MSYS_HACK "")
+ if(VCPKG_HOST_IS_WINDOWS)
+ file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR)
+ file(TO_NATIVE_PATH "${CURRENT_PACKAGES_DIR}" NATIVE_PACKAGES_DIR)
+ if(VCPKG_TARGET_IS_MINGW)
+ set(MSYS_HACK ":@msyshack@%=%")
+ file(STRINGS "${BUILD_DIR}/Makefile" using_sh REGEX "= rm -f")
+ if(using_sh)
+ set(NATIVE_INSTALLED_DIR "${CURRENT_INSTALLED_DIR}")
+ set(NATIVE_PACKAGES_DIR "${CURRENT_PACKAGES_DIR}")
+ endif()
+ endif()
+ string(SUBSTRING "${NATIVE_INSTALLED_DIR}" 0 2 INSTALLED_DRIVE)
+ string(SUBSTRING "${NATIVE_PACKAGES_DIR}" 0 2 PACKAGES_DRIVE)
+ string(SUBSTRING "${NATIVE_INSTALLED_DIR}" 2 -1 INSTALLED_DIR_WITHOUT_DRIVE)
+ string(SUBSTRING "${NATIVE_PACKAGES_DIR}" 2 -1 PACKAGES_DIR_WITHOUT_DRIVE)
+ else()
+ set(INSTALLED_DRIVE "")
+ set(PACKAGES_DRIVE "")
+ set(INSTALLED_DIR_WITHOUT_DRIVE "${CURRENT_INSTALLED_DIR}")
+ set(PACKAGES_DIR_WITHOUT_DRIVE "${CURRENT_PACKAGES_DIR}")
+ endif()
+ set(installed "${INSTALLED_DRIVE}$(INSTALL_ROOT${MSYS_HACK})${INSTALLED_DIR_WITHOUT_DRIVE}")
+ set(packages "${PACKAGES_DRIVE}$(INSTALL_ROOT${MSYS_HACK})${PACKAGES_DIR_WITHOUT_DRIVE}")
+
+ file(GLOB_RECURSE MAKEFILES "${BUILD_DIR}/*Makefile*")
+ foreach(MAKEFILE ${MAKEFILES})
+ vcpkg_replace_string("${MAKEFILE}" "${installed}" "${packages}" IGNORE_UNCHANGED)
+ endforeach()
+endfunction()
diff --git a/vcpkg/ports/qt5-base/cmake/qt_fix_prl.cmake b/vcpkg/ports/qt5-base/cmake/qt_fix_prl.cmake new file mode 100644 index 0000000..551ec11 --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_fix_prl.cmake @@ -0,0 +1,15 @@ +function(qt_fix_prl PACKAGE_DIR PRL_FILES)
+ file(TO_CMAKE_PATH "${PACKAGE_DIR}/lib" CMAKE_LIB_PATH)
+ file(TO_CMAKE_PATH "${PACKAGE_DIR}/include/qt5" CMAKE_INCLUDE_PATH)
+ file(TO_CMAKE_PATH "${PACKAGE_DIR}/include" CMAKE_INCLUDE_PATH2)
+ file(TO_CMAKE_PATH "${CURRENT_INSTALLED_DIR}" CMAKE_INSTALLED_PREFIX)
+ foreach(PRL_FILE IN LISTS PRL_FILES)
+ file(READ "${PRL_FILE}" _contents)
+ string(REPLACE "${CMAKE_LIB_PATH}" "\$\$[QT_INSTALL_LIBS]" _contents "${_contents}")
+ string(REPLACE "${CMAKE_INCLUDE_PATH}" "\$\$[QT_INSTALL_HEADERS]" _contents "${_contents}")
+ string(REPLACE "${CMAKE_INCLUDE_PATH2}" "\$\$[QT_INSTALL_HEADERS]/../" _contents "${_contents}")
+ string(REPLACE "${CMAKE_INSTALLED_PREFIX}" "\$\$[QT_INSTALL_PREFIX]" _contents "${_contents}")
+ #Note: This only works without an extra if case since QT_INSTALL_PREFIX is the same for debug and release
+ file(WRITE "${PRL_FILE}" "${_contents}")
+ endforeach()
+endfunction()
\ No newline at end of file diff --git a/vcpkg/ports/qt5-base/cmake/qt_install_copyright.cmake b/vcpkg/ports/qt5-base/cmake/qt_install_copyright.cmake new file mode 100644 index 0000000..ba4d70c --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_install_copyright.cmake @@ -0,0 +1,18 @@ +#Could probably be the beginning of a vcpkg_install_copyright?
+function(qt_install_copyright SOURCE_PATH)
+ #Find the relevant license file and install it
+ if(EXISTS "${SOURCE_PATH}/LICENSE.LGPLv3")
+ set(LICENSE_PATH "${SOURCE_PATH}/LICENSE.LGPLv3")
+ elseif(EXISTS "${SOURCE_PATH}/LICENSE.LGPL3")
+ set(LICENSE_PATH "${SOURCE_PATH}/LICENSE.LGPL3")
+ elseif(EXISTS "${SOURCE_PATH}/LICENSE.GPLv3")
+ set(LICENSE_PATH "${SOURCE_PATH}/LICENSE.GPLv3")
+ elseif(EXISTS "${SOURCE_PATH}/LICENSE.GPL3")
+ set(LICENSE_PATH "${SOURCE_PATH}/LICENSE.GPL3")
+ elseif(EXISTS "${SOURCE_PATH}/LICENSE.GPL3-EXCEPT")
+ set(LICENSE_PATH "${SOURCE_PATH}/LICENSE.GPL3-EXCEPT")
+ elseif(EXISTS "${SOURCE_PATH}/LICENSE.FDL")
+ set(LICENSE_PATH "${SOURCE_PATH}/LICENSE.FDL")
+ endif()
+ file(INSTALL ${LICENSE_PATH} DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
+endfunction()
\ No newline at end of file diff --git a/vcpkg/ports/qt5-base/cmake/qt_port_functions.cmake b/vcpkg/ports/qt5-base/cmake/qt_port_functions.cmake new file mode 100644 index 0000000..19f53f9 --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_port_functions.cmake @@ -0,0 +1,14 @@ +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+
+#Basic setup
+include(qt_port_hashes)
+#Fixup scripts
+include(qt_fix_makefile_install)
+include(qt_fix_cmake)
+include(qt_fix_prl)
+#Helper functions
+include(qt_download_submodule)
+include(qt_build_submodule)
+include(qt_install_copyright)
+
+include(qt_submodule_installation)
diff --git a/vcpkg/ports/qt5-base/cmake/qt_port_hashes.cmake b/vcpkg/ports/qt5-base/cmake/qt_port_hashes.cmake new file mode 100644 index 0000000..89e4621 --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_port_hashes.cmake @@ -0,0 +1,76 @@ +# Every update requires an update of these hashes and the version within the control file of each of the 32 ports.
+# So it is probably better to have a central location for these hashes and let the ports update via a script
+set(QT_MAJOR_MINOR_VER 5.15)
+set(QT_PATCH_VER 18)
+set(QT_UPDATE_VERSION OFF) # Switch to update qt and not build qt. Creates a file cmake/qt_new_hashes.cmake in qt5-base with the new hashes.
+
+set(QT_PORT_LIST base 3d activeqt charts connectivity datavis3d declarative gamepad graphicaleffects imageformats location macextras multimedia networkauth
+ purchasing quickcontrols quickcontrols2 remoteobjects script scxml sensors serialport speech svg tools virtualkeyboard webchannel websockets
+ webview winextras xmlpatterns doc x11extras androidextras translations serialbus webengine webglplugin wayland)
+
+# qt5-mqtt archive is not included in 5.15.18 release, updated separately
+# list(APPEND QT_PORT_LIST mqtt)
+
+set(QT_HASH_qt5-3d 53825ff0bad5adc73bafbdf426e7209a770860f8e0ac97f89fdf61b07ac2431d54ce8ad2fbcb69ca3c2a5b953d76a3bcc0d236c32c6b45d219ee6fcb582c5974)
+set(QT_HASH_qt5-activeqt f5a29d97d35cf634843d9b202e7f4c2d2bafaac4dd9c5df2348858588d9e64ff57726b91a485ce6433e701b04b4ce0c880b847472a3f064ca4dc3d831901ae79)
+set(QT_HASH_qt5-androidextras aeca703d1709f6352c83d634b5a52819400b9f5cde9286b2e93120a37604a059f136ac3ccf466df06ff27394038b90522c8f5dfc18473ee176768c66a44159d9)
+set(QT_HASH_qt5-base d39c831e6f3ddcd6a50f103ff60a0700b451f137782249508b7447a80066e3e9259c9b5038e6077ccf8df06b6afefec232c3c4dd331d85765089c92571708206)
+set(QT_HASH_qt5-charts 9c4b0d0c7456604048742f0628ecf049217acbb8a4a23c925ef6ce5c47eaf9fbcf6b1aecdcd1113679c9edf8a1635f3ca585acb31fd548f3ab577c5f4e54f3f2)
+set(QT_HASH_qt5-connectivity 26f194965090dc44547b46a7ee73d3dc30d3817f213b809f2e2fb9596b2184e5fa276e600d706675ad0f19b0b421c0fc8e52afbc0b6a16eeff00c4c459027dca)
+set(QT_HASH_qt5-datavis3d 877b1a15b382d1cfbe32cfbba2d4f7edd8ddc806bc801c23a2f310cc0e892953a63b05fa031f4d1b197013c6da8ea41945ccd2e53f2c1abb33b44414e89eaedf)
+set(QT_HASH_qt5-declarative 73c45c47b5074b6bc1127abb1b3cf1cd751deeb80c2f9c86a675c7323fecf20bd83363fad95803bc72cf494ae4679c1f38a02387363f266c093c707e700c9ea2)
+set(QT_HASH_qt5-doc fa7a39b69778c96dccff2120544d0bdeccc03bf30c92a0f17bc6aa981ae5ee3589fecb3663a855ccde1a59068dde780fa76790d03e758e267efed5df37ae3cf3)
+set(QT_HASH_qt5-gamepad 03d07b4fe07adfad7dc8c3844f16c6f18f023417cefca52b5f833e95d4db47b7b228268d0d2547bc7a77dbc7a7e3174408c026f56126052ef30fbe7c7345014e)
+set(QT_HASH_qt5-graphicaleffects 6fff9181d8d0a4f55987e2b219d35adf4db28429206e4ec0572a03664c155aea046a08a1d820fbc5d27f9f3ec4c60768823959c5839766ab2768f64c440273da)
+set(QT_HASH_qt5-imageformats 5e8b0895e8b7aa05142ae21eee3f79fb289a8edf6eeed62a59be3ae60d164a2698344740ff283c753e9b61cd6af516d8c7301597762183222ceff0f4c8dddd46)
+set(QT_HASH_qt5-location 587e1cc8c8f46ab09ea79c4142dbecc52466dafa94c4bfa61264eba4f202fb5e2979d1ae6ba5fb924376d75764f28b58c7bcc03ab29edef2524aa872adb3c936)
+set(QT_HASH_qt5-macextras cc8c10a149c150a7fe422616a1dcf56abfa3c9c0e3f95521bb5c1c1e6873d7f48c547c0c8acacbe3a8e936f048fb687d0913f03b6b7ec27a4087f92f6b389eaf)
+set(QT_HASH_qt5-multimedia edebe73911c82ef5671602f895dd1cddcc39b8afb29267be54921848713344d531e49f4cbcfb9a57b095c4e736a9100c245290391102ddccdb08997057a12bd8)
+set(QT_HASH_qt5-networkauth f3f9cce52161b77b1e3ebda32444fefed9cff077b9546e0d1b7942b0710e6a8f8681f9c10b521dc56fa3a0020338c59334b6c870420fa1a34a9ae3bbe30dc2d5)
+set(QT_HASH_qt5-purchasing e0bdf99a399b52b6195a622202d58191262885808477ab7c977bedc88045fef602cc55ba275adc3a6798951d6c4ff1f0e0af63d0ed95403872c58d9294a57802)
+set(QT_HASH_qt5-quick3d 4b1669a5499b23bc76b959340890d6690cd12ba39b3157a7a8499d44065ca5d258e45e9758c94b5959f02956b7b3f04e0095aace3e46552ad697ae11cc5e24e5)
+set(QT_HASH_qt5-quickcontrols 9bd2bcd119d162f8ef30b2e1f459776a66b504f5043809cc0846b7c4898ca464eb44f65d1c76d3857a12eef7126ec8a84f8ac3566b5c3200b65572a3ff9296f7)
+set(QT_HASH_qt5-quickcontrols2 29d0904c949b4970eae576d20f94b5c92f1fcb71056bb085b6ea8421c894aa265ae9a5cdbd6e21ac849f14385833ed2961a18dcc2c66ea6ed8a28feb51bd7375)
+set(QT_HASH_qt5-quicktimeline 730a8c5080510175d3e62919a31bda78e5eeb32bbbd0087be46a1576278684f74a522a5615d8d5fe095d2d364a902470c22afd330adba94c7375814a4b29d99a)
+set(QT_HASH_qt5-remoteobjects a4357d720a77d09a1d5e38bbd1152f042d4ac902476de83e74834d5d0b9af210618174d988089818ec7787870caeb496af020dfc80e123b86bfb51b7919a14e5)
+set(QT_HASH_qt5-script e4cd79deb2cba1f4216acb6744c50540e41c4a56dd37f4f49631cad7b520642292192ddc8b7cff1f741350e4b8b83aae0626ec3c546366bd4bcaf58c7f849923)
+set(QT_HASH_qt5-scxml 9ad88607e25b6bf43ae460904a3ccfb3514c6a6b739dfce4799958d5897601370a83f818e706a0270ccab1a995976384553d1bfca74f53f08bda3f9d1b58cf4c)
+set(QT_HASH_qt5-sensors cecc4a7d6eeb64d1bd7c1d9d6c23926bca5168ed50ef5197094b296a61e024b62a5aaed6bfa97c84da2d342faf14d15c473646c5c400973be7172e4617824d94)
+set(QT_HASH_qt5-serialbus eb2e7d987b9e7f05f8952c3e424b23347c30a274f22acc0714f2769a9c891a12f212a2cd977a09e34b2f93079c7554e8c65425fe403f996a27c5f31e87c63697)
+set(QT_HASH_qt5-serialport 4944c4fc03386c635197c9d0fa4550fd05285c9bd36861409e2c5282aeee153baa5bc285be5314a6309026f54058f8bd605be389471a1dd34b3236f3d05131ec)
+set(QT_HASH_qt5-speech f3a9e4782532ee62c455eda6e63a25e49392ea4cbb7e6801e6eb1bb9d58e9bd802769e26811c8afcebc0c6e106fe7d3c56b69ea83c28c1d89603ecc228c1c919)
+set(QT_HASH_qt5-svg 2c599bdd0b82eeb969233bac7cb5d53896d3d873ee37b72fead0c3ef38feaef84c8e0a42425ce3ae185ca0f4d8f4590ec95829fc815bda65dd546d1697de8493)
+set(QT_HASH_qt5-tools 30a278df553ff3bb64927a4a5be0370b070131ec2970410095b4618e6a0f6e7c45374abf37c458b69dd9e4f7cecb98289b8e777cf5bc85b09f0b5cd278a40a70)
+set(QT_HASH_qt5-translations 52a1ca84c01c4a2728d1b7a3168c8d6ffd12f8e8528d729b422d9339a01dcbcb5a768999a252b28b6f4041eb20f874fe74c0389724c54a09ec9dfe42312b4af9)
+set(QT_HASH_qt5-virtualkeyboard f7dd1365e45b7ed5f5f942abc6e4a1ea964955d9836bcfabed2c6de9669bcc47693c09370dd917e244bcaefe68cdcb06a985c798dcd612aafb03c1ebfca5b536)
+set(QT_HASH_qt5-wayland 9e0d07a4a91eb6dd1bde6b211bae2b64f2035a28176c277adb86ab5d3a281c7740930dc304db94990c1d2277ef54d17b934f99326413719626fb161b612c033f)
+set(QT_HASH_qt5-webchannel fb867510da8b74cac277598e346c5eed7bbaaa6b1be85c39b804a07209922ccdc87e314d9ced4eeb966cc06888127772dff517a8f6fef10c8e87080a59112bfa)
+set(QT_HASH_qt5-webengine 731e9b01746efa0696bc89299fa4847157077bd21567a9d3358006d6bb7dddbadea5c085f9dfae12279e41619b4751d1d0009bfd0ee4f9ceab3bd1a567831ed2)
+set(QT_HASH_qt5-webglplugin 63a05f522e44b2fdefc5394faeb3619f596dd62c59d6e5f0e27ea32560f8ec3e8b6906b78607664f3b392b68dc69c5266a9d398860bdef6153f33fa29acfc49a)
+set(QT_HASH_qt5-websockets 29b59fe6681030150b87d18a052f00f05ac17db17203279d794a8161783d739938e9ea659519f7b7c76f3d7e40009ea1797e255ae464a1cd641caa6c039d4777)
+set(QT_HASH_qt5-webview 5dc6ae1b648a66572947f36d4e668b3219d7c40f9b455871fb673268de24b0d7e84075b6bcd4aa1cb72ec6a6bd3519344a66e2481b783786df6a613aacfacac0)
+set(QT_HASH_qt5-winextras 608f6bcc6c1d259c096da3f2142e24c71d907e4af7f2107190521d7c977692061d1002ca0053511197cb96a00fd99208f8dee3b7510549fd3be5a397e7fc00b8)
+set(QT_HASH_qt5-x11extras 7e12f87da4a2c8333adc09f0069cfdbb6b81e778b0e261b13a8631a90bc21deb831fc4d74229e977afa864919ef6dbe98fc37ef29eeffee52cacef21af4216f7)
+set(QT_HASH_qt5-xmlpatterns 2c1f1ec6c2a70a2151259a290675b15e44475f19afa46f396b4cd511e3aeb7cd83fffd7d76ddde31817c5f2e944dcd32587550713aed34aac9585f3eeef7e39b)
+
+if(QT_UPDATE_VERSION)
+ message(STATUS "Running Qt in automatic version port update mode!")
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK 1)
+ if("${PORT}" MATCHES "qt5-base")
+ function(update_qt_version_in_manifest _port_name)
+ set(_current_control "${VCPKG_ROOT_DIR}/ports/${_port_name}/vcpkg.json")
+ file(READ ${_current_control} _control_contents)
+ #message(STATUS "Before: \n${_control_contents}")
+ string(REGEX REPLACE "\"version.*\": \"[0-9]+\.[0-9]+\.[0-9]+\",\n" "\"version\": \"${QT_MAJOR_MINOR_VER}.${QT_PATCH_VER}\",\n" _control_contents "${_control_contents}")
+ string(REGEX REPLACE "\n \"port-version\": [0-9]+," "" _control_contents "${_control_contents}")
+ #message(STATUS "After: \n${_control_contents}")
+ file(WRITE ${_current_control} "${_control_contents}")
+ configure_file("${_current_control}" "${_current_control}" @ONLY NEWLINE_STYLE LF)
+ endfunction()
+
+ update_qt_version_in_manifest("qt5")
+ foreach(_current_qt_port_basename ${QT_PORT_LIST})
+ update_qt_version_in_manifest("qt5-${_current_qt_port_basename}")
+ endforeach()
+ endif()
+endif()
diff --git a/vcpkg/ports/qt5-base/cmake/qt_submodule_installation.cmake b/vcpkg/ports/qt5-base/cmake/qt_submodule_installation.cmake new file mode 100644 index 0000000..19c0b4e --- /dev/null +++ b/vcpkg/ports/qt5-base/cmake/qt_submodule_installation.cmake @@ -0,0 +1,15 @@ +
+
+function(qt_submodule_installation)
+ cmake_parse_arguments(_csc "" "OUT_SOURCE_PATH" "" ${ARGN})
+ qt_download_submodule(OUT_SOURCE_PATH TARGET_SOURCE_PATH ${_csc_UNPARSED_ARGUMENTS})
+ if(QT_UPDATE_VERSION)
+ SET(VCPKG_POLICY_EMPTY_PACKAGE enabled PARENT_SCOPE)
+ else()
+ qt_build_submodule(${TARGET_SOURCE_PATH} ${_csc_UNPARSED_ARGUMENTS})
+ qt_install_copyright(${TARGET_SOURCE_PATH})
+ endif()
+ if(DEFINED _csc_OUT_SOURCE_PATH)
+ set(${_csc_OUT_SOURCE_PATH} ${TARGET_SOURCE_PATH} PARENT_SCOPE)
+ endif()
+endfunction()
\ No newline at end of file diff --git a/vcpkg/ports/qt5-base/patches/CVE-2025-30348-qtbase-5.15.diff b/vcpkg/ports/qt5-base/patches/CVE-2025-30348-qtbase-5.15.diff new file mode 100644 index 0000000..bbc001a --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/CVE-2025-30348-qtbase-5.15.diff @@ -0,0 +1,156 @@ +From 16918c1df3e709df2a97281e3825d94c84edb668 Mon Sep 17 00:00:00 2001 +From: Christian Ehrlicher <ch.ehrlicher@gmx.de> +Date: Tue, 06 Aug 2024 22:39:44 +0200 +Subject: [PATCH] XML/QDom: speedup encodeText() + +The code copied the whole string, then replaced parts inline, at +the cost of relocating everything beyond, at each replacement. +Instead, copy character by character (in chunks where possible) +and append replacements as we skip what they replace. + +Manual conflict resolution for 6.5: +- This is a manual cherry-pick. The original change was only + picked to 6.8, but the quadratic behavior is present in Qt 5, too. +- Changed Task-number to Fixes: because this is the real fix; + the QString change, 315210de916d060c044c01e53ff249d676122b1b, + was unrelated to the original QTBUG-127549. + +Manual conflcit resolution for 5.15: +- Kept/re-added QTextCodec::canEncode() check +- Ported from Qt 6 to 5, to wit: + - qsizetype -> int + - QStringView::first/sliced(n) -> left/mid(n) + (these functions are clearly called in-range, so the widened + contract of the Qt 5 functions doesn't matter) +- Ported from C++17- and C++14-isms to C++11: + - replaced polymorphic lambda with a normal one (this requires + rewriting the !canEncode() branch to use QByteArray/QLatin1String + instead of QString) +- As a drive-by, corrected the indentation of the case labels to + horizontally align existing code (and follow Qt style) + +Fixes: QTBUG-127549 +Change-Id: I368482859ed0c4127f1eec2919183711b5488ada +Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> +(cherry picked from commit 2ce08e3671b8d18b0284447e5908ce15e6e8f80f) +Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> +(cherry picked from commit 225e235cf966a44af23dbe9aaaa2fd20ab6430ee) +Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> +(cherry picked from commit 905a5bd421efff6a1d90b6140500d134d32ca745) +--- + +diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp +index 872221c..bf70477 100644 +--- a/src/xml/dom/qdom.cpp ++++ b/src/xml/dom/qdom.cpp +@@ -3676,59 +3676,67 @@ + const QTextCodec *const codec = s.codec(); + Q_ASSERT(codec); + #endif +- QString retval(str); +- int len = retval.length(); +- int i = 0; ++ QString retval; ++ int start = 0; ++ auto appendToOutput = [&](int cur, QLatin1String replacement) ++ { ++ if (start < cur) { ++ retval.reserve(str.size() + replacement.size()); ++ retval.append(QStringView(str).left(cur).mid(start)); ++ } ++ // Skip over str[cur], replaced by replacement ++ start = cur + 1; ++ retval.append(replacement); ++ }; + +- while (i < len) { +- const QChar ati(retval.at(i)); +- +- if (ati == QLatin1Char('<')) { +- retval.replace(i, 1, QLatin1String("<")); +- len += 3; +- i += 4; +- } else if (encodeQuotes && (ati == QLatin1Char('"'))) { +- retval.replace(i, 1, QLatin1String(""")); +- len += 5; +- i += 6; +- } else if (ati == QLatin1Char('&')) { +- retval.replace(i, 1, QLatin1String("&")); +- len += 4; +- i += 5; +- } else if (ati == QLatin1Char('>') && i >= 2 && retval[i - 1] == QLatin1Char(']') && retval[i - 2] == QLatin1Char(']')) { +- retval.replace(i, 1, QLatin1String(">")); +- len += 3; +- i += 4; +- } else if (performAVN && +- (ati == QChar(0xA) || +- ati == QChar(0xD) || +- ati == QChar(0x9))) { +- const QString replacement(QLatin1String("&#x") + QString::number(ati.unicode(), 16) + QLatin1Char(';')); +- retval.replace(i, 1, replacement); +- i += replacement.length(); +- len += replacement.length() - 1; +- } else if (encodeEOLs && ati == QChar(0xD)) { +- retval.replace(i, 1, QLatin1String("
")); // Replace a single 0xD with a ref for 0xD +- len += 4; +- i += 5; +- } else { ++ const int len = str.size(); ++ for (int cur = 0; cur < len; ++cur) { ++ switch (const char16_t ati = str[cur].unicode()) { ++ case u'<': ++ appendToOutput(cur, QLatin1String("<")); ++ break; ++ case u'"': ++ if (encodeQuotes) ++ appendToOutput(cur, QLatin1String(""")); ++ break; ++ case u'&': ++ appendToOutput(cur, QLatin1String("&")); ++ break; ++ case u'>': ++ if (cur >= 2 && str[cur - 1] == u']' && str[cur - 2] == u']') ++ appendToOutput(cur, QLatin1String(">")); ++ break; ++ case u'\r': ++ if (performAVN || encodeEOLs) ++ appendToOutput(cur, QLatin1String("
")); // \r == 0x0d ++ break; ++ case u'\n': ++ if (performAVN) ++ appendToOutput(cur, QLatin1String("
")); // \n == 0x0a ++ break; ++ case u'\t': ++ if (performAVN) ++ appendToOutput(cur, QLatin1String("	")); // \t == 0x09 ++ break; ++ default: + #if QT_CONFIG(textcodec) + if(codec->canEncode(ati)) +- ++i; ++ ; // continue + else + #endif + { + // We have to use a character reference to get it through. +- const ushort codepoint(ati.unicode()); +- const QString replacement(QLatin1String("&#x") + QString::number(codepoint, 16) + QLatin1Char(';')); +- retval.replace(i, 1, replacement); +- i += replacement.length(); +- len += replacement.length() - 1; ++ const QByteArray replacement = "&#x" + QByteArray::number(uint{ati}, 16) + ';'; ++ appendToOutput(cur, QLatin1String{replacement}); + } ++ break; + } + } +- +- return retval; ++ if (start > 0) { ++ retval.append(QStringView(str).left(len).mid(start)); ++ return retval; ++ } ++ return str; + } + + void QDomAttrPrivate::save(QTextStream& s, int, int) const diff --git a/vcpkg/ports/qt5-base/patches/CVE-2025-4211-qtbase-5.15.diff b/vcpkg/ports/qt5-base/patches/CVE-2025-4211-qtbase-5.15.diff new file mode 100644 index 0000000..1437f33 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/CVE-2025-4211-qtbase-5.15.diff @@ -0,0 +1,61 @@ +From 3d20cd0105c2ae06605c5078e7675e200f1a001a Mon Sep 17 00:00:00 2001 +From: MÃ¥rten Nordheim <marten.nordheim@qt.io> +Date: Mon, 17 Mar 2025 14:22:11 +0100 +Subject: [PATCH] QFileSystemEngine/Win: Use GetTempPath2 when available + +Because the documentation for GetTempPath nows says apps should call +GetTempPath2.[0] + +Starting with Windows 11[1], and recently Windows 10[2], +GetTempPath2 was added. The difference being that elevated +processes are returned a different directory. Usually +'C:\Windows\SystemTemp'. + +Currently temporary files of an elevated process may be placed in a +world write-able location. GetTempPath2, by default, but can be +overridden, places it in a directory that's only accessible by SYSTEM +and administrators. + +[0] https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettemppathw#remarks +[1] https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettemppath2w +(Minimum supported client - Windows 11 Build 22000) +[2] https://blogs.windows.com/windows-insider/2025/03/13/releasing-windows-10-build-19045-5674-to-the-release-preview-channel/ +(This update enables system processes to store temporary files ...) + +[ChangeLog][QtCore][Important Behavior Changes] On +Windows, generating temporary directories for processes with elevated +privileges may now return a different path with a stricter +set of permissions. Please consult Microsoft's documentation from when +they made the same change for the .NET framework: +https://support.microsoft.com/en-us/topic/gettemppath-changes-in-windows-february-cumulative-update-preview-4cc631fb-9d97-4118-ab6d-f643cd0a7259 + +Change-Id: I5caf11151fb2f711bbc5599231f140598b3c9d03 +Reviewed-by: Marc Mutz <marc.mutz@qt.io> +(cherry picked from commit 69633bcb58e681bac5bff3744e5a2352788dc36c) +Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> +(cherry picked from commit 6a684a53b371ec483b27bf243af24819be63f85f) +(cherry picked from commit bbeccc0c22e520f46f0b33e281fa5ac85ac9c727) +(cherry picked from commit 59d7eb9bbb4f13cccbd9323fd995a8c108b56e60) +--- + +diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp +index 75c661f..37a400f 100644 +--- a/src/corelib/io/qfilesystemengine_win.cpp ++++ b/src/corelib/io/qfilesystemengine_win.cpp +@@ -1390,7 +1390,15 @@ + QString ret; + #ifndef Q_OS_WINRT + wchar_t tempPath[MAX_PATH]; +- const DWORD len = GetTempPath(MAX_PATH, tempPath); ++ using GetTempPathPrototype = DWORD (WINAPI *)(DWORD, LPWSTR); ++ // We try to resolve GetTempPath2 and use that, otherwise fall back to GetTempPath: ++ static GetTempPathPrototype getTempPathW = []() { ++ const HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); ++ if (auto *func = QFunctionPointer(GetProcAddress(kernel32, "GetTempPath2W"))) ++ return GetTempPathPrototype(func); ++ return GetTempPath; ++ }(); ++ const DWORD len = getTempPathW(MAX_PATH, tempPath); + if (len) { // GetTempPath() can return short names, expand. + wchar_t longTempPath[MAX_PATH]; + const DWORD longLen = GetLongPathName(tempPath, longTempPath, MAX_PATH); diff --git a/vcpkg/ports/qt5-base/patches/CVE-2025-5455-qtbase-5.15.patch b/vcpkg/ports/qt5-base/patches/CVE-2025-5455-qtbase-5.15.patch new file mode 100644 index 0000000..9cee864 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/CVE-2025-5455-qtbase-5.15.patch @@ -0,0 +1,20 @@ +diff --git a/src/corelib/io/qdataurl.cpp b/src/corelib/io/qdataurl.cpp +index f14d399301f..83e59e3ac00 100644 +--- a/src/corelib/io/qdataurl.cpp ++++ b/src/corelib/io/qdataurl.cpp +@@ -76,10 +76,11 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray + } + + if (data.toLower().startsWith("charset")) { +- int i = 7; // strlen("charset") +- while (data.at(i) == ' ') +- ++i; +- if (data.at(i) == '=') ++ int prefixSize = 7; // strlen("charset") ++ QLatin1String copy(data.constData() + prefixSize, data.size() - prefixSize); ++ while (copy.startsWith(QLatin1String(" "))) ++ copy = copy.mid(1); ++ if (copy.startsWith(QLatin1String("="))) + data.prepend("text/plain;"); + } + diff --git a/vcpkg/ports/qt5-base/patches/Qt5BasicConfig.patch b/vcpkg/ports/qt5-base/patches/Qt5BasicConfig.patch new file mode 100644 index 0000000..4f5d1fa --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/Qt5BasicConfig.patch @@ -0,0 +1,194 @@ +diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in +index c72989288..a88234dca 100644 +--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in ++++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in +@@ -53,8 +53,12 @@ function(_qt5_$${CMAKE_MODULE_NAME}_process_prl_file prl_file_location Configura + set(_lib_deps) + set(_link_flags) + +-!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) +- set(_qt5_install_libs \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}\") ++!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) ++ if(\"${Configuration}\" STREQUAL \"DEBUG\") ++ set(_qt5_install_libs \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_LIB_DIR}\") ++ else() ++ set(_qt5_install_libs \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}\") ++ endif() + !!ELSE + set(_qt5_install_libs \"$${CMAKE_LIB_DIR}\") + !!ENDIF +@@ -125,6 +129,8 @@ function(_qt5_$${CMAKE_MODULE_NAME}_process_prl_file prl_file_location Configura + elseif(EXISTS \"${_flag}\") + # The flag is an absolute path to an existing library + list(APPEND _lib_deps \"${_flag}\") ++ elseif(_flag MATCHES \"\\\\.lib$\") #Library name only. No -l. Probably missing some cases ++ list(APPEND _lib_deps \"${_flag}\") + elseif(_flag MATCHES \"^-L(.*)$\") + # Handle -Lfoo flags by putting their paths in the search path used by find_library above + list(APPEND _search_paths \"${CMAKE_MATCH_1}\") +@@ -147,7 +153,11 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI + set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration}) + + !!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE) +- set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\") ++ if(\"${Configuration}\" STREQUAL \"DEBUG\") # 1 ++ set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_DLL_DIR}${LIB_LOCATION}\") ++ else() ++ set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\") ++ endif() + !!ELSE + set(imported_location \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\") + !!ENDIF +@@ -174,21 +184,22 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI + ) + + !!IF !isEmpty(CMAKE_STATIC_TYPE) +- if(NOT "${IsDebugAndRelease}") +- set(_genex_condition \"1\") ++ #if(NOT "${IsDebugAndRelease}") ++ # set(_genex_condition \"1\") ++ #else() ++ if("${Configuration}" STREQUAL "DEBUG") ++ set(_genex_condition \"$<CONFIG:Debug>\") + else() +- if("${Configuration}" STREQUAL "DEBUG") +- set(_genex_condition \"$<CONFIG:Debug>\") +- else() +- set(_genex_condition \"$<NOT:$<CONFIG:Debug>>\") +- endif() ++ set(_genex_condition \"$<NOT:$<CONFIG:Debug>>\") + endif() ++ #endif() + + if(_static_deps) + set(_static_deps_genex \"$<${_genex_condition}:${_static_deps}>\") + set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_LIBRARIES + \"${_static_deps_genex}\" + ) ++ #message(STATUS \"Target Qt5::$${CMAKE_MODULE_NAME} static links: ${_static_dep} through ${_static_dep_genex}\") # Added for debugging + endif() + + set(_static_link_flags \"${_Qt5$${CMAKE_MODULE_NAME}_STATIC_${Configuration}_LINK_FLAGS}\") +@@ -205,13 +216,18 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI + set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_LIBRARIES + \"${_static_link_flags_genex}\" + ) ++ #message(STATUS \"Target Qt5::$${CMAKE_MODULE_NAME} static link flags: ${_static_link_flags} through ${_static_link_flags_genex}\") + endif() + endif() + !!ENDIF + + !!IF !isEmpty(CMAKE_WINDOWS_BUILD) + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) +- set(imported_implib \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\") ++ if(\"${Configuration}\" STREQUAL \"DEBUG\") ++ set(imported_implib \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\") ++ else() ++ set(imported_implib \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\") ++ endif() + !!ELSE + set(imported_implib \"IMPORTED_IMPLIB_${Configuration}\" \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\") + !!ENDIF +@@ -373,13 +389,14 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) + + !!IF !isEmpty(CMAKE_STATIC_TYPE) + if(NOT Qt5_EXCLUDE_STATIC_DEPENDENCIES) +-!!IF !isEmpty(CMAKE_DEBUG_TYPE) + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) ++ if(EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\") + _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( +- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\" DEBUG ++ \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\" DEBUG + _Qt5$${CMAKE_MODULE_NAME}_STATIC_DEBUG_LIB_DEPENDENCIES + _Qt5$${CMAKE_MODULE_NAME}_STATIC_DEBUG_LINK_FLAGS + ) ++ endif() + !!ELSE + _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + \"$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\" DEBUG +@@ -387,22 +404,21 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) + _Qt5$${CMAKE_MODULE_NAME}_STATIC_DEBUG_LINK_FLAGS + ) + !!ENDIF +-!!ENDIF + +-!!IF !isEmpty(CMAKE_RELEASE_TYPE) + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) ++ if(EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\") + _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\" RELEASE + _Qt5$${CMAKE_MODULE_NAME}_STATIC_RELEASE_LIB_DEPENDENCIES + _Qt5$${CMAKE_MODULE_NAME}_STATIC_RELEASE_LINK_FLAGS + ) ++ endif() + !!ELSE + _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + \"$${CMAKE_LIB_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\" RELEASE + _Qt5$${CMAKE_MODULE_NAME}_STATIC_RELEASE_LIB_DEPENDENCIES + _Qt5$${CMAKE_MODULE_NAME}_STATIC_RELEASE_LINK_FLAGS + ) +-!!ENDIF + !!ENDIF + endif() + +@@ -466,7 +482,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) + !!IF isEmpty(CMAKE_DEBUG_TYPE) + !!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD) + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) +- if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) ++ if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) + !!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE + if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) + !!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE +@@ -474,13 +490,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) + !!ELSE // CMAKE_STATIC_WINDOWS_BUILD + if (EXISTS + !!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE) +- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" ++ \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" + !!ELSE + \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" + !!ENDIF + AND EXISTS + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) +- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) ++ \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) + !!ELSE + \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) + !!ENDIF +@@ -543,7 +559,11 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) + set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration}) + + !!IF isEmpty(CMAKE_PLUGIN_DIR_IS_ABSOLUTE) +- set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\") ++ if(\"${Configuration}\" STREQUAL \"DEBUG\") ++ set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\") ++ else() ++ set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\") ++ endif() + !!ELSE + set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\") + !!ENDIF +@@ -557,15 +577,15 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) + ${_Qt5${Plugin}_STATIC_${Configuration}_LIB_DEPENDENCIES} + ) + +- if(NOT "${IsDebugAndRelease}") +- set(_genex_condition \"1\") ++ #if(NOT "${IsDebugAndRelease}") ++ # set(_genex_condition \"1\") ++ #else() ++ if("${Configuration}" STREQUAL "DEBUG") ++ set(_genex_condition \"$<CONFIG:Debug>\") + else() +- if("${Configuration}" STREQUAL "DEBUG") +- set(_genex_condition \"$<CONFIG:Debug>\") +- else() +- set(_genex_condition \"$<NOT:$<CONFIG:Debug>>\") +- endif() ++ set(_genex_condition \"$<NOT:$<CONFIG:Debug>>\") + endif() ++ #endif() + if(_static_deps) + set(_static_deps_genex \"$<${_genex_condition}:${_static_deps}>\") + set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_LIBRARIES diff --git a/vcpkg/ports/qt5-base/patches/Qt5GuiConfigExtras.patch b/vcpkg/ports/qt5-base/patches/Qt5GuiConfigExtras.patch new file mode 100644 index 0000000..0029f2a --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/Qt5GuiConfigExtras.patch @@ -0,0 +1,13 @@ +diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in +index 84dbbfebd..accb86e3f 100644 +--- a/src/gui/Qt5GuiConfigExtras.cmake.in ++++ b/src/gui/Qt5GuiConfigExtras.cmake.in +@@ -148,6 +153,8 @@ macro(_qt5gui_find_extra_libs Name Libs LibDir IncDirs) + !!ENDIF + unset(Qt5Gui_${_cmake_lib_name}_LIBRARY CACHE) + ++ find_library(Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG ${_lib}d ${_lib} NAMES_PER_DIR ++ PATHS \"${_qt5Gui_install_prefix}/debug/lib\" NO_DEFAULT_PATH) + find_library(Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG ${_lib}d + PATHS \"${LibDir}\" + !!IF !mac diff --git a/vcpkg/ports/qt5-base/patches/Qt5PluginTarget.patch b/vcpkg/ports/qt5-base/patches/Qt5PluginTarget.patch new file mode 100644 index 0000000..a8377b5 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/Qt5PluginTarget.patch @@ -0,0 +1,74 @@ +diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in +index 5baf0fdb1..185abfffd 100644 +--- a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in ++++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in +@@ -15,13 +15,14 @@ foreach(_module_dep ${_Qt5$${CMAKE_PLUGIN_NAME}_MODULE_DEPENDENCIES}) + endif() + endforeach() + +-!!IF !isEmpty(CMAKE_RELEASE_TYPE) + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) +-_qt5_$${CMAKE_MODULE_NAME}_process_prl_file( +- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\" RELEASE +- _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_RELEASE_LIB_DEPENDENCIES +- _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_RELEASE_LINK_FLAGS +-) ++if(EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\") ++ _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( ++ \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\" RELEASE ++ _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_RELEASE_LIB_DEPENDENCIES ++ _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_RELEASE_LINK_FLAGS ++ ) ++endif() + !!ELSE + _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_RELEASE}\" RELEASE +@@ -29,15 +30,15 @@ _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_RELEASE_LINK_FLAGS + ) + !!ENDIF +-!!ENDIF + +-!!IF !isEmpty(CMAKE_DEBUG_TYPE) + !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) +-_qt5_$${CMAKE_MODULE_NAME}_process_prl_file( +- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\" DEBUG +- _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_DEBUG_LIB_DEPENDENCIES +- _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_DEBUG_LINK_FLAGS +-) ++if(EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\") ++ _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( ++ \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\" DEBUG ++ _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_DEBUG_LIB_DEPENDENCIES ++ _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_DEBUG_LINK_FLAGS ++ ) ++endif() + !!ELSE + _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PRL_FILE_LOCATION_DEBUG}\" DEBUG +@@ -45,19 +46,18 @@ _qt5_$${CMAKE_MODULE_NAME}_process_prl_file( + _Qt5$${CMAKE_PLUGIN_NAME}_STATIC_DEBUG_LINK_FLAGS + ) + !!ENDIF +-!!ENDIF + + set_property(TARGET Qt5::$$CMAKE_PLUGIN_NAME PROPERTY INTERFACE_SOURCES + \"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}_$${CMAKE_PLUGIN_NAME}_Import.cpp\" + ) + !!ENDIF + +-!!IF !isEmpty(CMAKE_RELEASE_TYPE) +-_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_LOCATION_RELEASE}\" $${CMAKE_DEBUG_AND_RELEASE}) +-!!ENDIF +-!!IF !isEmpty(CMAKE_DEBUG_TYPE) +-_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_LOCATION_DEBUG}\" $${CMAKE_DEBUG_AND_RELEASE}) +-!!ENDIF ++if(EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_RELEASE}\") ++ _populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_LOCATION_RELEASE}\" $${CMAKE_DEBUG_AND_RELEASE}) ++endif() ++if(EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/debug/$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_DEBUG}\") ++ _populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_LOCATION_DEBUG}\" $${CMAKE_DEBUG_AND_RELEASE}) ++endif() + + list(APPEND Qt5$${CMAKE_MODULE_NAME}_PLUGINS Qt5::$$CMAKE_PLUGIN_NAME) + set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY QT_ALL_PLUGINS_$${CMAKE_PLUGIN_TYPE_ESCAPED} Qt5::$${CMAKE_PLUGIN_NAME}) diff --git a/vcpkg/ports/qt5-base/patches/create_cmake.patch b/vcpkg/ports/qt5-base/patches/create_cmake.patch new file mode 100644 index 0000000..69bd39a --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/create_cmake.patch @@ -0,0 +1,41 @@ +diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf +index 4aa5dad46..cee6d2882 100644 +--- a/mkspecs/features/create_cmake.prf ++++ b/mkspecs/features/create_cmake.prf +@@ -212,10 +212,10 @@ contains(CONFIG, plugin) { + CMAKE_PLUGIN_TYPE_ESCAPED = $$replace(PLUGIN_TYPE, [-/], _) + + win32 { +- !mingw|qtConfig(debug_and_release): debug_suffix="d" ++ debug_suffix="d" + + CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl + CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}$${debug_suffix}.prl + + isEmpty(CMAKE_STATIC_TYPE) { + CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.dll +@@ -295,6 +295,7 @@ CMAKE_INTERFACE_QT5_MODULE_DEPS = $$join(aux_lib_deps, ";") + equals(TEMPLATE, aux): CMAKE_FEATURE_PROPERTY_PREFIX = "INTERFACE_" + + mac { ++ CMAKE_FIND_OTHER_LIBRARY_BUILD = "true" + !isEmpty(CMAKE_STATIC_TYPE) { + CMAKE_LIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}_debug.a + CMAKE_LIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a +@@ -315,7 +316,7 @@ mac { + CMAKE_WINDOWS_BUILD = "true" + CMAKE_FIND_OTHER_LIBRARY_BUILD = "true" + +- !mingw|qtConfig(debug_and_release): debug_suffix="d" ++ debug_suffix="d" + + CMAKE_LIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}$${debug_suffix}.dll + CMAKE_LIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.dll +@@ -342,6 +342,7 @@ mac { + CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib + } + } else { ++ CMAKE_FIND_OTHER_LIBRARY_BUILD = "true" + !isEmpty(CMAKE_STATIC_TYPE) { + CMAKE_LIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}.a + CMAKE_LIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a diff --git a/vcpkg/ports/qt5-base/patches/egl.patch b/vcpkg/ports/qt5-base/patches/egl.patch new file mode 100644 index 0000000..17f0a55 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/egl.patch @@ -0,0 +1,16 @@ +diff --git a/src/gui/configure.json b/src/gui/configure.json +index 5fceb1150..7702cb261 100644 +--- a/src/gui/configure.json ++++ b/src/gui/configure.json +@@ -220,7 +220,10 @@ + "headers": "EGL/egl.h", + "sources": [ + { "type": "pkgConfig", "args": "egl" }, +- { "type": "makeSpec", "spec": "EGL" } ++ { "type": "makeSpec", "spec": "EGL" }, ++ { "libs": "-lEGL -lGLESv2 -lGL -lANGLE -lGL -lX11 -ldl -lm -lpthread" }, ++ { "libs": "-DGL_GLES_PROTOTYPES=1 -DGL_GLEXT_PROTOTYPES -DEGL_EGL_PROTOTYPES=1 -DEGL_EGLEXT_PROTOTYPES -lEGL -lGLESv2 -lGL -lANGLE -lGL -lX11 -ldl -lm -lpthread" }, ++ { "libs": "-DANGLE_EXPORT -DANGLE_UTIL_EXPORT -DGL_API -DGL_APICALL -DEGLAPI -DGL_GLES_PROTOTYPES=1 -DGL_GLEXT_PROTOTYPES -DEGL_EGL_PROTOTYPES=1 -DEGL_EGLEXT_PROTOTYPES -lEGL -lGLESv2 -lGL -lANGLE -lGL -lX11 -ldl -lm -lpthread" } + ] + }, + "freetype": { diff --git a/vcpkg/ports/qt5-base/patches/fix_angle.patch b/vcpkg/ports/qt5-base/patches/fix_angle.patch new file mode 100644 index 0000000..3287585 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/fix_angle.patch @@ -0,0 +1,35 @@ +diff --git a/src/plugins/platforms/windows/qwindowseglcontext.cpp b/src/plugins/platforms/windows/qwindowseglcontext.cpp +index 4ae087dfa..3a07d511e 100644 +--- a/src/plugins/platforms/windows/qwindowseglcontext.cpp ++++ b/src/plugins/platforms/windows/qwindowseglcontext.cpp +@@ -46,6 +46,21 @@ + + #if defined(QT_OPENGL_ES_2_ANGLE) || defined(QT_OPENGL_DYNAMIC) + # include <EGL/eglext.h> ++ ++#ifndef EGL_ANGLE_platform_angle ++#define EGL_ANGLE_platform_angle 1 ++#define EGL_PLATFORM_ANGLE_ANGLE 0x3202 ++#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203 ++#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209 ++#endif /* EGL_ANGLE_platform_angle */ ++ ++#ifndef EGL_ANGLE_platform_angle_d3d ++#define EGL_ANGLE_platform_angle_d3d 1 ++#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207 ++#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208 ++#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE 0x320B ++#endif /* EGL_ANGLE_platform_angle_d3d */ ++ + #endif + + QT_BEGIN_NAMESPACE +@@ -210,7 +225,7 @@ bool QWindowsEGLStaticContext::initializeAngle(QWindowsOpenGLTester::Renderers p + { EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_NONE }, + { EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_NONE }, + { EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, +- EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE, EGL_NONE } ++ EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE, EGL_NONE } + }; + const EGLint *attributes = nullptr; + if (preferredType & QWindowsOpenGLTester::AngleRendererD3d11) diff --git a/vcpkg/ports/qt5-base/patches/mingw9.patch b/vcpkg/ports/qt5-base/patches/mingw9.patch new file mode 100644 index 0000000..03991d7 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/mingw9.patch @@ -0,0 +1,21 @@ +diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp +index 075ce0ffac..0d3dd2e0b2 100644 +--- a/src/corelib/io/qfilesystemengine_win.cpp ++++ b/src/corelib/io/qfilesystemengine_win.cpp +@@ -627,14 +627,14 @@ QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry) + return QFileSystemEntry(ret, QFileSystemEntry::FromInternalPath()); + } + +-#if defined(Q_CC_MINGW) && WINVER < 0x0602 // Windows 8 onwards ++#if defined(Q_CC_MINGW) && WINVER < 0x0602 && _WIN32_WINNT < _WIN32_WINNT_WIN8 // Windows 8 onwards + + typedef struct _FILE_ID_INFO { + ULONGLONG VolumeSerialNumber; + FILE_ID_128 FileId; + } FILE_ID_INFO, *PFILE_ID_INFO; + +-#endif // if defined (Q_CC_MINGW) && WINVER < 0x0602 ++#endif // if defined(Q_CC_MINGW) && WINVER < 0x0602 && _WIN32_WINNT < _WIN32_WINNT_WIN8 + + // File ID for Windows up to version 7 and FAT32 drives + static inline QByteArray fileId(HANDLE handle) diff --git a/vcpkg/ports/qt5-base/patches/mysql-configure.patch b/vcpkg/ports/qt5-base/patches/mysql-configure.patch new file mode 100644 index 0000000..1ec0673 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/mysql-configure.patch @@ -0,0 +1,11 @@ +--- a/src/plugins/sqldrivers/configure.json ++++ b/src/plugins/sqldrivers/configure.json +@@ -65,7 +65,7 @@ + ], + "main": "mysql_get_client_version();" + }, +- "headers": "mysql.h", ++ "headers": "mysql/mysql.h", + "sources": [ + { "type": "mysqlConfig", "query": "--libs_r", "cleanlibs": true }, + { "type": "mysqlConfig", "query": "--libs", "cleanlibs": true }, diff --git a/vcpkg/ports/qt5-base/patches/mysql_plugin_include.patch b/vcpkg/ports/qt5-base/patches/mysql_plugin_include.patch new file mode 100644 index 0000000..a66300d --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/mysql_plugin_include.patch @@ -0,0 +1,11 @@ +--- a/src/plugins/sqldrivers/mysql/qsql_mysql_p.h ++++ b/src/plugins/sqldrivers/mysql/qsql_mysql_p.h +@@ -57,7 +57,7 @@ + #include <QtCore/qt_windows.h> + #endif + +-#include <mysql.h> ++#include <mysql/mysql.h> + + #ifdef QT_PLUGIN + #define Q_EXPORT_SQLDRIVER_MYSQL diff --git a/vcpkg/ports/qt5-base/patches/patch-qtbase-memory_resource.diff b/vcpkg/ports/qt5-base/patches/patch-qtbase-memory_resource.diff new file mode 100644 index 0000000..ff05ede --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/patch-qtbase-memory_resource.diff @@ -0,0 +1,11 @@ +--- a/src/corelib/tools/qduplicatetracker_p.h ++++ b/src/corelib/tools/qduplicatetracker_p.h +@@ -52,7 +52,7 @@ + + #include <qglobal.h> + +-#if QT_HAS_INCLUDE(<memory_resource>) && __cplusplus > 201402L ++#ifdef __cpp_lib_memory_resource + # include <unordered_set> + # include <memory_resource> + #else diff --git a/vcpkg/ports/qt5-base/patches/qmake-arm64.patch b/vcpkg/ports/qt5-base/patches/qmake-arm64.patch new file mode 100644 index 0000000..17ba77b --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/qmake-arm64.patch @@ -0,0 +1,18 @@ +diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp
+index df3f92d7d5df..0ee8cdbf11e1 100644
+--- a/qmake/library/qmakeevaluator.cpp
++++ b/qmake/library/qmakeevaluator.cpp
+@@ -1046,6 +1046,11 @@ void QMakeEvaluator::loadDefaults()
+ case PROCESSOR_ARCHITECTURE_AMD64:
+ archStr = ProString("x86_64");
+ break;
++# endif
++# ifdef PROCESSOR_ARCHITECTURE_ARM64
++ case PROCESSOR_ARCHITECTURE_ARM64:
++ archStr = ProString("arm64");
++ break;
+ # endif
+ case PROCESSOR_ARCHITECTURE_INTEL:
+ archStr = ProString("x86");
+--
+2.16.3
diff --git a/vcpkg/ports/qt5-base/patches/qt_app.patch b/vcpkg/ports/qt5-base/patches/qt_app.patch new file mode 100644 index 0000000..e04446b --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/qt_app.patch @@ -0,0 +1,17 @@ +diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf +index 8354f30e..8f24b72e 100644 +--- a/mkspecs/features/qt_app.prf ++++ b/mkspecs/features/qt_app.prf +@@ -27,10 +27,11 @@ host_build:force_bootstrap { + QT -= core core-private xml + QT += bootstrap-private + } + target.path = $$[QT_HOST_BINS] ++ CONFIG += relative_qt_rpath # Qt's tools and apps should be relocatable + } else { + !build_pass:qtConfig(debug_and_release): CONFIG += release +- target.path = $$[QT_INSTALL_BINS] ++ target.path = $$[QT_HOST_BINS] + CONFIG += relative_qt_rpath # Qt's tools and apps should be relocatable + } + INSTALLS += target diff --git a/vcpkg/ports/qt5-base/patches/qtbug_96392.patch b/vcpkg/ports/qt5-base/patches/qtbug_96392.patch new file mode 100644 index 0000000..2f70dfe --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/qtbug_96392.patch @@ -0,0 +1,27 @@ +--- a/src/gui/configure.json ++++ b/src/gui/configure.json +@@ -842,7 +842,8 @@ "// Check if EGL is compatible with X. Some EGL implementations, typically on", + "// embedded devices, are not intended to be used together with X. EGL support", + "// has to be disabled in plugins like xcb in this case since the native display,", + "// window and pixmap types will be different than what an X-based platform", +- "// plugin would expect." ++ "// plugin would expect.", ++ "#define USE_X11" + ], + "include": [ "EGL/egl.h", "X11/Xlib.h" ], + "main": [ +--- a/src/platformsupport/eglconvenience/qt_egl_p.h ++++ b/src/platformsupport/eglconvenience/qt_egl_p.h +@@ -61,7 +61,11 @@ # endif + # if !defined(Q_OS_INTEGRITY) + # define WIN_INTERFACE_CUSTOM // NV + # endif // Q_OS_INTEGRITY +-#endif // QT_EGL_NO_X11 ++#else // QT_EGL_NO_X11 ++// If one has an eglplatform.h with https://github.com/KhronosGroup/EGL-Registry/pull/130 ++// that needs USE_X11 to be defined. ++# define USE_X11 ++#endif + + #ifdef QT_EGL_WAYLAND + # define WAYLAND // NV diff --git a/vcpkg/ports/qt5-base/patches/static_opengl.patch b/vcpkg/ports/qt5-base/patches/static_opengl.patch new file mode 100644 index 0000000..51818b8 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/static_opengl.patch @@ -0,0 +1,62 @@ +diff --git a/mkspecs/features/win32/opengl.prf b/mkspecs/features/win32/opengl.prf +index f21848f94..202c49688 100644 +--- a/mkspecs/features/win32/opengl.prf ++++ b/mkspecs/features/win32/opengl.prf +@@ -30,7 +30,7 @@ qtConfig(opengles2) { + LIBS += $$QMAKE_LIBS_OPENGL_ES2 + QMAKE_LIBDIR += $$QMAKE_LIBDIR_OPENGL_ES2_RELEASE + } +- qtConfig(static): DEFINES += GL_APICALL= EGLAPI= ++ qtConfig(static): DEFINES += _GDI32_ GL_APICALL= EGLAPI= ANGLE_EXPORT= ANGLE_PLATFORM_EXPORT= + } else { + !qtConfig(dynamicgl) { + QMAKE_LIBS += $$QMAKE_LIBS_OPENGL +diff --git a/src/angle/src/common/gles_common.pri b/src/angle/src/common/gles_common.pri +index 70b65dd4c..1dcc96af5 100644 +--- a/src/angle/src/common/gles_common.pri ++++ b/src/angle/src/common/gles_common.pri +@@ -23,7 +23,8 @@ for(libname, STATICLIBS) { + PRE_TARGETDEPS += $$staticlib + } + +-DEFINES += LIBANGLE_IMPLEMENTATION LIBGLESV2_IMPLEMENTATION GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI= ++!qtConfig(static): DEFINES += LIBANGLE_IMPLEMENTATION LIBGLESV2_IMPLEMENTATION ++qtConfig(static): DEFINES += GL_APICALL= EGLAPI= ANGLE_EXPORT= ANGLE_PLATFORM_EXPORT= + !winrt: DEFINES += ANGLE_ENABLE_D3D9 ANGLE_SKIP_DXGI_1_2_CHECK + + QT_FOR_CONFIG += gui-private +diff --git a/src/3rdparty/angle/include/platform/Platform.h b/src/3rdparty/angle/include/platform/Platform.h +index aa1221a86..a49ee4f6d 100644 +--- a/src/3rdparty/angle/include/platform/Platform.h ++++ b/src/3rdparty/angle/include/platform/Platform.h +@@ -12,7 +12,7 @@ + #include <stdint.h> + #include <array> + +-#if defined(_WIN32) ++#if defined(_WIN32) && !defined(ANGLE_PLATFORM_EXPORT) + # if !defined(LIBANGLE_IMPLEMENTATION) + # define ANGLE_PLATFORM_EXPORT __declspec(dllimport) + # else +diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp +index d4459ec28..d1416041e 100644 +--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp ++++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp +@@ -3505,7 +3505,7 @@ ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id, + } + } + +-GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target, ++ANGLE_EXPORT void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target, + GLenum attachment, + GLuint texture, + GLint level, +@@ -3530,7 +3530,7 @@ GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum targe + } + } + +-GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewSideBySideANGLE(GLenum target, ++ANGLE_EXPORT void GL_APIENTRY FramebufferTextureMultiviewSideBySideANGLE(GLenum target, + GLenum attachment, + GLuint texture, + GLint level, diff --git a/vcpkg/ports/qt5-base/patches/vulkan-windows.diff b/vcpkg/ports/qt5-base/patches/vulkan-windows.diff new file mode 100644 index 0000000..0315a20 --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/vulkan-windows.diff @@ -0,0 +1,13 @@ +diff --git a/mkspecs/features/win32/windows_vulkan_sdk.prf b/mkspecs/features/win32/windows_vulkan_sdk.prf +index 9a749516b..242f47504 100644 +--- a/mkspecs/features/win32/windows_vulkan_sdk.prf ++++ b/mkspecs/features/win32/windows_vulkan_sdk.prf +@@ -1,7 +1,7 @@ + isEmpty(QMAKE_INCDIR_VULKAN) { + # Pick up the VULKAN_SDK env var set by the LunarG SDK so that the Vulkan + # headers are found out-of-the-box on typical Windows setups. +- QMAKE_INCDIR_VULKAN = $$(VULKAN_SDK)/include ++ # QMAKE_INCDIR_VULKAN = $$(VULKAN_SDK)/include + + # Do not add default include paths as that can knock std headers + # out of their stride due to their usage of #include_next. diff --git a/vcpkg/ports/qt5-base/patches/windows_prf.patch b/vcpkg/ports/qt5-base/patches/windows_prf.patch new file mode 100644 index 0000000..6051daa --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/windows_prf.patch @@ -0,0 +1,13 @@ +diff --git a/mkspecs/features/win32/windows.prf b/mkspecs/features/win32/windows.prf +index 272170d4..70b8ea2e 100644 +--- a/mkspecs/features/win32/windows.prf ++++ b/mkspecs/features/win32/windows.prf +@@ -6,7 +6,7 @@ contains(TEMPLATE, ".*app") { + + qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) { + isEqual(entryLib, -lqtmain) { +- lib = $$QT.core.libs/$${QMAKE_PREFIX_STATICLIB}qtmain$$QT_LIBINFIX$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB ++ lib = $$QT.core.libs/manual-link/$${QMAKE_PREFIX_STATICLIB}qtmain$$QT_LIBINFIX$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB + PRE_TARGETDEPS += $$lib + QMAKE_LIBS += $$lib + } else { diff --git a/vcpkg/ports/qt5-base/patches/winmain_pro.patch b/vcpkg/ports/qt5-base/patches/winmain_pro.patch new file mode 100644 index 0000000..66460cc --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/winmain_pro.patch @@ -0,0 +1,27 @@ +diff --git a/src/winmain/winmain.pro b/src/winmain/winmain.pro +index 9cb6ab0c..52c7876e 100644 +--- a/src/winmain/winmain.pro ++++ b/src/winmain/winmain.pro +@@ -3,7 +3,7 @@ + + TEMPLATE = lib + TARGET = qtmain +-DESTDIR = $$QT.core.libs ++DESTDIR = $$QT.core.libs/manual-link + + CONFIG += static + QT = core +@@ -27,7 +27,12 @@ winrt { + } + + load(qt_installs) +- ++!qt_no_install_library { ++ host_build: \ ++ target.path = $$[QT_HOST_LIBS]/manual-link ++ else: \ ++ target.path = $$[QT_INSTALL_LIBS]/manual-link ++} + TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end + + load(qt_targets) diff --git a/vcpkg/ports/qt5-base/patches/xlib.patch b/vcpkg/ports/qt5-base/patches/xlib.patch new file mode 100644 index 0000000..07cba5b --- /dev/null +++ b/vcpkg/ports/qt5-base/patches/xlib.patch @@ -0,0 +1,39 @@ +diff --git a/src/gui/configure.json b/src/gui/configure.json +index 9a749516b..242f47504 100644 +--- a/src/gui/configure.json ++++ b/src/gui/configure.json +@@ -568,7 +568,9 @@ + }, + "headers": "X11/Xlib.h", + "sources": [ +- { "type": "makeSpec", "spec": "X11" } ++ { "type": "makeSpec", "spec": "X11" }, ++ { "type": "pkgConfig", "args": "x11" }, ++ { "type": "pkgConfig", "args": "x11 --static" } + ] + }, + "x11sm": { +@@ -590,6 +592,7 @@ + "headers": "xcb/xcb.h", + "sources": [ + { "type": "pkgConfig", "args": "xcb >= 1.11" }, ++ { "type": "pkgConfig", "args": "xcb >= 1.11 --static" }, + "-lxcb" + ] + }, +@@ -691,6 +694,7 @@ + "headers": "X11/Xlib-xcb.h", + "sources": [ + { "type": "pkgConfig", "args": "x11-xcb" }, ++ { "type": "pkgConfig", "args": "x11-xcb --static" }, + "-lX11-xcb" + ], + "use": "xcb xlib" +@@ -711,6 +715,7 @@ + "headers": "xcb/xkb.h", + "sources": [ + { "type": "pkgConfig", "args": "xcb-xkb" }, ++ { "type": "pkgConfig", "args": "xcb-xkb --static" }, + "-lxcb-xkb" + ], + "use": "xcb" diff --git a/vcpkg/ports/qt5-base/portfile.cmake b/vcpkg/ports/qt5-base/portfile.cmake new file mode 100644 index 0000000..611d589 --- /dev/null +++ b/vcpkg/ports/qt5-base/portfile.cmake @@ -0,0 +1,546 @@ +vcpkg_buildpath_length_warning(37) + +if(VCPKG_TARGET_IS_LINUX) + message(WARNING "qt5-base currently requires some packages from the system package manager. " + "They can be installed on Ubuntu systems via " + "sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libgl1-mesa-dev libxrender-dev " + "libxi-dev libxkbcommon-dev libxkbcommon-x11-dev. For more information, see " + "https://doc.qt.io/qt-5/linux.html and https://doc.qt.io/qt-5/linux-requirements.html" + ) +elseif(VCPKG_TARGET_IS_MINGW AND CMAKE_HOST_WIN32) + find_program(MINGW32_MAKE mingw32-make PATHS ENV PATH NO_DEFAULT_PATH REQUIRED) +endif() + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) + +set(WITH_PGSQL_PLUGIN OFF) +if("postgresqlplugin" IN_LIST FEATURES) + set(WITH_PGSQL_PLUGIN ON) +endif() + +set(WITH_MYSQL_PLUGIN OFF) +if ("mysqlplugin" IN_LIST FEATURES) + set(WITH_MYSQL_PLUGIN ON) +endif() + +set(WITH_OPENSSL OFF) +if ("openssl" IN_LIST FEATURES) + set(WITH_OPENSSL ON) +endif() + +include(qt_port_functions) +include(configure_qt) +include(install_qt) + + +######################### +## Find Host and Target mkspec name for configure +include(find_qt_mkspec) +find_qt_mkspec(TARGET_MKSPEC HOST_MKSPEC HOST_TOOLS) +set(QT_PLATFORM_CONFIGURE_OPTIONS TARGET_PLATFORM ${TARGET_MKSPEC}) +if(DEFINED HOST_MKSPEC) + list(APPEND QT_PLATFORM_CONFIGURE_OPTIONS HOST_PLATFORM ${HOST_MKSPEC}) +endif() +if(DEFINED HOST_TOOLS) + list(APPEND QT_PLATFORM_CONFIGURE_OPTIONS HOST_TOOLS_ROOT ${HOST_TOOLS}) +endif() + +######################### +## Downloading Qt5-Base + +qt_download_submodule( OUT_SOURCE_PATH SOURCE_PATH + PATCHES + # CVE fixes from https://download.qt.io/archive/qt/5.15/ + patches/CVE-2025-4211-qtbase-5.15.diff + patches/CVE-2025-5455-qtbase-5.15.patch + patches/CVE-2025-30348-qtbase-5.15.diff + + patches/winmain_pro.patch #Moves qtmain to manual-link + patches/windows_prf.patch #fixes the qtmain dependency due to the above move + patches/qt_app.patch #Moves the target location of qt5 host apps to always install into the host dir. + patches/xlib.patch #Patches Xlib check to actually use Pkgconfig instead of makeSpec only + patches/vulkan-windows.diff #Forces QMake to use vulkan from vcpkg instead of VULKAN_SDK system variable + patches/egl.patch #Fix egl detection logic. + patches/qtbug_96392.patch #Backport fix for QTBUG-96392 + patches/mysql_plugin_include.patch #Fix include path of mysql plugin + patches/mysql-configure.patch #Fix mysql project + patches/patch-qtbase-memory_resource.diff # From https://bugreports.qt.io/browse/QTBUG-114316 + #patches/static_opengl.patch #Use this patch if you really want to statically link angle on windows (e.g. using -opengl es2 and -static). + #Be carefull since it requires definining _GDI32_ for all dependent projects due to redefinition errors in the + #the windows supplied gl.h header and the angle gl.h otherwise. + # CMake fixes + patches/Qt5BasicConfig.patch + patches/Qt5PluginTarget.patch + patches/create_cmake.patch + patches/Qt5GuiConfigExtras.patch # Patches the library search behavior for EGL since angle is not build with Qt + patches/fix_angle.patch # Failed to create OpenGL context for format QSurfaceFormat ... + patches/mingw9.patch # Fix compile with MinGW-W64 9.0.0: Redefinition of 'struct _FILE_ID_INFO' + patches/qmake-arm64.patch # Fix by Oliver Wolff to support ARM64 hosts on Windows + ) + +# Remove vendored dependencies to ensure they are not picked up by the build +foreach(DEPENDENCY zlib freetype harfbuzz-ng libjpeg libpng double-conversion sqlite pcre2) + if(EXISTS ${SOURCE_PATH}/src/3rdparty/${DEPENDENCY}) + file(REMOVE_RECURSE ${SOURCE_PATH}/src/3rdparty/${DEPENDENCY}) + endif() +endforeach() +#file(REMOVE_RECURSE ${SOURCE_PATH}/include/QtZlib) + +######################### +## Setup Configure options + +set(CORE_OPTIONS + -confirm-license + -opensource + #-simulator_and_device + #-ltcg + #-combined-angle-lib + # ENV ANGLE_DIR to external angle source dir. (Will always be compiled with Qt) + #-optimized-tools + -force-debug-info + -no-separate-debug-info + -verbose +) + +## 3rd Party Libs +list(APPEND CORE_OPTIONS + -system-zlib + -system-libjpeg + -system-libpng + -system-pcre + -system-doubleconversion + -no-angle # Qt does not need to build angle. VCPKG will build angle! + -no-glib + -no-feature-gssapi + ) + +if(VCPKG_TARGET_IS_LINUX) + # Accessibility uses at-spi2-core which links dbus, + # so we link to ensure to use the same dbus library. + list(APPEND CORE_OPTIONS -dbus-linked) +else() + # Enable Qt DBus without linking to it. + list(APPEND CORE_OPTIONS -dbus-runtime) +endif() + +if(WITH_PGSQL_PLUGIN) + list(APPEND CORE_OPTIONS -sql-psql) +else() + list(APPEND CORE_OPTIONS -no-sql-psql) +endif() +if(WITH_MYSQL_PLUGIN) + list(APPEND CORE_OPTIONS -sql-mysql) +else() + list(APPEND CORE_OPTIONS -no-sql-mysql) +endif() + +if(WITH_OPENSSL) + list(APPEND CORE_OPTIONS -openssl-linked) +else() + list(APPEND CORE_OPTIONS -no-openssl) +endif() + +if("cups" IN_LIST FEATURES) + message(WARNING "${PORT} feature 'cups' requires libcups2-dev from system package manger.") + list(APPEND CORE_OPTIONS -cups) +else() + list(APPEND CORE_OPTIONS -no-cups) +endif() + +if ("vulkan" IN_LIST FEATURES) + list(APPEND CORE_OPTIONS --vulkan=yes) +else() + list(APPEND CORE_OPTIONS --vulkan=no) +endif() + +find_library(ZLIB_RELEASE NAMES z zlib PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(ZLIB_DEBUG NAMES z zlib zd zlibd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(JPEG_RELEASE NAMES jpeg jpeg-static PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(JPEG_DEBUG NAMES jpeg jpeg-static jpegd jpeg-staticd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(LIBPNG_RELEASE NAMES png16 libpng16 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) #Depends on zlib +find_library(LIBPNG_DEBUG NAMES png16 png16d libpng16 libpng16d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(PSQL_RELEASE NAMES pq libpq PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux) +find_library(PSQL_DEBUG NAMES pq libpq pqd libpqd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) + +if(NOT (PSQL_RELEASE MATCHES ".*\.so") AND NOT (PSQL_DEBUG MATCHES ".*\.so")) + find_library(PSQL_COMMON_RELEASE NAMES pgcommon libpgcommon PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux) + find_library(PSQL_COMMON_DEBUG NAMES pgcommon libpgcommon pgcommond libpgcommond PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) + find_library(PSQL_PORT_RELEASE NAMES pgport libpgport PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux) + find_library(PSQL_PORT_DEBUG NAMES pgport libpgport pgportd libpgportd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +endif() +find_library(MYSQL_RELEASE NAMES libmysql mysqlclient PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux) +find_library(MYSQL_DEBUG NAMES libmysql libmysqld mysqlclient mysqlclientd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) + +find_library(PCRE2_RELEASE NAMES pcre2-16 pcre2-16-static PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(PCRE2_DEBUG NAMES pcre2-16 pcre2-16-static pcre2-16d pcre2-16-staticd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) + +find_library(ICUUC_RELEASE NAMES icuuc libicuuc PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(ICUUC_DEBUG NAMES icuucd libicuucd icuuc libicuuc PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(ICUIO_RELEASE NAMES icuio libicuio PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(ICUIO_DEBUG NAMES icuiod libicuiod icuio libicuio PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(ICUIN_RELEASE NAMES icui18n libicui18n icuin PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(ICUIN_DEBUG NAMES icui18nd libicui18nd icui18n libicui18n icuin icuind PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(ICUDATA_RELEASE NAMES icudata libicudata icudt PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(ICUDATA_DEBUG NAMES icudatad libicudatad icudata libicudata icudtd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +set(ICU_RELEASE "${ICUIN_RELEASE} ${ICULX_RELEASE} ${ICUUC_RELEASE} ${ICUIO_RELEASE} ${ICUDATA_RELEASE}") +set(ICU_DEBUG "${ICUIN_DEBUG} ${ICULX_DEBUG} ${ICUUC_DEBUG} ${ICUIO_DEBUG} ${ICUDATA_DEBUG}") +if(VCPKG_TARGET_IS_WINDOWS) + set(ICU_RELEASE "${ICU_RELEASE} -ladvapi32") + set(ICU_DEBUG "${ICU_DEBUG} -ladvapi32" ) +endif() + +#Dependent libraries +find_library(SSL_RELEASE ssl ssleay32 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(SSL_DEBUG ssl ssleay32 ssld ssleay32d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) +find_library(EAY_RELEASE libeay32 crypto libcrypto PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) +find_library(EAY_DEBUG libeay32 crypto libcrypto libeay32d cryptod libcryptod PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH) + +set(RELEASE_OPTIONS + "LIBJPEG_LIBS=${JPEG_RELEASE}" + "ZLIB_LIBS=${ZLIB_RELEASE}" + "LIBPNG_LIBS=${LIBPNG_RELEASE} ${ZLIB_RELEASE}" + "PCRE2_LIBS=${PCRE2_RELEASE}" + "QMAKE_LIBS_PRIVATE+=${LIBPNG_RELEASE} ${ZLIB_RELEASE}" + ) +set(DEBUG_OPTIONS + "LIBJPEG_LIBS=${JPEG_DEBUG}" + "ZLIB_LIBS=${ZLIB_DEBUG}" + "LIBPNG_LIBS=${LIBPNG_DEBUG} ${ZLIB_DEBUG}" + "PCRE2_LIBS=${PCRE2_DEBUG}" + "QMAKE_LIBS_PRIVATE+=${LIBPNG_DEBUG} ${ZLIB_DEBUG}" + ) + +x_vcpkg_pkgconfig_get_modules(PREFIX freetype MODULES freetype2 LIBS) +list(APPEND CORE_OPTIONS -system-freetype) +list(APPEND RELEASE_OPTIONS "FREETYPE_LIBS=${freetype_LIBS_RELEASE}") +list(APPEND DEBUG_OPTIONS "FREETYPE_LIBS=${freetype_LIBS_DEBUG}") + +x_vcpkg_pkgconfig_get_modules(PREFIX harfbuzz MODULES harfbuzz LIBS) +if(VCPKG_TARGET_IS_OSX) + string(APPEND harfbuzz_LIBRARIES_RELEASE " -framework ApplicationServices") + string(APPEND harfbuzz_LIBRARIES_DEBUG " -framework ApplicationServices") +endif() +list(APPEND CORE_OPTIONS -system-harfbuzz) +list(APPEND RELEASE_OPTIONS "HARFBUZZ_LIBS=${harfbuzz_LIBS_RELEASE}") +list(APPEND DEBUG_OPTIONS "HARFBUZZ_LIBS=${harfbuzz_LIBS_DEBUG}") + +if(NOT VCPKG_TARGET_IS_WINDOWS) + list(APPEND CORE_OPTIONS -fontconfig) + x_vcpkg_pkgconfig_get_modules(PREFIX fontconfig MODULES fontconfig LIBS) + list(APPEND RELEASE_OPTIONS "FONTCONFIG_LIBS=${fontconfig_LIBS_RELEASE}") + list(APPEND DEBUG_OPTIONS "FONTCONFIG_LIBS=${fontconfig_LIBS_DEBUG}") +endif() + +if("sqlite3plugin" IN_LIST FEATURES) + list(APPEND CORE_OPTIONS -system-sqlite) + x_vcpkg_pkgconfig_get_modules(PREFIX sqlite3 MODULES sqlite3 LIBS) + list(APPEND RELEASE_OPTIONS "SQLITE_LIBS=${sqlite3_LIBS_RELEASE}") + list(APPEND DEBUG_OPTIONS "SQLITE_LIBS=${sqlite3_LIBS_DEBUG}") +else() + list(APPEND CORE_OPTIONS -no-sql-sqlite) +endif() + +if("zstd" IN_LIST FEATURES) + list(APPEND CORE_OPTIONS -zstd) + x_vcpkg_pkgconfig_get_modules(PREFIX libzstd MODULES libzstd LIBS) + list(APPEND RELEASE_OPTIONS "QMAKE_LIBS_PRIVATE+=${libzstd_LIBS_RELEASE}") + list(APPEND DEBUG_OPTIONS "QMAKE_LIBS_PRIVATE+=${libzstd_LIBS_DEBUG}") +else() + list(APPEND CORE_OPTIONS -no-zstd) +endif() + +if("icu" IN_LIST FEATURES) + list(APPEND CORE_OPTIONS -icu) + + # This if/else corresponds to icu setup in src/corelib/configure.json. + if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "static") + list(APPEND CORE_OPTIONS + "ICU_LIBS_RELEASE=${ICU_RELEASE}" + "ICU_LIBS_DEBUG=${ICU_DEBUG}" + ) + else() + list(APPEND RELEASE_OPTIONS "ICU_LIBS=${ICU_RELEASE}") + list(APPEND DEBUG_OPTIONS "ICU_LIBS=${ICU_DEBUG}") + endif() + + list(APPEND RELEASE_OPTIONS "QMAKE_LIBS_PRIVATE+=${ICU_RELEASE}") + list(APPEND DEBUG_OPTIONS "QMAKE_LIBS_PRIVATE+=${ICU_DEBUG}") +else() + list(APPEND CORE_OPTIONS -no-icu) +endif() + +if(VCPKG_TARGET_IS_WINDOWS) + if(VCPKG_TARGET_IS_UWP) + list(APPEND CORE_OPTIONS -appstore-compliant) + endif() + if(NOT ${VCPKG_LIBRARY_LINKAGE} STREQUAL "static") + list(APPEND CORE_OPTIONS -opengl dynamic) # other options are "-no-opengl", "-opengl angle", and "-opengl desktop" and "-opengel es2" + else() + list(APPEND CORE_OPTIONS -opengl dynamic) # other possible option without moving angle dlls: "-opengl desktop". "-opengel es2" only works with commented patch + endif() + set(ADDITIONAL_WINDOWS_LIBS "-lws2_32 -lsecur32 -ladvapi32 -lshell32 -lcrypt32 -luser32 -lgdi32") + + if(WITH_OPENSSL) + list(APPEND RELEASE_OPTIONS "OPENSSL_LIBS=${SSL_RELEASE} ${EAY_RELEASE} ${ADDITIONAL_WINDOWS_LIBS}") + list(APPEND DEBUG_OPTIONS "OPENSSL_LIBS=${SSL_DEBUG} ${EAY_DEBUG} ${ADDITIONAL_WINDOWS_LIBS}") + else() + list(APPEND CORE_OPTIONS -schannel) + endif() + + if(WITH_PGSQL_PLUGIN) + list(APPEND RELEASE_OPTIONS "PSQL_LIBS=${PSQL_RELEASE} ${PSQL_PORT_RELEASE} ${PSQL_COMMON_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} ${ADDITIONAL_WINDOWS_LIBS} -lwldap32") + list(APPEND DEBUG_OPTIONS "PSQL_LIBS=${PSQL_DEBUG} ${PSQL_PORT_DEBUG} ${PSQL_COMMON_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} ${ADDITIONAL_WINDOWS_LIBS} -lwldap32") + endif() +elseif(VCPKG_TARGET_IS_LINUX) + list(APPEND CORE_OPTIONS -xcb-xlib -xcb -linuxfb) + + if(WITH_OPENSSL) + list(APPEND RELEASE_OPTIONS "OPENSSL_LIBS=${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread") + list(APPEND DEBUG_OPTIONS "OPENSSL_LIBS=${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread") + endif() + + if(WITH_PGSQL_PLUGIN) + list(APPEND RELEASE_OPTIONS "PSQL_LIBS=${PSQL_RELEASE} ${PSQL_PORT_RELEASE} ${PSQL_TYPES_RELEASE} ${PSQL_COMMON_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread") + list(APPEND DEBUG_OPTIONS "PSQL_LIBS=${PSQL_DEBUG} ${PSQL_PORT_DEBUG} ${PSQL_TYPES_DEBUG} ${PSQL_COMMON_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread") + endif() +elseif(VCPKG_TARGET_IS_OSX) + if (VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + # Avoid frameworks for vcpkg + list(APPEND CORE_OPTIONS -no-framework) + # Such that Qt executables like moc find their libs. The default path is ../Frameworks + list(APPEND DEBUG_OPTIONS -R ${CURRENT_INSTALLED_DIR}/debug/lib) + list(APPEND RELEASE_OPTIONS -R ${CURRENT_INSTALLED_DIR}/lib) + endif() + + if("${VCPKG_TARGET_ARCHITECTURE}" MATCHES "arm64") + FILE(READ "${SOURCE_PATH}/mkspecs/common/macx.conf" _tmp_contents) + string(REPLACE "QMAKE_APPLE_DEVICE_ARCHS = x86_64" "QMAKE_APPLE_DEVICE_ARCHS = arm64" _tmp_contents ${_tmp_contents}) + FILE(WRITE "${SOURCE_PATH}/mkspecs/common/macx.conf" ${_tmp_contents}) + endif() + if(DEFINED VCPKG_OSX_DEPLOYMENT_TARGET) + set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} ${VCPKG_OSX_DEPLOYMENT_TARGET}) + else() + execute_process(COMMAND xcrun --show-sdk-version + OUTPUT_VARIABLE OSX_SDK_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected OSX SDK Version: ${OSX_SDK_VERSION}") + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)" OSX_SDK_VERSION "${OSX_SDK_VERSION}") + message(STATUS "Major.Minor OSX SDK Version: ${OSX_SDK_VERSION}") + + execute_process(COMMAND sw_vers -productVersion + OUTPUT_VARIABLE VCPKG_OSX_DEPLOYMENT_TARGET + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected OSX system Version: ${VCPKG_OSX_DEPLOYMENT_TARGET}") + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)" VCPKG_OSX_DEPLOYMENT_TARGET "${VCPKG_OSX_DEPLOYMENT_TARGET}") + message(STATUS "Major.Minor OSX system Version: ${VCPKG_OSX_DEPLOYMENT_TARGET}") + + # Parse mkspecs/common/macx.conf + file(READ "${SOURCE_PATH}/mkspecs/common/macx.conf" QT_MK_MAC_CONTENT) + string(REGEX MATCHALL "QT_MAC_SDK_VERSION_MIN[ \t]*=[ \t]*(([0-9]+)(\\.([0-9]+))*)" KEY_VALUE "${QT_MK_MAC_CONTENT}") + if(${CMAKE_MATCH_COUNT} LESS 2) + message(FATAL_ERROR "Error parse QT_MAC_SDK_VERSION_MIN") + endif() + set(QT_MAC_SDK_VERSION_MIN "${CMAKE_MATCH_1}") + string(REGEX MATCHALL "QT_MAC_SDK_VERSION_MAX[ \t]*=[ \t]*(([0-9]+)(\\.([0-9]+))*)" KEY_VALUE "${QT_MK_MAC_CONTENT}") + if(${CMAKE_MATCH_COUNT} LESS 2) + message(FATAL_ERROR "Error parse QT_MAC_SDK_VERSION_MAX") + endif() + set(QT_MAC_SDK_VERSION_MAX "${CMAKE_MATCH_1}") + + message(STATUS "QT_MAC_SDK_VERSION_MIN: ${QT_MAC_SDK_VERSION_MIN}") + message(STATUS "QT_MAC_SDK_VERSION_MAX: ${QT_MAC_SDK_VERSION_MAX}") + + # clamp(VCPKG_OSX_DEPLOYMENT_TARGET, QT_MAC_SDK_VERSION_MIN, QT_MAC_SDK_VERSION_MAX) + if("${VCPKG_OSX_DEPLOYMENT_TARGET}" VERSION_GREATER "${QT_MAC_SDK_VERSION_MAX}") + set(VCPKG_OSX_DEPLOYMENT_TARGET "${QT_MAC_SDK_VERSION_MAX}") + endif() + if("${VCPKG_OSX_DEPLOYMENT_TARGET}" VERSION_LESS "${QT_MAC_SDK_VERSION_MIN}") + set(VCPKG_OSX_DEPLOYMENT_TARGET "${QT_MAC_SDK_VERSION_MIN}") + endif() + + set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} ${VCPKG_OSX_DEPLOYMENT_TARGET}) + endif() + message(STATUS "Enviromnent OSX SDK Version: $ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET}") + file(READ "${SOURCE_PATH}/mkspecs/common/macx.conf" _tmp_contents) + string(REPLACE "QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13" "QMAKE_MACOSX_DEPLOYMENT_TARGET = ${VCPKG_OSX_DEPLOYMENT_TARGET}" _tmp_contents ${_tmp_contents}) + file(WRITE "${SOURCE_PATH}/mkspecs/common/macx.conf" ${_tmp_contents}) + #list(APPEND QT_PLATFORM_CONFIGURE_OPTIONS HOST_PLATFORM ${TARGET_MKSPEC}) + + if(WITH_OPENSSL) + list(APPEND RELEASE_OPTIONS "OPENSSL_LIBS=${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread") + list(APPEND DEBUG_OPTIONS "OPENSSL_LIBS=${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread") + endif() + + if(WITH_PGSQL_PLUGIN) + list(APPEND RELEASE_OPTIONS "PSQL_LIBS=${PSQL_RELEASE} ${PSQL_PORT_RELEASE} ${PSQL_TYPES_RELEASE} ${PSQL_COMMON_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread") + list(APPEND DEBUG_OPTIONS "PSQL_LIBS=${PSQL_DEBUG} ${PSQL_PORT_DEBUG} ${PSQL_TYPES_DEBUG} ${PSQL_COMMON_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread") + endif() +endif() + +if (WITH_MYSQL_PLUGIN) + list(APPEND RELEASE_OPTIONS "MYSQL_LIBS=${MYSQL_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} ${ZLIB_RELEASE} ${ADDITIONAL_WINDOWS_LIBS}") + list(APPEND DEBUG_OPTIONS "MYSQL_LIBS=${MYSQL_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} ${ZLIB_DEBUG} ${ADDITIONAL_WINDOWS_LIBS}") +endif(WITH_MYSQL_PLUGIN) + +## Do not build tests or examples +list(APPEND CORE_OPTIONS + -nomake examples + -nomake tests) + +if(QT_UPDATE_VERSION) + SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) +else() + configure_qt( + SOURCE_PATH ${SOURCE_PATH} + ${QT_PLATFORM_CONFIGURE_OPTIONS} + OPTIONS ${CORE_OPTIONS} + OPTIONS_RELEASE ${RELEASE_OPTIONS} + OPTIONS_DEBUG ${DEBUG_OPTIONS} + ) + install_qt() + + ######################### + #TODO: Make this a function since it is also done by modular scripts! + # e.g. by patching mkspecs/features/qt_tools.prf somehow + file(GLOB_RECURSE PRL_FILES "${CURRENT_PACKAGES_DIR}/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/mkspecs/*.pri" + "${CURRENT_PACKAGES_DIR}/debug/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/debug/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/debug/mkspecs/*.pri") + + file(TO_CMAKE_PATH "${CURRENT_INSTALLED_DIR}/include" CMAKE_INCLUDE_PATH) + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + qt_fix_prl("${CURRENT_INSTALLED_DIR}" "${PRL_FILES}") + file(COPY ${CMAKE_CURRENT_LIST_DIR}/qtdeploy.ps1 DESTINATION ${CURRENT_PACKAGES_DIR}/plugins) + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + qt_fix_prl("${CURRENT_INSTALLED_DIR}/debug" "${PRL_FILES}") + file(COPY ${CMAKE_CURRENT_LIST_DIR}/qtdeploy.ps1 DESTINATION ${CURRENT_PACKAGES_DIR}/debug/plugins) + endif() + + file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/share) + file(RENAME ${CURRENT_PACKAGES_DIR}/lib/cmake ${CURRENT_PACKAGES_DIR}/share/cmake) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/cmake) # TODO: check if important debug information for cmake is lost + + #This needs a new VCPKG policy or a static angle build (ANGLE needs to be fixed in VCPKG!) + if(VCPKG_TARGET_IS_WINDOWS AND ${VCPKG_LIBRARY_LINKAGE} MATCHES "static") # Move angle dll libraries + if(EXISTS "${CURRENT_PACKAGES_DIR}/bin") + message(STATUS "Moving ANGLE dlls from /bin to /tools/qt5-angle/bin. In static builds dlls are not allowed in /bin") + file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/qt5-angle) + file(RENAME ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/tools/qt5-angle/bin) + if(EXISTS ${CURRENT_PACKAGES_DIR}/debug/bin) + file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/qt5-angle/debug) + file(RENAME ${CURRENT_PACKAGES_DIR}/debug/bin ${CURRENT_PACKAGES_DIR}/tools/qt5-angle/debug/bin) + endif() + endif() + endif() + + ## Fix location of qtmain(d).lib. Has been moved into manual-link. Add debug version + set(cmakefile "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Core/Qt5CoreConfigExtras.cmake") + file(READ "${cmakefile}" _contents) + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_BUILD_TYPE) + string(REPLACE "set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)" "set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)" _contents "${_contents}") + string(REPLACE + [[set(imported_location "${_qt5Core_install_prefix}/lib/qtmain.lib")]] + [[set(imported_location_release "${_qt5Core_install_prefix}/lib/manual-link/qtmain.lib") + set(imported_location_debug "${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib")]] + _contents "${_contents}") + string(REPLACE +[[ set_target_properties(Qt5::WinMain PROPERTIES + IMPORTED_LOCATION_RELEASE ${imported_location} + )]] +[[ set_target_properties(Qt5::WinMain PROPERTIES + IMPORTED_LOCATION_RELEASE ${imported_location_release} + IMPORTED_LOCATION_DEBUG ${imported_location_debug} + )]] + _contents "${_contents}") + else() # Single configuration build (either debug or release) + # Release case + string(REPLACE + [[set(imported_location "${_qt5Core_install_prefix}/lib/qtmain.lib")]] + [[set(imported_location "${_qt5Core_install_prefix}/lib/manual-link/qtmain.lib")]] + _contents "${_contents}") + # Debug case (whichever will match) + string(REPLACE + [[set(imported_location "${_qt5Core_install_prefix}/lib/qtmaind.lib")]] + [[set(imported_location "${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib")]] + _contents "${_contents}") + string(REPLACE + [[set(imported_location "${_qt5Core_install_prefix}/debug/lib/qtmaind.lib")]] + [[set(imported_location "${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib")]] + _contents "${_contents}") + endif() + file(WRITE "${cmakefile}" "${_contents}") + + if(EXISTS ${CURRENT_PACKAGES_DIR}/tools/qt5/bin) + file(COPY ${CURRENT_PACKAGES_DIR}/tools/qt5/bin DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) + vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin) + vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/qt5/bin) + endif() + # This should be removed if possible! (Currently debug build of qt5-translations requires it.) + if(EXISTS ${CURRENT_PACKAGES_DIR}/debug/tools/qt5/bin) + file(COPY ${CURRENT_PACKAGES_DIR}/tools/qt5/bin DESTINATION ${CURRENT_PACKAGES_DIR}/tools/qt5/debug) + vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/qt5/debug/bin) + endif() + + if(EXISTS ${CURRENT_PACKAGES_DIR}/tools/qt5/bin/qt.conf) + file(REMOVE "${CURRENT_PACKAGES_DIR}/tools/qt5/bin/qt.conf") + endif() + set(CURRENT_INSTALLED_DIR_BACKUP "${CURRENT_INSTALLED_DIR}") + set(CURRENT_INSTALLED_DIR "./../../.." ) # Making the qt.conf relative and not absolute + configure_file(${CURRENT_PACKAGES_DIR}/tools/qt5/qt_release.conf ${CURRENT_PACKAGES_DIR}/tools/qt5/bin/qt.conf) # This makes the tools at least useable for release + set(CURRENT_INSTALLED_DIR "${CURRENT_INSTALLED_DIR_BACKUP}") + + qt_install_copyright(${SOURCE_PATH}) +endif() +#install scripts for other qt ports +file(COPY + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_port_hashes.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_port_functions.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_fix_makefile_install.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_fix_cmake.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_fix_prl.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_download_submodule.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_build_submodule.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_install_copyright.cmake + ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_submodule_installation.cmake + DESTINATION + ${CURRENT_PACKAGES_DIR}/share/qt5 +) + +# Fix Qt5GuiConfigExtras EGL path +if(VCPKG_TARGET_IS_LINUX) + set(_file "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake") + file(READ "${_file}" _contents) + string(REGEX REPLACE "_qt5gui_find_extra_libs\\\(EGL[^\\\n]+" "_qt5gui_find_extra_libs(EGL \"EGL\" \"\" \"\${_qt5Gui_install_prefix}/include\")\n" _contents "${_contents}") + file(WRITE "${_file}" "${_contents}") +endif() + +vcpkg_fixup_pkgconfig() + +if(VCPKG_TARGET_IS_OSX) + file(GLOB _debug_files "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/*_debug.pc") + foreach(_file ${_debug_files}) + string(REGEX REPLACE "_debug\\.pc$" ".pc" _new_filename "${_file}") + string(REGEX MATCH "(Qt5[a-zA-Z]+)_debug\\.pc$" _not_used "${_file}") + set(_name ${CMAKE_MATCH_1}) + file(STRINGS "${_file}" _version REGEX "^(Version):.+$") + file(WRITE "${_new_filename}" "Name: ${_name}\nDescription: Forwarding to the _debug version by vcpkg\n${_version}\nRequires: ${_name}_debug\n") + endforeach() +endif() +# #Code to get generated CMake files from CI +# file(RENAME "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Core/Qt5CoreConfig.cmake" "${CURRENT_BUILDTREES_DIR}/Qt5CoreConfig.cmake.log") +# file(GLOB_RECURSE CMAKE_GUI_FILES "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Gui/*.cmake" ) +# foreach(cmake_file ${CMAKE_GUI_FILES}) + # get_filename_component(cmake_filename "${cmake_file}" NAME) + # file(COPY "${cmake_file}" DESTINATION "${CURRENT_BUILDTREES_DIR}") + # file(RENAME "${CURRENT_BUILDTREES_DIR}/${cmake_filename}" "${CURRENT_BUILDTREES_DIR}/${cmake_filename}.log") +# endforeach() +# #Copy config.log from buildtree/triplet to buildtree to get the log in CI in case of failure +# if(EXISTS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/config.log") + # file(RENAME "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/config.log" "${CURRENT_BUILDTREES_DIR}/config-rel.log") +# endif() +# if(EXISTS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/config.log") + # file(RENAME "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/config.log" "${CURRENT_BUILDTREES_DIR}/config-dbg.log") +# endif() +# message(FATAL_ERROR "Need Info from CI!") diff --git a/vcpkg/ports/qt5-base/qtdeploy.ps1 b/vcpkg/ports/qt5-base/qtdeploy.ps1 new file mode 100644 index 0000000..6b27d44 --- /dev/null +++ b/vcpkg/ports/qt5-base/qtdeploy.ps1 @@ -0,0 +1,113 @@ +# This script is based on the implementation of windeployqt for qt5.7.1 +# +# Qt's plugin deployment strategy is that each main Qt Module has a hardcoded +# set of plugin subdirectories. Each of these subdirectories is deployed in +# full if that Module is referenced. +# +# This hardcoded list is found inside qttools\src\windeployqt\main.cpp. For +# updating, inspect the symbols qtModuleEntries and qtModuleForPlugin. + +# Note: this function signature and behavior is depended upon by applocal.ps1 +function deployPluginsIfQt([string]$targetBinaryDir, [string]$QtPluginsDir, [string]$targetBinaryName) { + $baseDir = Split-Path $QtPluginsDir -parent + $binDir = "$baseDir\bin" + + function deployPlugins([string]$pluginSubdirName) { + if (Test-Path "$QtPluginsDir\$pluginSubdirName") { + Write-Verbose " Deploying plugins directory '$pluginSubdirName'" + New-Item "$targetBinaryDir\plugins\$pluginSubdirName" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null + Get-ChildItem "$QtPluginsDir\$pluginSubdirName\*.dll" | % { + deployBinary "$targetBinaryDir\plugins\$pluginSubdirName" "$QtPluginsDir\$pluginSubdirName" $_.Name + resolve "$targetBinaryDir\plugins\$pluginSubdirName\$($_.Name)" + } + } else { + Write-Verbose " Skipping plugins directory '$pluginSubdirName': doesn't exist" + } + } + + # We detect Qt modules in use via the DLLs themselves. See qtModuleEntries in Qt to find the mapping. + if ($targetBinaryName -match "Qt5Cored?.dll") { + if (!(Test-Path "$targetBinaryDir\qt.conf")) { + "[Paths]" | Out-File -encoding ascii "$targetBinaryDir\qt.conf" + } + } elseif ($targetBinaryName -match "Qt5Guid?.dll") { + Write-Verbose " Deploying platforms" + New-Item "$targetBinaryDir\plugins\platforms" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null + Get-ChildItem "$QtPluginsDir\platforms\qwindows*.dll" | % { + deployBinary "$targetBinaryDir\plugins\platforms" "$QtPluginsDir\platforms" $_.Name + } + + deployPlugins "accessible" + deployPlugins "imageformats" + deployPlugins "iconengines" + deployPlugins "platforminputcontexts" + deployPlugins "styles" + } elseif ($targetBinaryName -match "Qt5Networkd?.dll") { + deployPlugins "bearer" + if (Test-Path "$binDir\libcrypto-*-x64.dll") + { + deployBinary "$targetBinaryDir" "$binDir" "libcrypto-*-x64.dll" + deployBinary "$targetBinaryDir" "$binDir" "libssl-*-x64.dll" + } + if (Test-Path "$binDir\libcrypto-*.dll") + { + deployBinary "$targetBinaryDir" "$binDir" "libcrypto-*.dll" + deployBinary "$targetBinaryDir" "$binDir" "libssl-*.dll" + } + } elseif ($targetBinaryName -match "Qt5Sqld?.dll") { + deployPlugins "sqldrivers" + } elseif ($targetBinaryName -match "Qt5Multimediad?.dll") { + deployPlugins "audio" + deployPlugins "mediaservice" + deployPlugins "playlistformats" + } elseif ($targetBinaryName -match "Qt5PrintSupportd?.dll") { + deployPlugins "printsupport" + } elseif ($targetBinaryName -match "Qt5Qmld?.dll") { + if(!(Test-Path "$targetBinaryDir\qml")) + { + if (Test-Path "$binDir\..\qml") { + cp -r "$binDir\..\qml" $targetBinaryDir + } elseif (Test-Path "$binDir\..\..\qml") { + cp -r "$binDir\..\..\qml" $targetBinaryDir + } else { + throw "FAILED" + } + } + foreach ($a in @("Qt5Quick", "Qt5Quickd", "Qt5QmlModels", "Qt5QmlModelsd", "Qt5QuickControls2", "Qt5QuickControls2d", "Qt5QuickShapes", "Qt5QuickShapesd", "Qt5QuickTemplates2", "Qt5QuickTemplates2d", "Qt5QmlWorkerScript", "Qt5QmlWorkerScriptd", "Qt5QuickParticles", "Qt5QuickParticlesd", "Qt5QuickWidgets", "Qt5QuickWidgetsd")) + { + if (Test-Path "$binDir\$a.dll") + { + deployBinary "$targetBinaryDir" "$binDir" "$a.dll" + } + } + deployPlugins "scenegraph" + deployPlugins "qmltooling" + } elseif ($targetBinaryName -match "Qt5Quickd?.dll") { + foreach ($a in @("Qt5QuickControls2", "Qt5QuickControls2d", "Qt5QuickShapes", "Qt5QuickShapesd", "Qt5QuickTemplates2", "Qt5QuickTemplates2d", "Qt5QmlWorkerScript", "Qt5QmlWorkerScriptd", "Qt5QuickParticles", "Qt5QuickParticlesd", "Qt5QuickWidgets", "Qt5QuickWidgetsd")) + { + if (Test-Path "$binDir\$a.dll") + { + deployBinary "$targetBinaryDir" "$binDir" "$a.dll" + } + } + deployPlugins "scenegraph" + deployPlugins "qmltooling" + } elseif ($targetBinaryName -like "Qt5Declarative*.dll") { + deployPlugins "qml1tooling" + } elseif ($targetBinaryName -like "Qt5Positioning*.dll") { + deployPlugins "position" + } elseif ($targetBinaryName -like "Qt5Location*.dll") { + deployPlugins "geoservices" + } elseif ($targetBinaryName -like "Qt5Sensors*.dll") { + deployPlugins "sensors" + deployPlugins "sensorgestures" + } elseif ($targetBinaryName -like "Qt5WebEngineCore*.dll") { + deployPlugins "qtwebengine" + } elseif ($targetBinaryName -like "Qt53DRenderer*.dll") { + deployPlugins "sceneparsers" + } elseif ($targetBinaryName -like "Qt5TextToSpeech*.dll") { + deployPlugins "texttospeech" + } elseif ($targetBinaryName -like "Qt5SerialBus*.dll") { + deployPlugins "canbus" + } +} diff --git a/vcpkg/ports/qt5-base/vcpkg.json b/vcpkg/ports/qt5-base/vcpkg.json new file mode 100644 index 0000000..483c4f1 --- /dev/null +++ b/vcpkg/ports/qt5-base/vcpkg.json @@ -0,0 +1,129 @@ +{ + "name": "qt5-base", + "version": "5.15.18", + "description": "Qt Base provides the basic non-GUI functionality required by all Qt applications.", + "homepage": "https://www.qt.io/", + "license": null, + "dependencies": [ + { + "name": "at-spi2-core", + "platform": "linux" + }, + { + "name": "dbus", + "platform": "linux" + }, + "double-conversion", + "egl-registry", + { + "name": "fontconfig", + "platform": "!windows" + }, + { + "name": "freetype", + "default-features": false, + "features": [ + "png", + "zlib" + ] + }, + { + "name": "harfbuzz", + "default-features": false, + "features": [ + "freetype" + ] + }, + "libjpeg-turbo", + "libpng", + { + "name": "opengl", + "platform": "!windows" + }, + { + "name": "pcre2", + "default-features": false + }, + { + "name": "qt5-base", + "host": true, + "default-features": false + }, + { + "name": "vcpkg-cmake-get-vars", + "host": true + }, + { + "name": "vcpkg-pkgconfig-get-modules", + "host": true + }, + "zlib" + ], + "default-features": [ + "openssl" + ], + "features": { + "cups": { + "description": "Provides support for the Common Unix Printing System", + "supports": "linux | osx" + }, + "icu": { + "description": "Enable ICU support", + "dependencies": [ + { + "name": "icu", + "platform": "!uwp" + } + ] + }, + "latest": { + "description": "(deprecated)" + }, + "mysqlplugin": { + "description": "Build the sql plugin for connecting to mysql databases", + "dependencies": [ + "libmysql", + { + "name": "qt5-base", + "default-features": false, + "features": [ + "zstd" + ] + } + ] + }, + "openssl": { + "description": "Build with OpenSSL support", + "dependencies": [ + "openssl" + ] + }, + "postgresqlplugin": { + "description": "Build the sql plugin for connecting to postgresql databases", + "dependencies": [ + "libpq" + ] + }, + "sqlite3plugin": { + "description": "Build the sql plugin for connecting to sqlite3 databases", + "dependencies": [ + { + "name": "sqlite3", + "default-features": false + } + ] + }, + "vulkan": { + "description": "Enable Vulkan support in QtGui", + "dependencies": [ + "vulkan" + ] + }, + "zstd": { + "description": "Zstandard support", + "dependencies": [ + "zstd" + ] + } + } +} |