aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2022-01-24 14:20:42 +0100
committerPiotr Srebrny <piotr.srebrny@qt.io>2022-06-13 09:56:56 +0200
commita273e9f11c8c0fdcd354b69ce7e113e4e0d45df9 (patch)
treee18e5299be6c735ada57a95db72ba97ba8f8a43c
parent6b2298dacfa8369c6ae152f244797f39ad9868ad (diff)
Provision FFmpeg library for QtMultimedia plugin
One of the QtMultimedia backends is implemented using FFmpeg. This provisioning enables building and testing of this backend. Change-Id: Ia196c2ae4b457aa6b8e3ee8e0f367197aadfe0d9 Reviewed-by: Simo Fält <simo.falt@qt.io>
-rw-r--r--coin/platform_configs/cmake_platforms.yaml16
-rwxr-xr-xcoin/provisioning/common/linux/install-ffmpeg.sh72
-rw-r--r--coin/provisioning/common/shared/ffmpeg_config_options.txt1
-rw-r--r--coin/provisioning/common/windows/install-ffmpeg.ps1119
-rw-r--r--coin/provisioning/common/windows/install-msys2.ps18
-rw-r--r--coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/90-install-ffmpeg.sh4
-rw-r--r--coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/90-install-ffmpeg.sh4
-rw-r--r--coin/provisioning/qtci-windows-10-x86_64/90-install-ffmpeg.ps12
-rw-r--r--coin/provisioning/qtci-windows-10_21H2-x86_64/90-install-ffmpeg.ps12
-rw-r--r--coin/provisioning/qtci-windows-11_21H2-x86_64/90-install-ffmpeg.ps12
10 files changed, 221 insertions, 9 deletions
diff --git a/coin/platform_configs/cmake_platforms.yaml b/coin/platform_configs/cmake_platforms.yaml
index 7cff49f4..1747e24a 100644
--- a/coin/platform_configs/cmake_platforms.yaml
+++ b/coin/platform_configs/cmake_platforms.yaml
@@ -14,6 +14,7 @@ Configurations:
Compiler: 'GCC'
Features: ['Sccache', 'Documentation', 'TestDocs', 'UseConfigure']
Configure arguments: '-make examples -developer-build -c++std c++20 -no-warnings-are-errors -qtlibinfix TestInfix -qtnamespace TestNamespace'
+ Environment variables: ['NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}']
-
Id: 'Ubuntu-20.04-host'
Template: 'qtci-linux-Ubuntu-20.04-x86_64-50'
@@ -21,7 +22,8 @@ Configurations:
Features: ['Sccache', 'UseConfigure']
Configure arguments: '-nomake examples -release -force-debug-info -separate-debug-info -headersclean -qt-libjpeg -qt-libpng -qt-pcre -qt-harfbuzz -qt-doubleconversion -no-libudev -bundled-xcb-xinput'
Environment variables: [
- 'CMAKE_ARGS=-DOpenGL_GL_PREFERENCE=LEGACY'
+ 'CMAKE_ARGS=-DOpenGL_GL_PREFERENCE=LEGACY',
+ 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}'
]
-
Id: 'OpenSUSE-15.3-host'
@@ -65,6 +67,7 @@ Configurations:
Configure arguments: '-debug-and-release -force-debug-info -headersclean -nomake examples -qt-zlib'
Environment variables: [
'CMAKE_ARGS=-DFEATURE_msvc_obj_debug_info=ON -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\.. -DPostgreSQL_ROOT={{.Env.POSTGRESQL_LIB_x64}}\..',
+ 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_MSVC}}',
'LLVM_INSTALL_DIR={{.Env.LLVM_INSTALL_DIR_msvc}}'
]
-
@@ -74,6 +77,7 @@ Configurations:
Configure arguments: '-debug-and-release -force-debug-info -headersclean -nomake examples -qt-zlib'
Environment variables: [
'CMAKE_ARGS=-DFEATURE_msvc_obj_debug_info=ON -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\.. -DPostgreSQL_ROOT={{.Env.POSTGRESQL_LIB_x64}}\..',
+ 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_MSVC}}',
'LLVM_INSTALL_DIR={{.Env.LLVM_INSTALL_DIR_msvc}}'
]
-
@@ -84,7 +88,8 @@ Configurations:
Configure arguments: '-debug-and-release -make examples -developer-build -force-debug-info -qt-zlib'
Environment variables: [
'CMAKE_ARGS=-DFEATURE_msvc_obj_debug_info=ON -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\..',
- 'CONAN_PROFILE=coin/conan/profiles/ci-windows-x86_64-msvc2019_64-developer'
+ 'CONAN_PROFILE=coin/conan/profiles/ci-windows-x86_64-msvc2019_64-developer',
+ 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_MSVC}}'
]
-
Template: 'qtci-windows-10_21H2-x86_64-51'
@@ -108,7 +113,8 @@ Configurations:
Features: ['Sccache', "DebugAndRelease", 'WarningsAreErrors', 'UseConfigure']
Configure arguments: '-debug-and-release -make examples -developer-build -force-debug-info -qt-zlib'
Environment variables: [
- 'CMAKE_ARGS=-DFEATURE_msvc_obj_debug_info=ON -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\..'
+ 'CMAKE_ARGS=-DFEATURE_msvc_obj_debug_info=ON -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\..',
+ 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_MSVC}}'
]
-
Template: 'qtci-windows-11_21H2-x86_64-51'
@@ -191,7 +197,7 @@ Configurations:
Environment variables: [
'Path={{.Env.MINGW1120}}\bin;{{.Env.Path}}',
'CMAKE_ARGS=-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\..',
- 'NON_QTBASE_CMAKE_ARGS=-DFEATURE_system_tiff=OFF',
+ 'NON_QTBASE_CMAKE_ARGS=-DFEATURE_system_tiff=OFF -DFFMPEG_DIR={{.Env.FFMPEG_DIR_MINGW}}',
'LLVM_INSTALL_DIR={{.Env.LLVM_INSTALL_DIR_mingw}}'
]
-
@@ -202,6 +208,6 @@ Configurations:
Environment variables: [
'Path={{.Env.MINGW1120}}\bin;{{.Env.Path}}',
'CMAKE_ARGS=-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_INCLUDE_x64}}\..',
- 'NON_QTBASE_CMAKE_ARGS=-DFEATURE_system_tiff=OFF',
+ 'NON_QTBASE_CMAKE_ARGS=-DFEATURE_system_tiff=OFF -DFFMPEG_DIR={{.Env.FFMPEG_DIR_MINGW}}',
'LLVM_INSTALL_DIR={{.Env.LLVM_INSTALL_DIR_mingw}}'
]
diff --git a/coin/provisioning/common/linux/install-ffmpeg.sh b/coin/provisioning/common/linux/install-ffmpeg.sh
new file mode 100755
index 00000000..0dbf86ae
--- /dev/null
+++ b/coin/provisioning/common/linux/install-ffmpeg.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+
+############################################################################
+##
+## Copyright (C) 2022 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the provisioning scripts of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU Lesser General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU Lesser
+## General Public License version 3 as published by the Free Software
+## Foundation and appearing in the file LICENSE.LGPL3 included in the
+## packaging of this file. Please review the following information to
+## ensure the GNU Lesser General Public License version 3 requirements
+## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 2.0 or (at your option) the GNU General
+## Public license version 3 or any later version approved by the KDE Free
+## Qt Foundation. The licenses are as published by the Free Software
+## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-2.0.html and
+## https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# This script will build and install FFmpeg static libs
+set -ex
+
+# shellcheck source=../unix/InstallFromCompressedFileFromURL.sh
+source "${BASH_SOURCE%/*}/../unix/InstallFromCompressedFileFromURL.sh"
+# shellcheck source=../unix/SetEnvVar.sh
+source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
+
+ffmpeg_config_options=$(cat "${BASH_SOURCE%/*}/../shared/ffmpeg_config_options.txt")
+
+sudo apt install yasm
+
+version="n5.0"
+ffmpeg_name="FFmpeg-$version"
+
+url_cached="http://ci-files01-hki.intra.qt.io/input/ffmpeg/$version.tar.gz"
+url_public="https://github.com/FFmpeg/FFmpeg/archive/refs/tags/$version.tar.gz"
+sha1="1a979876463fd81e481d53ceb3cc117f0fce8521"
+
+target_folder="$HOME"
+app_prefix=""
+
+InstallFromCompressedFileFromURL "$url_cached" "$url_public" "$sha1" "$target_folder" "$app_prefix"
+
+mkdir -p "$target_folder/$ffmpeg_name/build"
+pushd "$target_folder/$ffmpeg_name/build"
+../configure $ffmpeg_config_options --prefix=installed
+make install -j
+popd
+
+SetEnvVar "FFMPEG_DIR" "$target_folder/$ffmpeg_name/build/installed"
diff --git a/coin/provisioning/common/shared/ffmpeg_config_options.txt b/coin/provisioning/common/shared/ffmpeg_config_options.txt
new file mode 100644
index 00000000..fc746288
--- /dev/null
+++ b/coin/provisioning/common/shared/ffmpeg_config_options.txt
@@ -0,0 +1 @@
+--disable-programs --disable-doc --disable-debug --disable-network --enable-pic \ No newline at end of file
diff --git a/coin/provisioning/common/windows/install-ffmpeg.ps1 b/coin/provisioning/common/windows/install-ffmpeg.ps1
new file mode 100644
index 00000000..73b7444f
--- /dev/null
+++ b/coin/provisioning/common/windows/install-ffmpeg.ps1
@@ -0,0 +1,119 @@
+############################################################################
+##
+## Copyright (C) 2022 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the provisioning scripts of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU Lesser General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU Lesser
+## General Public License version 3 as published by the Free Software
+## Foundation and appearing in the file LICENSE.LGPL3 included in the
+## packaging of this file. Please review the following information to
+## ensure the GNU Lesser General Public License version 3 requirements
+## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 2.0 or (at your option) the GNU General
+## Public license version 3 or any later version approved by the KDE Free
+## Qt Foundation. The licenses are as published by the Free Software
+## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-2.0.html and
+## https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+. "$PSScriptRoot\helpers.ps1"
+
+# This script will install FFmpeg
+$msys = "C:\Utils\msys64\usr\bin\bash"
+
+$version = "n5.0"
+$ffmpeg_name = "ffmpeg-" + $version;
+$sha1 = "3F7C6D5264A04BC27BA471D189B0483954820D65"
+
+$url_cached = "http://ci-files01-hki.intra.qt.io/input/ffmpeg/" + $version + ".zip"
+$url_public = "https://github.com/FFmpeg/FFmpeg/archive/refs/tags/" +$version + ".zip"
+$download_location = "C:\Windows\Temp\" + $ffmpeg_name + ".zip"
+$unzip_location = "C:\"
+
+Write-Host "Fetching FFmpeg $version..."
+
+Download $url_public $url_cached $download_location
+Verify-Checksum $download_location $sha1
+Extract-7Zip $download_location $unzip_location
+Remove $download_location
+
+function CheckExitCode {
+ param ($p)
+
+ if ($p.ExitCode) {
+ Write-host "Process failed with exit code: $($p.ExitCode)"
+ exit 1
+ }
+}
+
+$config = Get-Content "$PSScriptRoot\..\shared\ffmpeg_config_options.txt"
+Write-Host "FFmpeg configuration $config"
+
+Write-Host "Configure and compile ffmpeg for MINGW"
+$mingw = [System.Environment]::GetEnvironmentVariable("MINGW1120", [System.EnvironmentVariableTarget]::Machine)
+$env:PATH += ";$mingw\bin"
+$env:MSYS2_PATH_TYPE = "inherit"
+$env:MSYSTEM = "MINGW"
+
+$cmd = "cd /c/$ffmpeg_name"
+$cmd += "&& mkdir -p build/mingw && cd build/mingw"
+$cmd += "&& ../../configure --prefix=installed $config"
+$cmd += "&& make install -j"
+
+$build = Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath "$msys" -ArgumentList ("-lc", "`"$cmd`"")
+CheckExitCode $build
+
+Set-EnvironmentVariable "FFMPEG_DIR_MINGW" "C:\$ffmpeg_name\build\mingw\installed"
+
+
+Write-Host "Enter VisualStudio developer shell"
+$vsPath = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional"
+try {
+ Import-Module "$vsPath\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
+ Enter-VsDevShell -VsInstallPath $vsPath -DevCmdArguments "-arch=x64 -no_logo"
+} catch {
+ Write-host "Failed to enter VisualStudio DevShell"
+ exit 1
+}
+
+Write-Host "Configure and compile ffmpeg for MSVC"
+$env:MSYSTEM = "MSYS"
+$env:MSYS2_PATH_TYPE = "inherit"
+
+$cmd = "CC=cl;"
+$cmd += "cd /c/$ffmpeg_name"
+$cmd += "&& mkdir -p build/msvc && cd build/msvc"
+$cmd += "&& ../../configure --toolchain=msvc --prefix=installed $config"
+$cmd += "&& make install -j"
+
+$build = Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath "$msys" -ArgumentList ("-lc", "`"$cmd`"")
+CheckExitCode $build
+
+$ffmpeg_mscv_install = "C:\$ffmpeg_name\build\msvc\installed"
+
+# As ffmpeg build system creates lib*.a file we have to rename them to *.lib files to be recognized by WIN32
+Write-Host "Rename libraries lib*.a -> *.lib"
+Get-ChildItem "$ffmpeg_mscv_install\lib\lib*.a" | Rename-Item -NewName { $_.Name -replace 'lib(\w+).a$', '$1.lib' }
+
+Set-EnvironmentVariable "FFMPEG_DIR_MSVC" $ffmpeg_mscv_install
diff --git a/coin/provisioning/common/windows/install-msys2.ps1 b/coin/provisioning/common/windows/install-msys2.ps1
index 535a399e..0f704a3f 100644
--- a/coin/provisioning/common/windows/install-msys2.ps1
+++ b/coin/provisioning/common/windows/install-msys2.ps1
@@ -41,10 +41,10 @@
# This script will installs msys2
-$version = "20200903"
+$version = "20220319"
$prog = "msys2"
$arch = "x86_64"
-$sha1 = "5a1644585fac2d58855d48b4ba4a92579a14cf03"
+$sha1 = "d3d05090c09c08a47efbffe469142b45231cbc89"
$sha1_prebuilt = "d86d45d72228f53f7ae060771bc95b6f54c703c8"
$folder = "msys64"
@@ -69,9 +69,9 @@ if ((Test-Path $url_cache_prebuilt)) {
Extract-tar_gz $PackagePath $TargetLocation
$msys = "$TargetLocation\$folder\msys2_shell.cmd"
- # install perl
+ # install perl make and yasm
# Run these without 'Run-Executable' function. When using the function the gpg-agent will lock the needed tmp*.tmp file.
- cmd /c "$msys `"-l`" `"-c`" `"rm -rf /etc/pacman.d/gnupg;pacman-key --init;pacman-key --populate msys2;pacman -S --noconfirm perl make`""
+ cmd /c "$msys `"-l`" `"-c`" `"rm -rf /etc/pacman.d/gnupg;pacman-key --init;pacman-key --populate msys2;pacman -S --noconfirm perl make yasm`""
Start-Sleep -s 60
cmd /c "$msys `"-l`" `"-c`" `"echo y | cpan -i Text::Template Test::More`""
diff --git a/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/90-install-ffmpeg.sh b/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/90-install-ffmpeg.sh
new file mode 100644
index 00000000..6d8981c4
--- /dev/null
+++ b/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/90-install-ffmpeg.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+BASEDIR=$(dirname "$0")
+"$BASEDIR/../common/linux/install-ffmpeg.sh"
+
diff --git a/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/90-install-ffmpeg.sh b/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/90-install-ffmpeg.sh
new file mode 100644
index 00000000..6d8981c4
--- /dev/null
+++ b/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/90-install-ffmpeg.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+BASEDIR=$(dirname "$0")
+"$BASEDIR/../common/linux/install-ffmpeg.sh"
+
diff --git a/coin/provisioning/qtci-windows-10-x86_64/90-install-ffmpeg.ps1 b/coin/provisioning/qtci-windows-10-x86_64/90-install-ffmpeg.ps1
new file mode 100644
index 00000000..e16f634c
--- /dev/null
+++ b/coin/provisioning/qtci-windows-10-x86_64/90-install-ffmpeg.ps1
@@ -0,0 +1,2 @@
+. "$PSScriptRoot\..\common\windows\install-ffmpeg.ps1"
+
diff --git a/coin/provisioning/qtci-windows-10_21H2-x86_64/90-install-ffmpeg.ps1 b/coin/provisioning/qtci-windows-10_21H2-x86_64/90-install-ffmpeg.ps1
new file mode 100644
index 00000000..e16f634c
--- /dev/null
+++ b/coin/provisioning/qtci-windows-10_21H2-x86_64/90-install-ffmpeg.ps1
@@ -0,0 +1,2 @@
+. "$PSScriptRoot\..\common\windows\install-ffmpeg.ps1"
+
diff --git a/coin/provisioning/qtci-windows-11_21H2-x86_64/90-install-ffmpeg.ps1 b/coin/provisioning/qtci-windows-11_21H2-x86_64/90-install-ffmpeg.ps1
new file mode 100644
index 00000000..e16f634c
--- /dev/null
+++ b/coin/provisioning/qtci-windows-11_21H2-x86_64/90-install-ffmpeg.ps1
@@ -0,0 +1,2 @@
+. "$PSScriptRoot\..\common\windows\install-ffmpeg.ps1"
+