96 lines
3.0 KiB
CMake
96 lines
3.0 KiB
CMake
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0)
|
||
|
|
||
|
###########################################
|
||
|
# Usage: cmake -DVERSION=5.10.0 -P qt.cmake
|
||
|
###########################################
|
||
|
|
||
|
IF(NOT PACKAGES_DIR)
|
||
|
SET(PACKAGES_DIR $ENV{PACKAGES_DIR})
|
||
|
IF(NOT PACKAGES_DIR)
|
||
|
SET(PACKAGES_DIR ${CMAKE_BINARY_DIR})
|
||
|
ENDIF()
|
||
|
ENDIF()
|
||
|
MESSAGE(STATUS "Use PACKAGES_DIR: ${PACKAGES_DIR}")
|
||
|
|
||
|
IF(NOT VERSION)
|
||
|
MESSAGE(FATAL_ERROR "Please provide Qt version (-DVERSION=5.10.0)")
|
||
|
ENDIF()
|
||
|
|
||
|
FUNCTION(READ_FILE _filename _regex _out)
|
||
|
FILE(STRINGS "${CMAKE_BINARY_DIR}/${_filename}" content REGEX "${_regex}")
|
||
|
STRING(REGEX MATCH "${_regex}" _unused "${content}")
|
||
|
SET(${_out} ${CMAKE_MATCH_1} PARENT_SCOPE)
|
||
|
ENDFUNCTION()
|
||
|
|
||
|
FUNCTION(FETCH_XML _url _out_url)
|
||
|
SET(_filename Updates.xml)
|
||
|
FILE(DOWNLOAD "${_url}/${_filename}" "${CMAKE_BINARY_DIR}/${_filename}")
|
||
|
|
||
|
READ_FILE("${_filename}" "<DownloadableArchives>(.+)</DownloadableArchives>" archive)
|
||
|
READ_FILE("${_filename}" "<Name>(.+)</Name>" name)
|
||
|
READ_FILE("${_filename}" "<Version>([-|\.|0-9]+)<\/Version>" version)
|
||
|
|
||
|
SET(${_out_url} "${_url}/${name}/${version}${archive}" PARENT_SCOPE)
|
||
|
ENDFUNCTION()
|
||
|
|
||
|
FUNCTION(FETCH_HASH _url _hash_algo _out_hash)
|
||
|
STRING(TOLOWER "${_hash_algo}" suffix)
|
||
|
|
||
|
GET_FILENAME_COMPONENT(filename "${_url}" NAME)
|
||
|
FILE(DOWNLOAD "${_url}.${suffix}" "${CMAKE_BINARY_DIR}/${filename}.${suffix}")
|
||
|
FILE(STRINGS ${CMAKE_BINARY_DIR}/${filename}.${suffix} content)
|
||
|
STRING(REGEX MATCH "^[a-z|0-9]+" hash "${content}")
|
||
|
|
||
|
IF(NOT hash)
|
||
|
MESSAGE(FATAL_ERROR "Cannot fetch hash: ${_url}.${suffix}")
|
||
|
ENDIF()
|
||
|
SET(${_out_hash} ${hash} PARENT_SCOPE)
|
||
|
ENDFUNCTION()
|
||
|
|
||
|
INCLUDE(FetchContent)
|
||
|
SET(FETCHCONTENT_QUIET FALSE)
|
||
|
SET(HASH_ALGO SHA256)
|
||
|
SET(QT_SDK_URL https://download.qt.io/online/qtsdkrepository)
|
||
|
|
||
|
|
||
|
|
||
|
############################ OpenSSL
|
||
|
SET(OPENSSL_URL ${QT_SDK_URL}/linux_x64/desktop/tools_openssl_x64)
|
||
|
FETCH_XML("${OPENSSL_URL}" OPENSSL_URL)
|
||
|
FETCH_HASH("${OPENSSL_URL}" ${HASH_ALGO} OPENSSL_HASH)
|
||
|
|
||
|
FetchContent_Populate(openssl
|
||
|
URL ${OPENSSL_URL}
|
||
|
URL_HASH SHA256=${OPENSSL_HASH}
|
||
|
DOWNLOAD_DIR ${PACKAGES_DIR}
|
||
|
)
|
||
|
FetchContent_GetProperties(openssl)
|
||
|
|
||
|
FILE(COPY "${openssl_SOURCE_DIR}/OpenSSL/binary/" DESTINATION b/${VERSION}/gcc_64)
|
||
|
|
||
|
|
||
|
|
||
|
############################ Qt
|
||
|
STRING(SUBSTRING ${VERSION} 0 4 SUBVERSION)
|
||
|
SET(QT_FILE qt-opensource-linux-x64-${VERSION}.run)
|
||
|
SET(QT_URL https://download.qt.io/archive/qt/${SUBVERSION}/${VERSION}/${QT_FILE})
|
||
|
|
||
|
FETCH_HASH("${QT_URL}" ${HASH_ALGO} QT_HASH)
|
||
|
|
||
|
FetchContent_Populate(qt
|
||
|
URL ${QT_URL}
|
||
|
URL_HASH SHA256=${QT_HASH}
|
||
|
DOWNLOAD_DIR ${PACKAGES_DIR}
|
||
|
DOWNLOAD_NO_EXTRACT TRUE
|
||
|
)
|
||
|
|
||
|
|
||
|
SET(ENV{XDG_DATA_HOME} ${CMAKE_BINARY_DIR})
|
||
|
SET(ENV{XDG_DATA_DIRS} ${CMAKE_BINARY_DIR})
|
||
|
SET(ENV{HOME} ${CMAKE_BINARY_DIR})
|
||
|
STRING(REPLACE "." "" PKGVERSION "${VERSION}")
|
||
|
GET_FILENAME_COMPONENT(source_dir "${CMAKE_SCRIPT_MODE_FILE}" DIRECTORY)
|
||
|
EXECUTE_PROCESS(COMMAND chmod +x ${PACKAGES_DIR}/${QT_FILE})
|
||
|
EXECUTE_PROCESS(COMMAND ${PACKAGES_DIR}/${QT_FILE} --script ${source_dir}/qt-install.qs -v --platform minimal TargetDir=b Packages=qt.qt5.${PKGVERSION}.gcc_64)
|
||
|
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink b/${VERSION}/gcc_64 dist)
|