aboutsummaryrefslogtreecommitdiff
path: root/ports/qt5-base/cmake
diff options
context:
space:
mode:
authorAlexander Neumann <30894796+Neumann-A@users.noreply.github.com>2019-09-12 19:07:22 +0200
committerPhil Christensen <philc@microsoft.com>2019-09-12 10:07:21 -0700
commit96f4487c77fbf08518a9ee665612927c97ce8ebd (patch)
treea7b610226f798bda208a6459f26afa9922fb5dde /ports/qt5-base/cmake
parentecfc714b9adbdf8bf6b394dd6b46d9c56ca993ea (diff)
downloadvcpkg-96f4487c77fbf08518a9ee665612927c97ce8ebd.tar.gz
vcpkg-96f4487c77fbf08518a9ee665612927c97ce8ebd.zip
[Qt] Update to 5.12.4 (#7667)
* update to 5.12.4 * removed port qt5-modularscripts and split it functionality into more functions into qt5-base * added qt_port_hashes.cmake for simpler upgrade. * added optional VCPKG_QT_HOST_MKSPEC and VCPKG_QT_TARGET_MKSPEC to select QTs build mkspecs from a triplet * qt_<config>.conf are now copied from the build dir instead from the port dir * fixed freetype dependencies. * cleanup of vcpkg_qmake scripts. No strange/unclear replacements anymore. * introduced vcpkg_buildpath_length_warning * changed directory layout of the qt5 installation executables and mkspecs a bit.
Diffstat (limited to 'ports/qt5-base/cmake')
-rw-r--r--ports/qt5-base/cmake/configure_qt.cmake132
-rw-r--r--ports/qt5-base/cmake/find_qt_mkspec.cmake101
-rw-r--r--ports/qt5-base/cmake/install_qt.cmake121
-rw-r--r--ports/qt5-base/cmake/qt_build_submodule.cmake83
-rw-r--r--ports/qt5-base/cmake/qt_download_submodule.cmake32
-rw-r--r--ports/qt5-base/cmake/qt_fix_cmake.cmake27
-rw-r--r--ports/qt5-base/cmake/qt_fix_makefile_install.cmake26
-rw-r--r--ports/qt5-base/cmake/qt_fix_prl.cmake10
-rw-r--r--ports/qt5-base/cmake/qt_install_copyright.cmake16
-rw-r--r--ports/qt5-base/cmake/qt_port_functions.cmake14
-rw-r--r--ports/qt5-base/cmake/qt_port_hashes.cmake51
-rw-r--r--ports/qt5-base/cmake/qt_submodule_installation.cmake7
12 files changed, 620 insertions, 0 deletions
diff --git a/ports/qt5-base/cmake/configure_qt.cmake b/ports/qt5-base/cmake/configure_qt.cmake
new file mode 100644
index 000000000..623924d71
--- /dev/null
+++ b/ports/qt5-base/cmake/configure_qt.cmake
@@ -0,0 +1,132 @@
+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")
+
+ #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)
+
+ foreach(_buildname ${BUILDTYPES})
+ 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})
+ # 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}}
+ -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
+ # 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
+ -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
+ -L ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib
+ -L ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib/manual-link
+ -xplatform ${_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}
+ 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}
+ 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(REPLACE "[EffectiveSourcePaths]\nPrefix=${_csc_SOURCE_PATH}\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/ports/qt5-base/cmake/find_qt_mkspec.cmake b/ports/qt5-base/cmake/find_qt_mkspec.cmake
new file mode 100644
index 000000000..035aec1ad
--- /dev/null
+++ b/ports/qt5-base/cmake/find_qt_mkspec.cmake
@@ -0,0 +1,101 @@
+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_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_ROOT_DIR}/installed/${_triplet}/tools/qt5/bin NO_DEFAULT_PATHS)
+ message(STATUS "Checking: ${VCPKG_ROOT_DIR}/installed/${_triplet}/tools/qt5/bin. ${QMAKE_PATH}")
+ if(QMAKE_PATH)
+ set(_tmp_host_root "${VCPKG_ROOT_DIR}/installed/${_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() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/install_qt.cmake b/ports/qt5-base/cmake/install_qt.cmake
new file mode 100644
index 000000000..ebe2dc833
--- /dev/null
+++ b/ports/qt5-base/cmake/install_qt.cmake
@@ -0,0 +1,121 @@
+include(qt_fix_makefile_install)
+
+function(install_qt)
+ cmake_parse_arguments(_bc "DISABLE_PARALLEL" "" "" ${ARGN})
+
+ if (_bc_DISABLE_PARALLEL)
+ set(NUMBER_OF_PROCESSORS "1")
+ else()
+ if(DEFINED ENV{NUMBER_OF_PROCESSORS})
+ set(NUMBER_OF_PROCESSORS $ENV{NUMBER_OF_PROCESSORS})
+ elseif(VCPKG_TARGET_IS_OSX)
+ execute_process(
+ COMMAND sysctl -n hw.ncpu
+ OUTPUT_VARIABLE NUMBER_OF_PROCESSORS
+ )
+ string(REPLACE "\n" "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ string(REPLACE " " "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ else()
+ execute_process(
+ COMMAND nproc
+ OUTPUT_VARIABLE NUMBER_OF_PROCESSORS
+ )
+ string(REPLACE "\n" "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ string(REPLACE " " "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ endif()
+ endif()
+
+ message(STATUS "NUMBER_OF_PROCESSORS is ${NUMBER_OF_PROCESSORS}")
+
+ if(CMAKE_HOST_WIN32)
+ vcpkg_find_acquire_program(JOM)
+ set(INVOKE "${JOM}" /J ${NUMBER_OF_PROCESSORS})
+ else()
+ find_program(MAKE make)
+ set(INVOKE "${MAKE}" -j${NUMBER_OF_PROCESSORS})
+ 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}})
+
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/bin")
+
+ if(VCPKG_TARGET_IS_OSX)
+ # For some reason there will be an error on MacOSX without this clean!
+ message(STATUS "Cleaning before build ${_build_triplet}")
+ vcpkg_execute_required_process(
+ COMMAND ${INVOKE_SINGLE} clean
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet}
+ LOGNAME cleaning-1-${_build_triplet}
+ )
+ endif()
+
+ message(STATUS "Building ${_build_triplet}")
+ vcpkg_execute_required_process(
+ COMMAND ${INVOKE}
+ 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}
+ LOGNAME cleaning-2-${_build_triplet}
+ )
+ endif()
+
+ message(STATUS "Fixig 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}")
+ endforeach()
+
+
+
+endfunction()
diff --git a/ports/qt5-base/cmake/qt_build_submodule.cmake b/ports/qt5-base/cmake/qt_build_submodule.cmake
new file mode 100644
index 000000000..f850ad551
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_build_submodule.cmake
@@ -0,0 +1,83 @@
+
+function(qt_build_submodule SOURCE_PATH)
+ # This fixes issues on machines with default codepages that are not ASCII compatible, such as some CJK encodings
+ set(ENV{_CL_} "/utf-8")
+
+ vcpkg_find_acquire_program(PYTHON2)
+ get_filename_component(PYTHON2_EXE_PATH ${PYTHON2} DIRECTORY)
+ vcpkg_add_to_path("${PYTHON2_EXE_PATH}")
+
+ vcpkg_configure_qmake(SOURCE_PATH ${SOURCE_PATH})
+
+ 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})
+
+ #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}")
+ vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
+ endif()
+endfunction() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_download_submodule.cmake b/ports/qt5-base/cmake/qt_download_submodule.cmake
new file mode 100644
index 000000000..51e7c557a
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_download_submodule.cmake
@@ -0,0 +1,32 @@
+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" ${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-src-${FULL_VERSION}.tar.xz")
+
+ vcpkg_download_distfile(ARCHIVE_FILE
+ URLS "http://download.qt.io/official_releases/qt/${QT_MAJOR_MINOR_VER}/${FULL_VERSION}/submodules/${ARCHIVE_NAME}"
+ FILENAME ${ARCHIVE_NAME}
+ SHA512 ${QT_HASH_${PORT}}
+ )
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${ARCHIVE_FILE}"
+ REF ${FULL_VERSION}
+ PATCHES ${_csc_PATCHES}
+ )
+
+ set(${_csc_OUT_SOURCE_PATH} ${SOURCE_PATH} PARENT_SCOPE)
+endfunction() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_fix_cmake.cmake b/ports/qt5-base/cmake/qt_fix_cmake.cmake
new file mode 100644
index 000000000..6da5deb8e
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_fix_cmake.cmake
@@ -0,0 +1,27 @@
+function(qt_fix_cmake PACKAGE_DIR_TO_FIX PORT_TO_FIX)
+ set(BACKUP_PATH "$ENV{PATH}")
+ #Find Python and add it to the path
+ vcpkg_find_acquire_program(PYTHON2)
+ get_filename_component(PYTHON2_EXE_PATH ${PYTHON2} DIRECTORY)
+ vcpkg_add_to_path("${PYTHON2_EXE_PATH}")
+
+ #Fix the cmake files if they exist
+ if(EXISTS ${PACKAGE_DIR_TO_FIX}/lib/cmake)
+ vcpkg_execute_required_process(
+ COMMAND ${PYTHON2} ${CURRENT_INSTALLED_DIR}/share/qt5/fixcmake.py ${PORT_TO_FIX}
+ WORKING_DIRECTORY ${PACKAGE_DIR_TO_FIX}/lib/cmake
+ LOGNAME fix-cmake
+ )
+ endif()
+
+ #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()
+ set(ENV{PATH} "${BACKUP_PATH}")
+endfunction() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_fix_makefile_install.cmake b/ports/qt5-base/cmake/qt_fix_makefile_install.cmake
new file mode 100644
index 000000000..95831d29f
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_fix_makefile_install.cmake
@@ -0,0 +1,26 @@
+#Could probably be a vcpkg_fix_makefile_install for other ports?
+function(qt_fix_makefile_install BUILD_DIR)
+ #Fix the installation location
+ file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR)
+ file(TO_NATIVE_PATH "${CURRENT_PACKAGES_DIR}" NATIVE_PACKAGES_DIR)
+
+ if(WIN32)
+ 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_DIR_WITHOUT_DRIVE ${NATIVE_INSTALLED_DIR})
+ set(PACKAGES_DIR_WITHOUT_DRIVE ${NATIVE_PACKAGES_DIR})
+ endif()
+
+ file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR)
+ file(TO_NATIVE_PATH "${CURRENT_PACKAGES_DIR}" NATIVE_PACKAGES_DIR)
+
+ file(GLOB_RECURSE MAKEFILES "${BUILD_DIR}/*Makefile*")
+
+ foreach(MAKEFILE ${MAKEFILES})
+ file(READ "${MAKEFILE}" _contents)
+ #Set the correct install directory to packages
+ string(REPLACE "(INSTALL_ROOT)${INSTALLED_DIR_WITHOUT_DRIVE}" "(INSTALL_ROOT)${PACKAGES_DIR_WITHOUT_DRIVE}" _contents "${_contents}")
+ file(WRITE "${MAKEFILE}" "${_contents}")
+ endforeach()
+endfunction() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_fix_prl.cmake b/ports/qt5-base/cmake/qt_fix_prl.cmake
new file mode 100644
index 000000000..214f7cdb4
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_fix_prl.cmake
@@ -0,0 +1,10 @@
+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" CMAKE_INCLUDE_PATH)
+ 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}")
+ file(WRITE "${PRL_FILE}" "${_contents}")
+ endforeach()
+endfunction() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_install_copyright.cmake b/ports/qt5-base/cmake/qt_install_copyright.cmake
new file mode 100644
index 000000000..0f7e60cc7
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_install_copyright.cmake
@@ -0,0 +1,16 @@
+#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")
+ endif()
+ file(INSTALL ${LICENSE_PATH} DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
+endfunction() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_port_functions.cmake b/ports/qt5-base/cmake/qt_port_functions.cmake
new file mode 100644
index 000000000..19f53f98b
--- /dev/null
+++ b/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/ports/qt5-base/cmake/qt_port_hashes.cmake b/ports/qt5-base/cmake/qt_port_hashes.cmake
new file mode 100644
index 000000000..bf311a7b6
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_port_hashes.cmake
@@ -0,0 +1,51 @@
+#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.12)
+set(QT_PATCH_VER 4)
+
+set(QT_PORT_LIST base 3d activeqt charts connectivity datavis3d declarative gamepad graphicaleffects imageformats location macextras mqtt multimedia networkauth
+ purchasing quickcontrols quickcontrols2 remoteobjects script scxml sensors serialport speech svg tools virtualkeyboard webchannel websockets
+ webview winextras xmlpatterns)
+
+#set(_VCPKG_INTERNAL_NO_HASH_CHECK 1)
+set(QT_HASH_qt5-base 28b029a0d3621477f625d474b8bc38ddcc7173df6adb274b438e290b6c50bd0891e5b62c04b566a281781acee3a353a6a3b0bc88228e996994f92900448d7946)
+set(QT_HASH_qt5-3d aa93d3661d092dc020e7903242964b7daba1e42882deb0d5fd45abff3c11e971f49a497ae5a1b7420fd497e6986daca4da0a217c94821ef8432cc3d8c617d291)
+set(QT_HASH_qt5-activeqt 1a1560424ed8f6075ffe371efaff63ae9aa52377aa84f806a39d7e995960a7d7eeb1eb575470b13569293d2623c5e247204397d8b6698c1ce2ff9f206850a912)
+set(QT_HASH_qt5-charts d9c46f59d15377098427647cbd3c3fc2d7ff33fb9940581360db3be5e895b50bee0fe23a41c0af6b157e905b04b1bc13666c1736b047a405b21aab3a2bdbe60b)
+set(QT_HASH_qt5-connectivity e1076c5883f29cb394d9929a52c3bfce97952cef11b1f82d1fcca59440354d1a29ab19d628f6359ca02f3318fb526b3ca78d691af6dc0f4c06741b2306c8e571)
+set(QT_HASH_qt5-datavis3d e5041e4b666fa4e7ce8b12fd522be3ace144b43bf68fa2d45add67dfc6afc6e5788c5fac5eed81e9fa631cf6d372ce0aed8287fa139488406612322e5fd7e550)
+set(QT_HASH_qt5-declarative 953b0dac76b73a7a21b393ab88718da12d77dfc688dc07c55c96ea1658bc14acd9097bef60df4a95d2923d3fb1e02b46499c032aa53844d4fd344b0037514671)
+set(QT_HASH_qt5-gamepad e84e637e3b2ced01e92ceb2b54b829a1e2346a4c96b15044f59bcc9764a24c91df6fcd0165f454143cfad87c05471b7d84567d9c6ea8fd3b4c753e5e771e8947)
+set(QT_HASH_qt5-graphicaleffects fe78cb01cfbe00226709a7faa2e754abb8e41bd677d15611221fbb9e53bf876e60d244eb6660b6b03403d31be2d9155a763ad34e4c4d2d1490fa6810f54bad0c)
+set(QT_HASH_qt5-imageformats e9adab3b7e1f5a0679e1924eb08718f2c6c53073f83018c9243886f7e1b084940bb9a642f46d76fae21552c4a76c655482536ae873cd4cfead4876a3561ebe8f)
+set(QT_HASH_qt5-location b03380feb2e6767dabb0a75f9234c52a9adc580d53b692c356b04293195f6cdd49d9c7e8eb91404b5a7e4c7507498078dd8f41de014330d35f0e99e034b8cf3a)
+set(QT_HASH_qt5-macextras 813b26a95e0ab7119e3f6341052d08d6b401713cc914fd9a8a43675be21d87135f3ed7538edceec68d16e6cb3eb0042351083b545624e18ea217c23a105185e4)
+set(QT_HASH_qt5-mqtt f2c254947d767e30a8ba683ef8f4c14e6aad911cd887e675abadf0f315771b62adababab3831d7712e09a953d9b7e95df6db0f3fc82cb7bb5aad988bdfa127b5)
+set(QT_HASH_qt5-multimedia 28eaaf4a704649616cd77ae5560ddd6298c82e525f59fa4d5a0178826fe2d6c9b77dcb067f2b5b56e88da7d6043a3f8e34b5c810d12751c74fdc65e5440586fa)
+set(QT_HASH_qt5-networkauth 0f36530393abe5315154bf95d0cae1330a8af1af8af5a525d20336d4227f11aa9133b7e3258f651be6f212593ad7e0d2d5d15536fab3c07392a94f2954afe7c8)
+set(QT_HASH_qt5-purchasing 06124d275dcb9c969ccebccd9847c9819eb460ec00b73ab442533dafa8df875c8729148d714555f301da1c273488f8e41ac0b176f11cfadba4e121e3230579da)
+set(QT_HASH_qt5-quickcontrols 315f711d856a4f2882c4e60435bd5fc77623b4ba3bd10fea8e8d052e0a183556c4b5342236b18fade0bbae3a45df8b1426a26a87b1d7b071bb3e5846585775f6)
+set(QT_HASH_qt5-quickcontrols2 41e44ee733ef3ac5021543407b472750c7b8d61bdeb6960d043477f0c5604699cafb5cca4f755a26ce3cfef1f948e85bb85623ecd21e70c876bd5a8c1f5547bf)
+set(QT_HASH_qt5-remoteobjects 6297af20b6d73cafb29a3c9d000be51b7b4a668163c0d2796cd51d8d292759a9ea0a8beeff4ace6590a22b94eea51350142510d52a8b4ca73594508c204e4b58)
+set(QT_HASH_qt5-script 6d3b802c7cdfb270318b9210df4ad9dbd2d29f485d9194051dbf278a48c25cc5c6311adeaf56b4fe2a7746dbc10234544e75e61a2e9c86f653aed0a92e07e717)
+set(QT_HASH_qt5-scxml 45bf18c1bece80120b2a8f81357afda86584ad5455a49b0db0658b4dd7f0a4ef53c7cc7ef8fff26842f476661b162752db7e8a48ed3566342ad0c1537d4ac8f9)
+set(QT_HASH_qt5-sensors 39bc6b2a435dd54d574f6c19ccc15698f8ade3f2b64170baa3e0d0bd24f64bc16a9088620a6be41a61ed170bd84d4795bf2819b40a188c5c2255a54d0e466035)
+set(QT_HASH_qt5-serialport c51fa5eca92a16c41678eef37c3e33c6ea7f61ad881dd309548b83bafa3fedf191afc324437863dcf1a35dafc512363e7588f65136c07ad8f0d51c6854da178f)
+set(QT_HASH_qt5-speech 85f77f32d2a3fc28262fa0af2dc1ff13c572835bff8fef3a79b4af0efdee0fc325754e1803d98ce25042fd717de28f3ecb3cc916de729cbb267c14be136007a9)
+set(QT_HASH_qt5-svg 40d7dc82e0acde52e1258e1b1753cc93609c31cf69057c52dc2dd30dc59f2d7d434e20fa4f7f27db3fa300fd3c8f23a8fb03cc26b27cc1c02cc3bf6d97383503)
+set(QT_HASH_qt5-tools 072d09315fc73ec610d2e0d9a1380e5539a79fa1d73104a801e0f8b9afe489b735fefcc46d7c9e519ee8c1b14975386260239be24183933281dead2fec00f466)
+set(QT_HASH_qt5-virtualkeyboard 04960c475a01f65901279fdab352742e4dc77753a306c7bd9996cf32be4a63524e7be034d60b398c6862c0099b02eedcef89f28fd09b1c7fa3075f89adba5a7a)
+set(QT_HASH_qt5-webchannel 956c57c019623a2ccc4b4a7fc8ca2404a04862b7a3fdb8d1317dfd0d24d00f73db4698df22a9758667256646129163ea1b3a588435aa01f28e72e35300637458)
+set(QT_HASH_qt5-websockets b5abd39664f07afe08805876980bc3850a83a032462a7b73e9d5c5458a2f195df85ec903e8a16bf93bde6089ec90ab9b930ea6b1ebb0d99d0955ad36de0613dd)
+set(QT_HASH_qt5-webview c7d5b5225a7edcf642249eb68f0db52ec56cd071f1e17e1f846a210f48229e71c649d99323dc70e9d3bcdca925b0ae1d9c56282d6b31398478ef024b22835fc7)
+set(QT_HASH_qt5-winextras 4d972884bce7736d2a6e6b8d61291647cdf54a175cb6d0fca102e389074084e0f3d25dec35b2b8df2188760ebeee4b2b7f0158ebc37a0c6c1e208d7b10d2a778)
+set(QT_HASH_qt5-xmlpatterns 769fb26b1b72bbe3a1fc0c13dee6f12c4bc5280824954194e676331082af91aacecd2c295aa2e566365f4679f19732b1caa3da18825e3560b402b86568b3ac4e)
+
+if(QT_UPDATE_VERSION)
+ foreach(_current_qt_port ${QT_PORT_LIST})
+ set(_current_control "${VCPKG_ROOT_DIR}/ports/qt5-${_current_qt_port}/CONTROL")
+ file(READ ${_current_control} _control_contents)
+ string(REGEX REPLACE "Version: [0-9]\.[0-9]+\.[0-9]" "Version: ${QT_MAJOR_MINOR_VER}.${QT_MAJOR_MINOR_VER}" _control_contents "${_control_contents}")
+ file(WRITE ${_current_control} "${_control_contents}")
+ endforeach()
+endif() \ No newline at end of file
diff --git a/ports/qt5-base/cmake/qt_submodule_installation.cmake b/ports/qt5-base/cmake/qt_submodule_installation.cmake
new file mode 100644
index 000000000..f604a8f0b
--- /dev/null
+++ b/ports/qt5-base/cmake/qt_submodule_installation.cmake
@@ -0,0 +1,7 @@
+
+
+function(qt_submodule_installation)
+ qt_download_submodule(OUT_SOURCE_PATH TARGET_SOURCE_PATH ${ARGV})
+ qt_build_submodule(${TARGET_SOURCE_PATH})
+ qt_install_copyright(${TARGET_SOURCE_PATH})
+endfunction() \ No newline at end of file