diff options
Diffstat (limited to 'vcpkg/ports/qt5-base/cmake')
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/configure_qt.cmake | 210 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/find_qt_mkspec.cmake | 103 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/install_qt.cmake | 123 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_build_submodule.cmake | 143 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_download_submodule.cmake | 42 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_fix_cmake.cmake | 21 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_fix_makefile_install.cmake | 33 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_fix_prl.cmake | 15 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_install_copyright.cmake | 18 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_port_functions.cmake | 14 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_port_hashes.cmake | 76 | ||||
| -rw-r--r-- | vcpkg/ports/qt5-base/cmake/qt_submodule_installation.cmake | 15 |
12 files changed, 813 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 |