From b60a341b6b70d403d47330073be69b8184b3ccf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Wed, 28 Oct 2020 15:51:10 +0100 Subject: [PATCH] GitHub Actions: Ship the necessary OpenSSL libs These are necessary for update checks and news. The OpenSSL libraries seem to not be installed for distributing them along with applications on GitHub Actions (as opposed to AppVeyor). To have them available I opted to download them from download.qt.io, extending the install-qt.sh script to be able to install openssl as well. --- .github/workflows/packages.yml | 8 +++++++- dist/distribute.qbs | 28 ++++++++++++++++------------ dist/install-qt.sh | 32 +++++++++++++++++++++++++++----- dist/win/installer.qbs | 24 ++++++++++++++---------- tiled.qbs | 1 + 5 files changed, 65 insertions(+), 28 deletions(-) diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index 4fe09cc992..1395bd0041 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -116,12 +116,17 @@ jobs: strategy: matrix: - arch: [32, 64] + include: + - arch: 32 + openssl_arch: x86 + - arch: 64 + openssl_arch: x64 env: QT_TOOLCHAIN: win${{ matrix.arch }}_mingw81 MINGW_VERSION: 8.1.0 MINGW_COMPONENT: win${{ matrix.arch }}_mingw810 + OPENSSL_VERSION: 1.1.1 defaults: run: @@ -135,6 +140,7 @@ jobs: run: | echo "QT_PATH=$(./dist/install-qt.sh --version ${QT_VERSION} --toolchain ${QT_TOOLCHAIN} qtbase qtdeclarative qtscript qtsvg qtimageformats qttools qttranslations)" >> $GITHUB_ENV echo "MINGW_PATH=$(./dist/install-qt.sh --version ${MINGW_VERSION} ${MINGW_COMPONENT})" >> $GITHUB_ENV + echo "OPENSSL_PATH=$(./dist/install-qt.sh --version ${OPENSSL_VERSION} openssl --arch ${{ matrix.openssl_arch }})" >> $GITHUB_ENV ./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator >> $GITHUB_PATH - name: Setup Qbs diff --git a/dist/distribute.qbs b/dist/distribute.qbs index 8f6ad0d904..8b1ce532ce 100644 --- a/dist/distribute.qbs +++ b/dist/distribute.qbs @@ -296,19 +296,23 @@ Product { condition: qbs.targetOS.contains("windows") && File.exists(prefix) prefix: { - // Not sure what this check should be exactly, but Qt 5.6.3 was - // built against OpenSSL 1.0.2 whereas Qt 5.12.5 was built against - // OpenSSL 1.1.1. - if (Qt.core.versionMinor >= 12) { - if (qbs.architecture === "x86_64") - return "C:/OpenSSL-v111-Win64/" - else - return "C:/OpenSSL-v111-Win32/" + if (project.openSslPath) { + return project.openSslPath + "/"; } else { - if (qbs.architecture === "x86_64") - return "C:/OpenSSL-Win64/" - else - return "C:/OpenSSL-Win32/" + // Not sure what this check should be exactly, but Qt 5.6.3 was + // built against OpenSSL 1.0.2 whereas Qt 5.12.5 was built against + // OpenSSL 1.1.1. + if (Qt.core.versionMinor >= 12) { + if (qbs.architecture === "x86_64") + return "C:/OpenSSL-v111-Win64/" + else + return "C:/OpenSSL-v111-Win32/" + } else { + if (qbs.architecture === "x86_64") + return "C:/OpenSSL-Win64/" + else + return "C:/OpenSSL-Win32/" + } } } files: { diff --git a/dist/install-qt.sh b/dist/install-qt.sh index ca1f1d00c4..c878a30473 100755 --- a/dist/install-qt.sh +++ b/dist/install-qt.sh @@ -99,6 +99,9 @@ Options desktop win64_mingw73, win64_msvc2017_64 (default) + --arch + The CPU architecture to use when installing openssl (x86 or x64). + --version The desired Qt version. Currently supported are all versions above 5.9.0. @@ -111,6 +114,7 @@ COMPONENTS= VERSION= FORCE_DOWNLOAD=false MD5_TOOL=md5sum +ARCH= case "$OSTYPE" in *linux*) @@ -156,6 +160,10 @@ while [ $# -gt 0 ]; do TOOLCHAIN=$(echo $2 | tr '[A-Z]' '[a-z]') shift ;; + --arch) + ARCH="$2" + shift + ;; --version) VERSION="$2" shift @@ -231,7 +239,15 @@ function compute_url(){ local COMPONENT=$1 local CURL="curl -s -L" local BASE_URL="http://download.qt.io/online/qtsdkrepository/${HOST_OS}/${TARGET_PLATFORM}" - if [[ "${COMPONENT}" =~ "mingw" ]]; then + if [[ "${COMPONENT}" =~ "qtcreator" ]]; then + REMOTE_BASE="tools_qtcreator/qt.tools.qtcreator" + REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "${VERSION}[0-9\-]*${COMPONENT}\.7z" | tail -1)" + + if [ ! -z "${REMOTE_PATH}" ]; then + echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}" + return 0 + fi + elif [[ "${COMPONENT}" =~ "mingw" ]]; then REMOTE_BASE="tools_mingw/qt.tools.${COMPONENT}" REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "${VERSION}[[:alnum:]_.\-]*rev0.7z" | tail -1)" @@ -239,9 +255,14 @@ function compute_url(){ echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}" return 0 fi - elif [[ "${COMPONENT}" =~ "qtcreator" ]]; then - REMOTE_BASE="tools_qtcreator/qt.tools.qtcreator" - REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "${VERSION}[0-9\-]*${COMPONENT}\.7z" | tail -1)" + elif [[ "${COMPONENT}" =~ "openssl" ]]; then + if [ -z "${ARCH}" ]; then + echo "No architecture specified for openssl (x86 or x64)." >&2 + exit 1 + fi + + REMOTE_BASE="tools_${COMPONENT}_${ARCH}/qt.tools.${COMPONENT}.win_${ARCH}" + REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "[[:alnum:]_.\-]*${ARCH}.7z" | tail -1)" if [ ! -z "${REMOTE_PATH}" ]; then echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}" @@ -327,6 +348,7 @@ for COMPONENT in ${COMPONENTS}; do echo "${INSTALL_DIR}/Tools/mingw810_32/bin" elif [[ "${COMPONENT}" =~ "win64_mingw" ]]; then echo "${INSTALL_DIR}/Tools/mingw810_64/bin" + elif [[ "${COMPONENT}" =~ "openssl" ]]; then + echo "${INSTALL_DIR}/Tools/OpenSSL/Win_${ARCH}/bin" fi - done diff --git a/dist/win/installer.qbs b/dist/win/installer.qbs index 4338f3029d..336024bfc6 100644 --- a/dist/win/installer.qbs +++ b/dist/win/installer.qbs @@ -57,17 +57,21 @@ WindowsInstallerPackage { if (File.exists(Environment.getEnv("PYTHONHOME"))) defs.push("Python"); - // Not sure what this check should be exactly, but Qt 5.6.3 was - // built against OpenSSL 1.0.2 whereas Qt 5.12.5 was built against - // OpenSSL 1.1.1. - if (Qt.core.versionMinor >= 12) { - var openSslDir = "C:\\OpenSSL-v111-Win" + bits - if (File.exists(openSslDir)) - defs.push("OpenSsl111Dir=" + openSslDir); + if (project.openSslPath) { + defs.push("OpenSsl111Dir=" + project.openSslPath); } else { - var openSslDir = "C:\\OpenSSL-Win" + bits - if (File.exists(openSslDir)) - defs.push("OpenSsl102Dir=" + openSslDir); + // Not sure what this check should be exactly, but Qt 5.6.3 was + // built against OpenSSL 1.0.2 whereas Qt 5.12.5 was built against + // OpenSSL 1.1.1. + if (Qt.core.versionMinor >= 12) { + var openSslDir = "C:\\OpenSSL-v111-Win" + bits + if (File.exists(openSslDir)) + defs.push("OpenSsl111Dir=" + openSslDir); + } else { + var openSslDir = "C:\\OpenSSL-Win" + bits + if (File.exists(openSslDir)) + defs.push("OpenSsl102Dir=" + openSslDir); + } } return defs; diff --git a/tiled.qbs b/tiled.qbs index ef2d09e0e6..69424382e4 100644 --- a/tiled.qbs +++ b/tiled.qbs @@ -14,6 +14,7 @@ Project { property bool useRPaths: true property bool windowsInstaller: false property bool enableZstd: false + property string openSslPath: Environment.getEnv("OPENSSL_PATH") references: [ "dist/archive.qbs",