aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/qt5-base
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/qt5-base')
-rw-r--r--vcpkg/ports/qt5-base/cmake/configure_qt.cmake210
-rw-r--r--vcpkg/ports/qt5-base/cmake/find_qt_mkspec.cmake103
-rw-r--r--vcpkg/ports/qt5-base/cmake/install_qt.cmake123
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_build_submodule.cmake143
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_download_submodule.cmake42
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_fix_cmake.cmake21
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_fix_makefile_install.cmake33
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_fix_prl.cmake15
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_install_copyright.cmake18
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_port_functions.cmake14
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_port_hashes.cmake76
-rw-r--r--vcpkg/ports/qt5-base/cmake/qt_submodule_installation.cmake15
-rw-r--r--vcpkg/ports/qt5-base/patches/CVE-2025-30348-qtbase-5.15.diff156
-rw-r--r--vcpkg/ports/qt5-base/patches/CVE-2025-4211-qtbase-5.15.diff61
-rw-r--r--vcpkg/ports/qt5-base/patches/CVE-2025-5455-qtbase-5.15.patch20
-rw-r--r--vcpkg/ports/qt5-base/patches/Qt5BasicConfig.patch194
-rw-r--r--vcpkg/ports/qt5-base/patches/Qt5GuiConfigExtras.patch13
-rw-r--r--vcpkg/ports/qt5-base/patches/Qt5PluginTarget.patch74
-rw-r--r--vcpkg/ports/qt5-base/patches/create_cmake.patch41
-rw-r--r--vcpkg/ports/qt5-base/patches/egl.patch16
-rw-r--r--vcpkg/ports/qt5-base/patches/fix_angle.patch35
-rw-r--r--vcpkg/ports/qt5-base/patches/mingw9.patch21
-rw-r--r--vcpkg/ports/qt5-base/patches/mysql-configure.patch11
-rw-r--r--vcpkg/ports/qt5-base/patches/mysql_plugin_include.patch11
-rw-r--r--vcpkg/ports/qt5-base/patches/patch-qtbase-memory_resource.diff11
-rw-r--r--vcpkg/ports/qt5-base/patches/qmake-arm64.patch18
-rw-r--r--vcpkg/ports/qt5-base/patches/qt_app.patch17
-rw-r--r--vcpkg/ports/qt5-base/patches/qtbug_96392.patch27
-rw-r--r--vcpkg/ports/qt5-base/patches/static_opengl.patch62
-rw-r--r--vcpkg/ports/qt5-base/patches/vulkan-windows.diff13
-rw-r--r--vcpkg/ports/qt5-base/patches/windows_prf.patch13
-rw-r--r--vcpkg/ports/qt5-base/patches/winmain_pro.patch27
-rw-r--r--vcpkg/ports/qt5-base/patches/xlib.patch39
-rw-r--r--vcpkg/ports/qt5-base/portfile.cmake546
-rw-r--r--vcpkg/ports/qt5-base/qtdeploy.ps1113
-rw-r--r--vcpkg/ports/qt5-base/vcpkg.json129
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("&lt;"));
+- len += 3;
+- i += 4;
+- } else if (encodeQuotes && (ati == QLatin1Char('"'))) {
+- retval.replace(i, 1, QLatin1String("&quot;"));
+- len += 5;
+- i += 6;
+- } else if (ati == QLatin1Char('&')) {
+- retval.replace(i, 1, QLatin1String("&amp;"));
+- len += 4;
+- i += 5;
+- } else if (ati == QLatin1Char('>') && i >= 2 && retval[i - 1] == QLatin1Char(']') && retval[i - 2] == QLatin1Char(']')) {
+- retval.replace(i, 1, QLatin1String("&gt;"));
+- 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("&#xd;")); // 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("&lt;"));
++ break;
++ case u'"':
++ if (encodeQuotes)
++ appendToOutput(cur, QLatin1String("&quot;"));
++ break;
++ case u'&':
++ appendToOutput(cur, QLatin1String("&amp;"));
++ break;
++ case u'>':
++ if (cur >= 2 && str[cur - 1] == u']' && str[cur - 2] == u']')
++ appendToOutput(cur, QLatin1String("&gt;"));
++ break;
++ case u'\r':
++ if (performAVN || encodeEOLs)
++ appendToOutput(cur, QLatin1String("&#xd;")); // \r == 0x0d
++ break;
++ case u'\n':
++ if (performAVN)
++ appendToOutput(cur, QLatin1String("&#xa;")); // \n == 0x0a
++ break;
++ case u'\t':
++ if (performAVN)
++ appendToOutput(cur, QLatin1String("&#x9;")); // \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"
+ ]
+ }
+ }
+}