├── .gitignore ├── 6.2-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.2-android-src ├── Dockerfile ├── build_cmake.sh ├── build_qt.sh ├── get_android.sh └── install_packages.sh ├── 6.2-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.2-gcc-src ├── Dockerfile ├── build_cmake.sh ├── build_qt.sh └── install_packages.sh ├── 6.2-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.2-mingw-aqt ├── Dockerfile ├── get_qt.sh └── install_packages.sh ├── 6.2-wasm-aqt ├── Dockerfile ├── get_emsdk.sh ├── get_qt.sh └── install_packages.sh ├── 6.3-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.3-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.3-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.3-mingw-aqt ├── Dockerfile ├── get_qt.sh └── install_packages.sh ├── 6.3-wasm-aqt ├── Dockerfile ├── get_emsdk.sh ├── get_qt.sh └── install_packages.sh ├── 6.4-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.4-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.4-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.4-mingw-aqt ├── Dockerfile ├── get_qt.sh └── install_packages.sh ├── 6.4-wasm-aqt ├── Dockerfile ├── get_emsdk.sh ├── get_qt.sh └── install_packages.sh ├── 6.5-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.5-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.5-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.5-mingw-aqt ├── Dockerfile ├── get_qt.sh └── install_packages.sh ├── 6.5-wasm-aqt ├── Dockerfile ├── get_emsdk.sh ├── get_qt.sh └── install_packages.sh ├── 6.6-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.6-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.6-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.6-mingw-aqt ├── Dockerfile ├── get_qt.sh └── install_packages.sh ├── 6.6-wasm-aqt ├── Dockerfile ├── get_emsdk.sh ├── get_qt.sh └── install_packages.sh ├── 6.7-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.7-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.7-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.7-mingw-aqt ├── Dockerfile ├── get_qt.sh └── install_packages.sh ├── 6.8-android-aqt ├── Dockerfile ├── get_android.sh ├── get_qt.sh └── install_packages.sh ├── 6.8-gcc-aqt ├── Dockerfile ├── get_linuxdeploy.sh ├── get_qt.sh └── install_packages.sh ├── 6.8-macos-aqt ├── Dockerfile ├── get_osxcross.sh ├── get_qt.sh └── install_packages.sh ├── 6.8-wasm-aqt ├── Dockerfile ├── get_emsdk.sh ├── get_qt.sh ├── install_packages.sh └── quiki.conf ├── LICENSE ├── README.md └── test ├── sample_projects ├── qt_console │ ├── CMakeLists.txt │ ├── main.cpp │ └── qt_console_ru_RU.ts ├── qt_quick │ ├── CMakeLists.txt │ ├── main.cpp │ ├── main.qml │ └── qt_quick_ru_RU.ts └── qt_widgets │ ├── CMakeLists.txt │ ├── main.cpp │ ├── mainwindow.cpp │ ├── mainwindow.h │ ├── mainwindow.ui │ └── qt_widgets_ru_RU.ts └── test.sh /.gitignore: -------------------------------------------------------------------------------- 1 | /test/logs 2 | -------------------------------------------------------------------------------- /6.2-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.5" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.5" 8 | 9 | ARG QT_VERSION=6.2.3 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-11-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=30 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.2 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=22.1.7171670 20 | 21 | ENV DEBIAN_FRONTEND=noninteractive \ 22 | DEBCONF_NONINTERACTIVE_SEEN=true \ 23 | QT_PATH=${QT_PATH} \ 24 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 25 | ANDROID_HOME=${SDK_PATH} \ 26 | ANDROID_SDK_ROOT=${SDK_PATH} \ 27 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 28 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 29 | ANDROID_NDK_HOST=linux-x86_64 \ 30 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 31 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 32 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/latest/bin:${SDK_PATH}/platform-tools 33 | 34 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 35 | 36 | # Get android sdk & ndk 37 | RUN /tmp/get_android.sh 38 | 39 | # Get Qt binaries with aqt 40 | RUN /tmp/get_qt.sh 41 | 42 | # Install the required packages 43 | RUN /tmp/install_packages.sh 44 | 45 | # Reconfigure locale 46 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 47 | 48 | # Add group & user + sudo 49 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 50 | 51 | USER user 52 | WORKDIR /home/user 53 | ENV HOME /home/user 54 | -------------------------------------------------------------------------------- /6.2-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;latest" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.2-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | for abi in armv7 arm64_v8a x86 x86_64; do 33 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 34 | done 35 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 36 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 37 | # Host Qt needed for cross-compilation 38 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.2-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.2-android-src/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-android-src 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | #TODO: ARG QT_URL=https://download.qt.io/official_releases/qt/6.2/6.2.0/single/qt-everywhere-src-6.2.0.tar.xz 7 | ARG QT_VERSION=6.2.0 8 | ARG QT_URL=https://download.qt.io/development_releases/qt/6.2/6.2.0-rc2/single/qt-everywhere-src-6.2.0-rc2.tar.xz 9 | ARG QT_SHA256=3900cd2897b195c187fb2971c447d5bfab9b6f2f2e4d6f384eae4d5efff82b34 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl ninja-build python3 openjdk-8-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=29 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.3 18 | ARG SDK_PACKAGES="tools platform-tools" 19 | ARG NDK_VERSION=21.4.7075529 20 | 21 | ENV DEBIAN_FRONTEND=noninteractive \ 22 | DEBCONF_NONINTERACTIVE_SEEN=true \ 23 | QT_PATH=${QT_PATH} \ 24 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android \ 25 | ANDROID_HOME=${SDK_PATH} \ 26 | ANDROID_SDK_ROOT=${SDK_PATH} \ 27 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 28 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 29 | ANDROID_NDK_HOST=linux-x86_64 \ 30 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 31 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 32 | PATH=${QT_PATH}/bin:${SDK_PATH}/cmdline-tools/latest/bin:${SDK_PATH}/platform-tools:$PATH 33 | 34 | COPY get_android.sh build_cmake.sh build_qt.sh install_packages.sh /tmp/ 35 | 36 | # Get android sdk & ndk 37 | RUN /tmp/get_android.sh 38 | 39 | # Download & build CMake sources 40 | RUN /tmp/build_cmake.sh 41 | 42 | # Download & build Qt sources 43 | RUN /tmp/build_qt.sh 44 | 45 | # Install the required packages 46 | RUN /tmp/install_packages.sh 47 | 48 | # Reconfigure locale 49 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 50 | 51 | # Add group & user + sudo 52 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 53 | 54 | USER user 55 | WORKDIR /home/user 56 | ENV HOME /home/user 57 | -------------------------------------------------------------------------------- /6.2-android-src/build_cmake.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to build cmake in docker container 3 | 4 | [ "$CMAKE_VERSION" ] || CMAKE_VERSION=3.21.3 5 | [ "$CMAKE_URL" ] || CMAKE_URL="https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION.tar.gz" 6 | [ "$CMAKE_SHA256" ] || CMAKE_SHA256=d14d06df4265134ee42c4d50f5a60cb8b471b7b6a47da8e5d914d49dd783794f 7 | 8 | root_dir=$PWD 9 | [ "$root_dir" != '/' ] || root_dir="" 10 | 11 | # Init the package system 12 | apt update 13 | 14 | echo 15 | echo '--> Save the original installed packages list' 16 | echo 17 | 18 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 19 | 20 | echo 21 | echo '--> Install the required packages to build CMake' 22 | echo 23 | 24 | apt install -y curl build-essential libssl-dev 25 | 26 | # Build fresh CMake, Qt 6.2 requires at least 2.19 27 | 28 | echo "$CMAKE_SHA256 -" > sum.txt && curl -fLs "$CMAKE_URL" | tee /tmp/cmake.tar.gz | sha256sum -c sum.txt 29 | mkdir -p $root_dir/build/cmake-build ; cd $root_dir/build/cmake-build 30 | tar --strip-components 1 -xf /tmp/cmake.tar.gz 31 | rm -f /tmp/cmake.tar.gz 32 | ./bootstrap --parallel=16 33 | make -j 16 34 | make install 35 | 36 | echo 37 | echo '--> Restore the packages list to the original state' 38 | echo 39 | 40 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 41 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 42 | 43 | # Complete the cleaning 44 | 45 | cd /tmp 46 | rm -rf $root_dir/build 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.2-android-src/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-8-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;latest" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.2-android-src/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.2-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.5" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.5" 8 | 9 | ARG QT_VERSION=6.2.3 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 18 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 19 | 20 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get linuxdeploy and build it 26 | RUN /tmp/get_linuxdeploy.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.2-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="4c5b9c5dafd14412f80088a09437585aaf2edef4" # Jan 12, 2022 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="ecde8a04cc061f17fbd58883411710dc7605c701" # Jan 11, 2022 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.2-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.2-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.2-gcc-src/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-gcc-src 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | #TODO: ARG QT_URL=https://download.qt.io/official_releases/qt/6.2/6.2.0/single/qt-everywhere-src-6.2.0.tar.xz 7 | ARG QT_URL=https://download.qt.io/development_releases/qt/6.2/6.2.0-rc2/single/qt-everywhere-src-6.2.0-rc2.tar.xz 8 | ARG QT_SHA256=3900cd2897b195c187fb2971c447d5bfab9b6f2f2e4d6f384eae4d5efff82b34 9 | ARG QT_PATH=/opt/Qt 10 | 11 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl ninja-build python3 locales" 12 | 13 | ENV DEBIAN_FRONTEND=noninteractive \ 14 | DEBCONF_NONINTERACTIVE_SEEN=true \ 15 | QT_PATH=${QT_PATH} \ 16 | QT_GCC_64=${QT_PATH}/${QT_VERSION}/gcc_64 \ 17 | PATH=${QT_PATH}/bin:$PATH 18 | 19 | COPY build_cmake.sh build_qt.sh install_packages.sh /tmp/ 20 | 21 | # Download & build CMake sources 22 | RUN /tmp/build_cmake.sh 23 | 24 | # Download & build Qt sources 25 | RUN /tmp/build_qt.sh 26 | 27 | # Install the required packages 28 | RUN /tmp/install_packages.sh 29 | 30 | # Reconfigure locale 31 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 32 | 33 | # Add group & user + sudo 34 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 35 | 36 | USER user 37 | WORKDIR /home/user 38 | ENV HOME /home/user 39 | -------------------------------------------------------------------------------- /6.2-gcc-src/build_cmake.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to build cmake in docker container 3 | 4 | [ "$CMAKE_VERSION" ] || CMAKE_VERSION=3.21.3 5 | [ "$CMAKE_URL" ] || CMAKE_URL="https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION.tar.gz" 6 | [ "$CMAKE_SHA256" ] || CMAKE_SHA256=d14d06df4265134ee42c4d50f5a60cb8b471b7b6a47da8e5d914d49dd783794f 7 | 8 | root_dir=$PWD 9 | [ "$root_dir" != '/' ] || root_dir="" 10 | 11 | # Init the package system 12 | apt update 13 | 14 | echo 15 | echo '--> Save the original installed packages list' 16 | echo 17 | 18 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 19 | 20 | echo 21 | echo '--> Install the required packages to build CMake' 22 | echo 23 | 24 | apt install -y curl build-essential libssl-dev 25 | 26 | # Build fresh CMake, Qt 6.2 requires at least 2.19 27 | 28 | echo "$CMAKE_SHA256 -" > sum.txt && curl -fLs "$CMAKE_URL" | tee /tmp/cmake.tar.gz | sha256sum -c sum.txt 29 | mkdir -p $root_dir/build/cmake-build ; cd $root_dir/build/cmake-build 30 | tar --strip-components 1 -xf /tmp/cmake.tar.gz 31 | rm -f /tmp/cmake.tar.gz 32 | ./bootstrap --parallel=16 33 | make -j 16 34 | make install 35 | 36 | echo 37 | echo '--> Restore the packages list to the original state' 38 | echo 39 | 40 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 41 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 42 | 43 | # Complete the cleaning 44 | 45 | cd /tmp 46 | rm -rf $root_dir/build 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.2-gcc-src/build_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to build Qt 6 in docker container 3 | 4 | [ "$QT_URL" ] || exit 1 5 | [ "$QT_SHA256" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | [ "$QT_BUILD_PACKAGES" ] || QT_BUILD_PACKAGES='ninja-build python2 python-is-python2 gperf bison flex pkg-config libicu-dev libmysqlclient-dev libpq-dev ^libxcb.*-dev libx11-dev libx11-xcb-dev libxcomposite-dev libxrandr-dev libxcursor-dev libxshmfence-dev libgl1-mesa-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev libxkbfile-dev libfontconfig1-dev libxfixes-dev libxext-dev libxdamage-dev x11proto-record-dev libxtst-dev libatspi2.0-dev libatk-bridge2.0-dev libnss3-dev libdbus-1-dev libxslt-dev libxml2-dev libzstd-dev libsystemd-dev libproxy-dev libdrm-dev libgbm-dev libinput-dev libmtdev-dev libcups2-dev unixodbc-dev libmng-dev liblttng-ust-dev libvulkan-dev libasound-dev libavcodec-dev libavformat-dev libgstreamer1.0-dev libpulse-dev libwmf-dev libbluetooth-dev clang-12 libclang*-dev llvm-12-dev libudev-dev libhunspell-dev libwayland-dev wayland-scanner++ libsnappy-dev nodejs libts-dev libdirectfb-dev' 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install & build the required packages to build Qt' 24 | echo 25 | 26 | apt install -y curl build-essential libssl-dev 27 | apt install -y --no-install-suggests --no-install-recommends $QT_BUILD_PACKAGES 28 | 29 | echo 30 | echo '--> Download & unpack the Qt source code' 31 | echo 32 | 33 | mkdir -p $root_dir/build/qt-src ; cd $root_dir/build/qt-src 34 | echo "$QT_SHA256 -" > sum.txt && curl -fLs "$QT_URL" | tee /tmp/qt.tar.xz | sha256sum -c sum.txt 35 | tar --strip-components 1 -xf /tmp/qt.tar.xz 36 | rm -f /tmp/qt.tar.xz 37 | 38 | echo 39 | echo '--> Build the Qt source code' 40 | echo 41 | 42 | mkdir -p $root_dir/build/qt-build ; cd $root_dir/build/qt-build 43 | # Config options useful doc: https://doc-snapshots.qt.io/qt6-dev/configure-options.html 44 | ../qt-src/configure -prefix "$QT_GCC_64" -nomake examples -nomake tests \ 45 | -no-feature-linguist -no-feature-designer \ 46 | -eventfd -inotify -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz 47 | cmake --build . --parallel 48 | ninja -j 16 install/strip 49 | 50 | echo 51 | echo '--> Restore the packages list to the original state' 52 | echo 53 | 54 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 55 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 56 | 57 | # Complete the cleaning 58 | 59 | cd /tmp 60 | rm -rf $root_dir/build 61 | apt -qq clean 62 | rm -rf /var/lib/apt/lists/* 63 | -------------------------------------------------------------------------------- /6.2-gcc-src/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.2-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.5" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.5" 8 | 9 | ARG QT_VERSION=6.2.3 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales clang genisoimage" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 18 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 19 | 20 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get osxcross 26 | RUN /tmp/get_osxcross.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.2-macos-aqt/get_osxcross.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$OSXCROSS_URL" ] || OSXCROSS_URL="https://github.com/tpoechtrager/osxcross/archive/be2b79f444aa0b43b8695a4fb7b920bf49ecc01c.tar.gz" 5 | [ "$OSXCROSS_SHA256" ] || OSXCROSS_SHA256=41f24fa591a1968a178aa2374323485466e99fff7660e88901eda6add5a1e7f0 6 | [ "$SDK_URL" ] || SDK_URL="https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.3.sdk.tar.xz" 7 | [ "$SDK_SHA256" ] || SDK_SHA256=cd4f08a75577145b8f05245a2975f7c81401d75e9535dcffbb879ee1deefcbf4 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install osxcross' 23 | echo 24 | 25 | apt install -y curl ca-certificates clang llvm-dev libxml2-dev uuid-dev libssl-dev cpio libbz2-dev make patch git zlib1g-dev 26 | 27 | echo 28 | echo '--> Download & install the osxcross and sdk' 29 | echo 30 | 31 | mkdir /tmp/osxcross 32 | cd /tmp/osxcross 33 | 34 | echo "$OSXCROSS_SHA256 -" > sum.txt && curl -fLs "$OSXCROSS_URL" | tee /tmp/osxcross.tar.gz | sha256sum -c sum.txt 35 | tar xf /tmp/osxcross.tar.gz --strip-components=1 36 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/osxcross/tarballs/$(basename "$SDK_URL") | sha256sum -c sum.txt 37 | 38 | # Build and place the osxcross 39 | export OUT_DIR=/opt/osxcross 40 | UNATTENDED=1 TARGET_DIR=$OUT_DIR ./build.sh 41 | 42 | # Create helper files 43 | mkdir -p /usr/local/bin 44 | cat - < /usr/local/bin/qt-cmake 45 | #!/bin/sh 46 | set -e 47 | 48 | # Set arch to "x86_64" or "aarch64" to build it 49 | [ "\$BUILD_ARCH" ] || BUILD_ARCH=x86_64 50 | 51 | eval "\$($OUT_DIR/bin/\$BUILD_ARCH-apple-*-osxcross-conf)" 52 | export OSXCROSS_HOST="\$BUILD_ARCH-apple-\$OSXCROSS_TARGET" 53 | export OSXCROSS_TOOLCHAIN_FILE="\$OSXCROSS_TARGET_DIR"/toolchain.cmake 54 | export CMAKE_TOOLCHAIN_FILE=\$QT_MACOS/lib/cmake/Qt6/qt.toolchain.cmake 55 | 56 | exec cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=\$OSXCROSS_TOOLCHAIN_FILE "\$@" 57 | EOF 58 | 59 | chmod +x /usr/local/bin/* 60 | 61 | # Required tools for macdeployqt, they will work for both architectures 62 | ln -s $OUT_DIR/bin/x86_64-apple-*-otool /usr/local/bin/otool 63 | ln -s $OUT_DIR/bin/x86_64-apple-*-install_name_tool /usr/local/bin/install_name_tool 64 | ln -s $OUT_DIR/bin/x86_64-apple-*-strip /usr/local/bin/strip 65 | 66 | echo 67 | echo '--> Restore the packages list to the original state' 68 | echo 69 | 70 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 71 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 72 | 73 | # Complete the cleaning 74 | 75 | apt -qq clean 76 | rm -rf /var/lib/apt/lists/* /tmp/osxcross* 77 | -------------------------------------------------------------------------------- /6.2-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.2-mingw-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-mingw-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # Just version "v2.0.5" for example 7 | ARG AQT_VERSION="2.0.5" 8 | 9 | ARG QT_VERSION=6.2.3 10 | ARG QT_PATH=C:\\Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="git openssh-client curl ca-certificates wine64" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | WINEDEBUG=-all 18 | 19 | COPY get_qt.sh install_packages.sh /tmp/ 20 | 21 | # Install required packages, add group & user + sudo 22 | RUN apt update && apt install -y --no-install-suggests --no-install-recommends locales sudo && \ 23 | sudo apt -qq clean && rm -rf /var/lib/apt/lists/* && \ 24 | groupadd -r user && useradd -m -g user user && \ 25 | echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 26 | 27 | # Reconfigure locale 28 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 29 | 30 | USER user 31 | WORKDIR /home/user 32 | ENV HOME /home/user 33 | 34 | # Get Qt binaries with aqt 35 | RUN /tmp/get_qt.sh 36 | 37 | # Install the required packages 38 | RUN /tmp/install_packages.sh 39 | -------------------------------------------------------------------------------- /6.2-mingw-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=2.0.5 5 | [ "$AQT_URL" ] || AQT_URL="https://github.com/miurahr/aqtinstall/releases/download/v$AQT_VERSION/aqt.exe" 6 | [ "$AQT_SHA256" ] || AQT_SHA256=5f618c6f7938523a75299226d34e02b17874859185c117e36895835f68590822 7 | [ "$QT_VERSION" ] || exit 1 8 | 9 | [ "$QT_PATH" ] || QT_PATH=C:\\Qt 10 | 11 | root_dir=$PWD 12 | [ "$root_dir" != '/' ] || root_dir="" 13 | 14 | # Init the package system 15 | sudo apt update 16 | 17 | echo 18 | echo '--> Save the original installed packages list' 19 | echo 20 | 21 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 22 | 23 | echo 24 | echo '--> Install the required packages to install Qt' 25 | echo 26 | 27 | sudo -E apt install -y --no-install-suggests --no-install-recommends curl ca-certificates wine64 28 | echo "$AQT_SHA256 -" > sum.txt && curl -fLs "$AQT_URL" | tee /tmp/aqt.exe | sha256sum -c sum.txt 29 | 30 | echo 31 | echo '--> Download & install the Qt library using aqt' 32 | echo 33 | 34 | sudo -E ln -s /usr/bin/wine64-stable /usr/local/bin/wine 35 | 36 | wine /tmp/aqt.exe install-qt -O "$QT_PATH" windows desktop "$QT_VERSION" win64_mingw 37 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_mingw90 38 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_cmake 39 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_ninja 40 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_openssl_x64 41 | 42 | echo 43 | echo '--> Set Qt and Tools PATH for wine' 44 | echo 45 | 46 | cat - < /tmp/path.reg 47 | Windows Registry Editor Version 5.00 48 | 49 | [HKEY_CURRENT_USER\\Environment] 50 | "Path"="$(find "/home/user/.wine/drive_c/Qt" -type d -name bin -o -name Ninja | sed "s|/home/user/.wine/drive_c|C:|" | sed 's|/|\\\\|g' | tr '\n' ';')" 51 | EOF 52 | 53 | wine regedit /tmp/path.reg 54 | 55 | echo 56 | echo '--> Create helper functions' 57 | echo 58 | 59 | cat - <<\EOF | sudo -E tee /usr/local/bin/qt-cmake 60 | #!/bin/sh 61 | wine cmd /c qt-cmake "$@" 62 | EOF 63 | 64 | cat - <<\EOF | sudo -E tee /usr/local/bin/cmake 65 | #!/bin/sh 66 | wine cmake "$@" 67 | EOF 68 | 69 | cat - <<\EOF | sudo -E tee /usr/local/bin/ninja 70 | #!/bin/sh 71 | wine ninja "$@" 72 | EOF 73 | 74 | cat - <<\EOF | sudo -E tee /usr/local/bin/windeployqt 75 | #!/bin/sh 76 | wine windeployqt "$@" 77 | EOF 78 | 79 | sudo -E chmod +x /usr/local/bin/* 80 | 81 | echo 82 | echo '--> Restore the packages list to the original state' 83 | echo 84 | 85 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 86 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs sudo -E apt remove -y --purge 87 | 88 | # Complete the cleaning 89 | 90 | sudo -E apt -qq clean 91 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/wine-* 92 | -------------------------------------------------------------------------------- /6.2-mingw-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='wine64' 4 | 5 | # Init package system 6 | sudo -E apt update 7 | 8 | echo 9 | echo '--> Install the additional packages' 10 | echo 11 | 12 | sudo -E apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 13 | 14 | # Complete the cleaning 15 | 16 | sudo -E apt -qq clean 17 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/* 18 | -------------------------------------------------------------------------------- /6.2-wasm-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.2-wasm-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.5" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.5" 8 | 9 | ARG QT_VERSION=6.2.3 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG SDK_PATH=/opt/emsdk 13 | 14 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales" 15 | 16 | ENV DEBIAN_FRONTEND=noninteractive \ 17 | DEBCONF_NONINTERACTIVE_SEEN=true \ 18 | QT_PATH=${QT_PATH} \ 19 | QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_32 \ 20 | EMSDK=${SDK_PATH} \ 21 | EMSDK_NODE=${SDK_PATH}/node/14.15.5_64bit/bin/node \ 22 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_32/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/14.15.5_64bit/bin:${SDK_PATH} 23 | 24 | COPY get_emsdk.sh get_qt.sh install_packages.sh /tmp/ 25 | 26 | # Install emscripten 27 | RUN /tmp/get_emsdk.sh 28 | 29 | # Get Qt binaries with aqt 30 | RUN /tmp/get_qt.sh 31 | 32 | # Install the required packages 33 | RUN /tmp/install_packages.sh 34 | 35 | # Reconfigure locale 36 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 37 | 38 | # Add group & user + sudo 39 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 40 | 41 | USER user 42 | WORKDIR /home/user 43 | ENV HOME /home/user 44 | -------------------------------------------------------------------------------- /6.2-wasm-aqt/get_emsdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get emscripten sdk 3 | 4 | [ "$SDK_VERSION" ] || SDK_VERSION=2.0.30 5 | [ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz" 6 | [ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36 7 | 8 | [ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install Android SDK & NDK' 24 | echo 25 | 26 | apt install -y curl python-is-python3 27 | 28 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt 29 | mkdir -p "$SDK_PATH" 30 | tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz 31 | rm -f /tmp/emsdk.tar.gz 32 | emsdk install "$SDK_VERSION" 33 | emsdk activate "$SDK_VERSION" 34 | 35 | echo 36 | echo '--> Restore the packages list to the original state' 37 | echo 38 | 39 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 40 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 41 | 42 | # Complete the cleaning 43 | 44 | cd /tmp 45 | rm -rf $root_dir/build 46 | apt -qq clean 47 | rm -rf /var/lib/apt/lists/* 48 | -------------------------------------------------------------------------------- /6.2-wasm-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_32 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | # Host Qt needed for cross-compilation 36 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 37 | 38 | pip3 freeze | xargs pip3 uninstall -y 39 | 40 | # Create qt-cmake wrapper to simplify the emsdk usage 41 | mkdir -p /usr/local/bin 42 | cat - <<\EOF > /usr/local/bin/qt-cmake 43 | #!/bin/sh -e 44 | 45 | export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake 46 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@" 47 | EOF 48 | 49 | chmod +x /usr/local/bin/* 50 | 51 | echo 52 | echo '--> Restore the packages list to the original state' 53 | echo 54 | 55 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 56 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 57 | 58 | # Complete the cleaning 59 | 60 | apt -qq clean 61 | rm -rf /var/lib/apt/lists/* 62 | -------------------------------------------------------------------------------- /6.2-wasm-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.3-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.3-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.6" 8 | 9 | ARG QT_VERSION=6.3.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-11-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=30 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.2 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=22.1.7171670 20 | 21 | ENV DEBIAN_FRONTEND=noninteractive \ 22 | DEBCONF_NONINTERACTIVE_SEEN=true \ 23 | QT_PATH=${QT_PATH} \ 24 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 25 | ANDROID_HOME=${SDK_PATH} \ 26 | ANDROID_SDK_ROOT=${SDK_PATH} \ 27 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 28 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 29 | ANDROID_NDK_HOST=linux-x86_64 \ 30 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 31 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 32 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/latest/bin:${SDK_PATH}/platform-tools 33 | 34 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 35 | 36 | # Get android sdk & ndk 37 | RUN /tmp/get_android.sh 38 | 39 | # Get Qt binaries with aqt 40 | RUN /tmp/get_qt.sh 41 | 42 | # Install the required packages 43 | RUN /tmp/install_packages.sh 44 | 45 | # Reconfigure locale 46 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 47 | 48 | # Add group & user + sudo 49 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 50 | 51 | USER user 52 | WORKDIR /home/user 53 | ENV HOME /home/user 54 | -------------------------------------------------------------------------------- /6.3-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;latest" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.3-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | for abi in armv7 arm64_v8a x86 x86_64; do 33 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 34 | done 35 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 36 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 37 | # Host Qt needed for cross-compilation 38 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.3-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.3-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.3-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.6" 8 | 9 | ARG QT_VERSION=6.3.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 18 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 19 | 20 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get linuxdeploy and build it 26 | RUN /tmp/get_linuxdeploy.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.3-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="4c5b9c5dafd14412f80088a09437585aaf2edef4" # Jan 12, 2022 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="ecde8a04cc061f17fbd58883411710dc7605c701" # Jan 11, 2022 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.3-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.3-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.3-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.3-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.6" 8 | 9 | ARG QT_VERSION=6.3.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales clang genisoimage" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 18 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 19 | 20 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get osxcross 26 | RUN /tmp/get_osxcross.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.3-macos-aqt/get_osxcross.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$OSXCROSS_URL" ] || OSXCROSS_URL="https://github.com/tpoechtrager/osxcross/archive/be2b79f444aa0b43b8695a4fb7b920bf49ecc01c.tar.gz" 5 | [ "$OSXCROSS_SHA256" ] || OSXCROSS_SHA256=41f24fa591a1968a178aa2374323485466e99fff7660e88901eda6add5a1e7f0 6 | [ "$SDK_URL" ] || SDK_URL="https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.3.sdk.tar.xz" 7 | [ "$SDK_SHA256" ] || SDK_SHA256=cd4f08a75577145b8f05245a2975f7c81401d75e9535dcffbb879ee1deefcbf4 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install osxcross' 23 | echo 24 | 25 | apt install -y curl ca-certificates clang llvm-dev libxml2-dev uuid-dev libssl-dev cpio libbz2-dev make patch git zlib1g-dev 26 | 27 | echo 28 | echo '--> Download & install the osxcross and sdk' 29 | echo 30 | 31 | mkdir /tmp/osxcross 32 | cd /tmp/osxcross 33 | 34 | echo "$OSXCROSS_SHA256 -" > sum.txt && curl -fLs "$OSXCROSS_URL" | tee /tmp/osxcross.tar.gz | sha256sum -c sum.txt 35 | tar xf /tmp/osxcross.tar.gz --strip-components=1 36 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/osxcross/tarballs/$(basename "$SDK_URL") | sha256sum -c sum.txt 37 | 38 | # Build and place the osxcross 39 | export OUT_DIR=/opt/osxcross 40 | UNATTENDED=1 TARGET_DIR=$OUT_DIR ./build.sh 41 | 42 | # Create helper files 43 | mkdir -p /usr/local/bin 44 | cat - < /usr/local/bin/qt-cmake 45 | #!/bin/sh 46 | set -e 47 | 48 | # Set arch to "x86_64" or "aarch64" to build it 49 | [ "\$BUILD_ARCH" ] || BUILD_ARCH=x86_64 50 | 51 | eval "\$($OUT_DIR/bin/\$BUILD_ARCH-apple-*-osxcross-conf)" 52 | export OSXCROSS_HOST="\$BUILD_ARCH-apple-\$OSXCROSS_TARGET" 53 | export OSXCROSS_TOOLCHAIN_FILE="\$OSXCROSS_TARGET_DIR"/toolchain.cmake 54 | export CMAKE_TOOLCHAIN_FILE=\$QT_MACOS/lib/cmake/Qt6/qt.toolchain.cmake 55 | 56 | exec cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=\$OSXCROSS_TOOLCHAIN_FILE "\$@" 57 | EOF 58 | 59 | chmod +x /usr/local/bin/* 60 | 61 | # Required tools for macdeployqt, they will work for both architectures 62 | ln -s $OUT_DIR/bin/x86_64-apple-*-otool /usr/local/bin/otool 63 | ln -s $OUT_DIR/bin/x86_64-apple-*-install_name_tool /usr/local/bin/install_name_tool 64 | ln -s $OUT_DIR/bin/x86_64-apple-*-strip /usr/local/bin/strip 65 | 66 | echo 67 | echo '--> Restore the packages list to the original state' 68 | echo 69 | 70 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 71 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 72 | 73 | # Complete the cleaning 74 | 75 | apt -qq clean 76 | rm -rf /var/lib/apt/lists/* /tmp/osxcross* 77 | -------------------------------------------------------------------------------- /6.3-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.3-mingw-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.3-mingw-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # Just version "v2.0.6" for example 7 | ARG AQT_VERSION="2.0.6" 8 | ARG AQT_SHA256="b0ad07fe8fd2c094425449f3053598959e467833dadf509da948571259510078" 9 | 10 | ARG QT_VERSION=6.3.0 11 | ARG QT_PATH=C:\\Qt 12 | 13 | ARG ADDITIONAL_PACKAGES="git openssh-client curl ca-certificates wine64" 14 | 15 | ENV DEBIAN_FRONTEND=noninteractive \ 16 | DEBCONF_NONINTERACTIVE_SEEN=true \ 17 | QT_PATH=${QT_PATH} \ 18 | WINEDEBUG=-all 19 | 20 | COPY get_qt.sh install_packages.sh /tmp/ 21 | 22 | # Install required packages, add group & user + sudo 23 | RUN apt update && apt install -y --no-install-suggests --no-install-recommends locales sudo && \ 24 | sudo apt -qq clean && rm -rf /var/lib/apt/lists/* && \ 25 | groupadd -r user && useradd -m -g user user && \ 26 | echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 27 | 28 | # Reconfigure locale 29 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 30 | 31 | USER user 32 | WORKDIR /home/user 33 | ENV HOME /home/user 34 | 35 | # Get Qt binaries with aqt 36 | RUN /tmp/get_qt.sh 37 | 38 | # Install the required packages 39 | RUN /tmp/install_packages.sh 40 | -------------------------------------------------------------------------------- /6.3-mingw-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=2.0.5 5 | [ "$AQT_URL" ] || AQT_URL="https://github.com/miurahr/aqtinstall/releases/download/v$AQT_VERSION/aqt.exe" 6 | [ "$AQT_SHA256" ] || AQT_SHA256=5f618c6f7938523a75299226d34e02b17874859185c117e36895835f68590822 7 | [ "$QT_VERSION" ] || exit 1 8 | 9 | [ "$QT_PATH" ] || QT_PATH=C:\\Qt 10 | 11 | root_dir=$PWD 12 | [ "$root_dir" != '/' ] || root_dir="" 13 | 14 | # Init the package system 15 | sudo apt update 16 | 17 | echo 18 | echo '--> Save the original installed packages list' 19 | echo 20 | 21 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 22 | 23 | echo 24 | echo '--> Install the required packages to install Qt' 25 | echo 26 | 27 | sudo -E apt install -y --no-install-suggests --no-install-recommends curl ca-certificates wine64 28 | echo "$AQT_SHA256 -" > sum.txt && curl -fLs "$AQT_URL" | tee /tmp/aqt.exe | sha256sum -c sum.txt 29 | 30 | echo 31 | echo '--> Download & install the Qt library using aqt' 32 | echo 33 | 34 | sudo -E ln -s /usr/bin/wine64-stable /usr/local/bin/wine 35 | 36 | wine /tmp/aqt.exe install-qt -O "$QT_PATH" windows desktop "$QT_VERSION" win64_mingw 37 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_mingw90 38 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_cmake 39 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_ninja 40 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_openssl_x64 41 | 42 | echo 43 | echo '--> Set Qt and Tools PATH for wine' 44 | echo 45 | 46 | cat - < /tmp/path.reg 47 | Windows Registry Editor Version 5.00 48 | 49 | [HKEY_CURRENT_USER\\Environment] 50 | "Path"="$(find "/home/user/.wine/drive_c/Qt" -type d -name bin -o -name Ninja | sed "s|/home/user/.wine/drive_c|C:|" | sed 's|/|\\\\|g' | tr '\n' ';')" 51 | EOF 52 | 53 | wine regedit /tmp/path.reg 54 | 55 | echo 56 | echo '--> Create helper functions' 57 | echo 58 | 59 | cat - <<\EOF | sudo -E tee /usr/local/bin/qt-cmake 60 | #!/bin/sh 61 | wine cmd /c qt-cmake "$@" 62 | EOF 63 | 64 | cat - <<\EOF | sudo -E tee /usr/local/bin/cmake 65 | #!/bin/sh 66 | wine cmake "$@" 67 | EOF 68 | 69 | cat - <<\EOF | sudo -E tee /usr/local/bin/ninja 70 | #!/bin/sh 71 | wine ninja "$@" 72 | EOF 73 | 74 | cat - <<\EOF | sudo -E tee /usr/local/bin/windeployqt 75 | #!/bin/sh 76 | wine windeployqt "$@" 77 | EOF 78 | 79 | sudo -E chmod +x /usr/local/bin/* 80 | 81 | echo 82 | echo '--> Restore the packages list to the original state' 83 | echo 84 | 85 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 86 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs sudo -E apt remove -y --purge 87 | 88 | # Complete the cleaning 89 | 90 | sudo -E apt -qq clean 91 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/wine-* 92 | -------------------------------------------------------------------------------- /6.3-mingw-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='wine64' 4 | 5 | # Init package system 6 | sudo -E apt update 7 | 8 | echo 9 | echo '--> Install the additional packages' 10 | echo 11 | 12 | sudo -E apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 13 | 14 | # Complete the cleaning 15 | 16 | sudo -E apt -qq clean 17 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/* 18 | -------------------------------------------------------------------------------- /6.3-wasm-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.3-wasm-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==2.0.6" 8 | 9 | ARG QT_VERSION=6.3.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG SDK_PATH=/opt/emsdk 13 | 14 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales" 15 | 16 | ENV DEBIAN_FRONTEND=noninteractive \ 17 | DEBCONF_NONINTERACTIVE_SEEN=true \ 18 | QT_PATH=${QT_PATH} \ 19 | QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_32 \ 20 | EMSDK=${SDK_PATH} \ 21 | EMSDK_NODE=${SDK_PATH}/node/14.15.5_64bit/bin/node \ 22 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_32/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/14.15.5_64bit/bin:${SDK_PATH} 23 | 24 | COPY get_emsdk.sh get_qt.sh install_packages.sh /tmp/ 25 | 26 | # Install emscripten 27 | RUN /tmp/get_emsdk.sh 28 | 29 | # Get Qt binaries with aqt 30 | RUN /tmp/get_qt.sh 31 | 32 | # Install the required packages 33 | RUN /tmp/install_packages.sh 34 | 35 | # Reconfigure locale 36 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 37 | 38 | # Add group & user + sudo 39 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 40 | 41 | USER user 42 | WORKDIR /home/user 43 | ENV HOME /home/user 44 | -------------------------------------------------------------------------------- /6.3-wasm-aqt/get_emsdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get emscripten sdk 3 | 4 | [ "$SDK_VERSION" ] || SDK_VERSION=2.0.30 5 | [ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz" 6 | [ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36 7 | 8 | [ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install Android SDK & NDK' 24 | echo 25 | 26 | apt install -y curl python-is-python3 27 | 28 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt 29 | mkdir -p "$SDK_PATH" 30 | tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz 31 | rm -f /tmp/emsdk.tar.gz 32 | emsdk install "$SDK_VERSION" 33 | emsdk activate "$SDK_VERSION" 34 | 35 | echo 36 | echo '--> Restore the packages list to the original state' 37 | echo 38 | 39 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 40 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 41 | 42 | # Complete the cleaning 43 | 44 | cd /tmp 45 | rm -rf $root_dir/build 46 | apt -qq clean 47 | rm -rf /var/lib/apt/lists/* 48 | -------------------------------------------------------------------------------- /6.3-wasm-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_32 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | # Host Qt needed for cross-compilation 36 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 37 | 38 | pip3 freeze | xargs pip3 uninstall -y 39 | 40 | # Create qt-cmake wrapper to simplify the emsdk usage 41 | mkdir -p /usr/local/bin 42 | cat - <<\EOF > /usr/local/bin/qt-cmake 43 | #!/bin/sh -e 44 | 45 | export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake 46 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@" 47 | EOF 48 | 49 | chmod +x /usr/local/bin/* 50 | 51 | echo 52 | echo '--> Restore the packages list to the original state' 53 | echo 54 | 55 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 56 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 57 | 58 | # Complete the cleaning 59 | 60 | apt -qq clean 61 | rm -rf /var/lib/apt/lists/* 62 | -------------------------------------------------------------------------------- /6.3-wasm-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.4-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.4-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.0.1" 8 | 9 | ARG QT_VERSION=6.4.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-11-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=30 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.3 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=22.1.7171670 20 | 21 | ENV DEBIAN_FRONTEND=noninteractive \ 22 | DEBCONF_NONINTERACTIVE_SEEN=true \ 23 | QT_PATH=${QT_PATH} \ 24 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 25 | ANDROID_HOME=${SDK_PATH} \ 26 | ANDROID_SDK_ROOT=${SDK_PATH} \ 27 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 28 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 29 | ANDROID_NDK_HOST=linux-x86_64 \ 30 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 31 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 32 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/latest/bin:${SDK_PATH}/platform-tools 33 | 34 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 35 | 36 | # Get android sdk & ndk 37 | RUN /tmp/get_android.sh 38 | 39 | # Get Qt binaries with aqt 40 | RUN /tmp/get_qt.sh 41 | 42 | # Install the required packages 43 | RUN /tmp/install_packages.sh 44 | 45 | # Reconfigure locale 46 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 47 | 48 | # Add group & user + sudo 49 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 50 | 51 | USER user 52 | WORKDIR /home/user 53 | ENV HOME /home/user 54 | -------------------------------------------------------------------------------- /6.4-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;latest" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.4-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | for abi in armv7 arm64_v8a x86 x86_64; do 33 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 34 | done 35 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 36 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 37 | # Host Qt needed for cross-compilation 38 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.4-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.4-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.4-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.0.1" 8 | 9 | ARG QT_VERSION=6.4.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 18 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 19 | 20 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get linuxdeploy and build it 26 | RUN /tmp/get_linuxdeploy.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.4-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="4c5b9c5dafd14412f80088a09437585aaf2edef4" # Jan 12, 2022 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="ecde8a04cc061f17fbd58883411710dc7605c701" # Jan 11, 2022 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.4-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.4-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.4-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.4-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.0.1" 8 | 9 | ARG QT_VERSION=6.4.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales clang genisoimage" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 18 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 19 | 20 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get osxcross 26 | RUN /tmp/get_osxcross.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.4-macos-aqt/get_osxcross.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$OSXCROSS_URL" ] || OSXCROSS_URL="https://github.com/tpoechtrager/osxcross/archive/be2b79f444aa0b43b8695a4fb7b920bf49ecc01c.tar.gz" 5 | [ "$OSXCROSS_SHA256" ] || OSXCROSS_SHA256=41f24fa591a1968a178aa2374323485466e99fff7660e88901eda6add5a1e7f0 6 | [ "$SDK_URL" ] || SDK_URL="https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.3.sdk.tar.xz" 7 | [ "$SDK_SHA256" ] || SDK_SHA256=cd4f08a75577145b8f05245a2975f7c81401d75e9535dcffbb879ee1deefcbf4 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install osxcross' 23 | echo 24 | 25 | apt install -y curl ca-certificates clang llvm-dev libxml2-dev uuid-dev libssl-dev cpio libbz2-dev make patch git zlib1g-dev 26 | 27 | echo 28 | echo '--> Download & install the osxcross and sdk' 29 | echo 30 | 31 | mkdir /tmp/osxcross 32 | cd /tmp/osxcross 33 | 34 | echo "$OSXCROSS_SHA256 -" > sum.txt && curl -fLs "$OSXCROSS_URL" | tee /tmp/osxcross.tar.gz | sha256sum -c sum.txt 35 | tar xf /tmp/osxcross.tar.gz --strip-components=1 36 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/osxcross/tarballs/$(basename "$SDK_URL") | sha256sum -c sum.txt 37 | 38 | # Build and place the osxcross 39 | export OUT_DIR=/opt/osxcross 40 | UNATTENDED=1 TARGET_DIR=$OUT_DIR ./build.sh 41 | 42 | # Create helper files 43 | mkdir -p /usr/local/bin 44 | cat - < /usr/local/bin/qt-cmake 45 | #!/bin/sh 46 | set -e 47 | 48 | # Set arch to "x86_64" or "aarch64" to build it 49 | [ "\$BUILD_ARCH" ] || BUILD_ARCH=x86_64 50 | 51 | eval "\$($OUT_DIR/bin/\$BUILD_ARCH-apple-*-osxcross-conf)" 52 | export OSXCROSS_HOST="\$BUILD_ARCH-apple-\$OSXCROSS_TARGET" 53 | export OSXCROSS_TOOLCHAIN_FILE="\$OSXCROSS_TARGET_DIR"/toolchain.cmake 54 | export CMAKE_TOOLCHAIN_FILE=\$QT_MACOS/lib/cmake/Qt6/qt.toolchain.cmake 55 | 56 | exec cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=\$OSXCROSS_TOOLCHAIN_FILE "\$@" 57 | EOF 58 | 59 | chmod +x /usr/local/bin/* 60 | 61 | # Required tools for macdeployqt, they will work for both architectures 62 | ln -s $OUT_DIR/bin/x86_64-apple-*-otool /usr/local/bin/otool 63 | ln -s $OUT_DIR/bin/x86_64-apple-*-install_name_tool /usr/local/bin/install_name_tool 64 | ln -s $OUT_DIR/bin/x86_64-apple-*-strip /usr/local/bin/strip 65 | 66 | echo 67 | echo '--> Restore the packages list to the original state' 68 | echo 69 | 70 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 71 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 72 | 73 | # Complete the cleaning 74 | 75 | apt -qq clean 76 | rm -rf /var/lib/apt/lists/* /tmp/osxcross* 77 | -------------------------------------------------------------------------------- /6.4-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.4-mingw-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.4-mingw-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # Just version "v2.0.6" for example 7 | ARG AQT_VERSION="2.0.6" 8 | ARG AQT_SHA256="b0ad07fe8fd2c094425449f3053598959e467833dadf509da948571259510078" 9 | 10 | ARG QT_VERSION=6.4.0 11 | ARG QT_PATH=C:\\Qt 12 | 13 | ARG ADDITIONAL_PACKAGES="git openssh-client curl ca-certificates wine64" 14 | 15 | ENV DEBIAN_FRONTEND=noninteractive \ 16 | DEBCONF_NONINTERACTIVE_SEEN=true \ 17 | QT_PATH=${QT_PATH} \ 18 | WINEDEBUG=-all 19 | 20 | COPY get_qt.sh install_packages.sh /tmp/ 21 | 22 | # Install required packages, add group & user + sudo 23 | RUN apt update && apt install -y --no-install-suggests --no-install-recommends locales sudo && \ 24 | sudo apt -qq clean && rm -rf /var/lib/apt/lists/* && \ 25 | groupadd -r user && useradd -m -g user user && \ 26 | echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 27 | 28 | # Reconfigure locale 29 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 30 | 31 | USER user 32 | WORKDIR /home/user 33 | ENV HOME /home/user 34 | 35 | # Get Qt binaries with aqt 36 | RUN /tmp/get_qt.sh 37 | 38 | # Install the required packages 39 | RUN /tmp/install_packages.sh 40 | -------------------------------------------------------------------------------- /6.4-mingw-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=2.0.5 5 | [ "$AQT_URL" ] || AQT_URL="https://github.com/miurahr/aqtinstall/releases/download/v$AQT_VERSION/aqt.exe" 6 | [ "$AQT_SHA256" ] || AQT_SHA256=5f618c6f7938523a75299226d34e02b17874859185c117e36895835f68590822 7 | [ "$QT_VERSION" ] || exit 1 8 | 9 | [ "$QT_PATH" ] || QT_PATH=C:\\Qt 10 | 11 | root_dir=$PWD 12 | [ "$root_dir" != '/' ] || root_dir="" 13 | 14 | # Init the package system 15 | sudo apt update 16 | 17 | echo 18 | echo '--> Save the original installed packages list' 19 | echo 20 | 21 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 22 | 23 | echo 24 | echo '--> Install the required packages to install Qt' 25 | echo 26 | 27 | sudo -E apt install -y --no-install-suggests --no-install-recommends curl ca-certificates wine64 28 | echo "$AQT_SHA256 -" > sum.txt && curl -fLs "$AQT_URL" | tee /tmp/aqt.exe | sha256sum -c sum.txt 29 | 30 | echo 31 | echo '--> Download & install the Qt library using aqt' 32 | echo 33 | 34 | sudo -E ln -s /usr/bin/wine64-stable /usr/local/bin/wine 35 | 36 | wine /tmp/aqt.exe install-qt -O "$QT_PATH" windows desktop "$QT_VERSION" win64_mingw 37 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_mingw90 38 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_cmake 39 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_ninja 40 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_openssl_x64 41 | 42 | echo 43 | echo '--> Set Qt and Tools PATH for wine' 44 | echo 45 | 46 | cat - < /tmp/path.reg 47 | Windows Registry Editor Version 5.00 48 | 49 | [HKEY_CURRENT_USER\\Environment] 50 | "Path"="$(find "/home/user/.wine/drive_c/Qt" -type d -name bin -o -name Ninja | sed "s|/home/user/.wine/drive_c|C:|" | sed 's|/|\\\\|g' | tr '\n' ';')" 51 | EOF 52 | 53 | wine regedit /tmp/path.reg 54 | 55 | echo 56 | echo '--> Create helper functions' 57 | echo 58 | 59 | cat - <<\EOF | sudo -E tee /usr/local/bin/qt-cmake 60 | #!/bin/sh 61 | wine cmd /c qt-cmake "$@" 62 | EOF 63 | 64 | cat - <<\EOF | sudo -E tee /usr/local/bin/cmake 65 | #!/bin/sh 66 | wine cmake "$@" 67 | EOF 68 | 69 | cat - <<\EOF | sudo -E tee /usr/local/bin/ninja 70 | #!/bin/sh 71 | wine ninja "$@" 72 | EOF 73 | 74 | cat - <<\EOF | sudo -E tee /usr/local/bin/windeployqt 75 | #!/bin/sh 76 | wine windeployqt "$@" 77 | EOF 78 | 79 | sudo -E chmod +x /usr/local/bin/* 80 | 81 | echo 82 | echo '--> Restore the packages list to the original state' 83 | echo 84 | 85 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 86 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs sudo -E apt remove -y --purge 87 | 88 | # Complete the cleaning 89 | 90 | sudo -E apt -qq clean 91 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/wine-* 92 | -------------------------------------------------------------------------------- /6.4-mingw-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='wine64' 4 | 5 | # Init package system 6 | sudo -E apt update 7 | 8 | echo 9 | echo '--> Install the additional packages' 10 | echo 11 | 12 | sudo -E apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 13 | 14 | # Complete the cleaning 15 | 16 | sudo -E apt -qq clean 17 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/* 18 | -------------------------------------------------------------------------------- /6.4-wasm-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.4-wasm-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.0.1" 8 | 9 | ARG QT_VERSION=6.4.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG SDK_PATH=/opt/emsdk 13 | ARG SDK_VERSION=3.1.23 14 | ARG SDK_SHA256=a2609fd97580e4e332acbf49b6cc363714982f06cb6970d54c9789df8e91381c 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_PATH=${QT_PATH} \ 21 | QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_32 \ 22 | EMSDK=${SDK_PATH} \ 23 | EMSDK_NODE=${SDK_PATH}/node/14.18.2_64bit/bin/node \ 24 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_32/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/14.18.2_64bit/bin:${SDK_PATH} 25 | 26 | COPY get_emsdk.sh get_qt.sh install_packages.sh /tmp/ 27 | 28 | # Install emscripten 29 | RUN /tmp/get_emsdk.sh 30 | 31 | # Get Qt binaries with aqt 32 | RUN /tmp/get_qt.sh 33 | 34 | # Install the required packages 35 | RUN /tmp/install_packages.sh 36 | 37 | # Reconfigure locale 38 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 39 | 40 | # Add group & user + sudo 41 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 42 | 43 | USER user 44 | WORKDIR /home/user 45 | ENV HOME /home/user 46 | -------------------------------------------------------------------------------- /6.4-wasm-aqt/get_emsdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get emscripten sdk 3 | 4 | [ "$SDK_VERSION" ] || SDK_VERSION=2.0.30 5 | [ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz" 6 | [ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36 7 | 8 | [ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install EmSDK' 24 | echo 25 | 26 | apt install -y curl python-is-python3 27 | 28 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt 29 | mkdir -p "$SDK_PATH" 30 | tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz 31 | rm -f /tmp/emsdk.tar.gz 32 | emsdk install "$SDK_VERSION" 33 | emsdk activate "$SDK_VERSION" 34 | 35 | # Make sure node tool exist 36 | ls "$EMSDK_NODE" 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | cd /tmp 48 | rm -rf $root_dir/build 49 | apt -qq clean 50 | rm -rf /var/lib/apt/lists/* 51 | -------------------------------------------------------------------------------- /6.4-wasm-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_32 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | # Host Qt needed for cross-compilation 36 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 37 | 38 | pip3 freeze | xargs pip3 uninstall -y 39 | 40 | # Create qt-cmake wrapper to simplify the emsdk usage 41 | mkdir -p /usr/local/bin 42 | cat - <<\EOF > /usr/local/bin/qt-cmake 43 | #!/bin/sh -e 44 | 45 | export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake 46 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@" 47 | EOF 48 | 49 | chmod +x /usr/local/bin/* 50 | 51 | echo 52 | echo '--> Restore the packages list to the original state' 53 | echo 54 | 55 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 56 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 57 | 58 | # Complete the cleaning 59 | 60 | apt -qq clean 61 | rm -rf /var/lib/apt/lists/* 62 | -------------------------------------------------------------------------------- /6.4-wasm-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.5-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.5-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.4" 8 | 9 | ARG QT_VERSION=6.5.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-11-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=31 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.0 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=25.1.8937393 20 | ARG SDK_CMDTOOLS_VERSION=10.0 21 | 22 | ENV DEBIAN_FRONTEND=noninteractive \ 23 | DEBCONF_NONINTERACTIVE_SEEN=true \ 24 | QT_PATH=${QT_PATH} \ 25 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 26 | ANDROID_HOME=${SDK_PATH} \ 27 | ANDROID_SDK_ROOT=${SDK_PATH} \ 28 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 29 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 30 | ANDROID_NDK_HOST=linux-x86_64 \ 31 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 32 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 33 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/${SDK_CMDTOOLS_VERSION}/bin:${SDK_PATH}/platform-tools 34 | 35 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 36 | 37 | # Get android sdk & ndk 38 | RUN /tmp/get_android.sh 39 | 40 | # Get Qt binaries with aqt 41 | RUN /tmp/get_qt.sh 42 | 43 | # Install the required packages 44 | RUN /tmp/install_packages.sh 45 | 46 | # Reconfigure locale 47 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 48 | 49 | # Add group & user + sudo 50 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 51 | 52 | USER user 53 | WORKDIR /home/user 54 | ENV HOME /home/user 55 | -------------------------------------------------------------------------------- /6.5-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;${SDK_CMDTOOLS_VERSION}" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.5-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | for abi in armv7 arm64_v8a x86 x86_64; do 33 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 34 | done 35 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 36 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 37 | # Host Qt needed for cross-compilation 38 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.5-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.5-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.5-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.4" 8 | 9 | ARG QT_VERSION=6.5.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 13 | 14 | ENV DEBIAN_FRONTEND=noninteractive \ 15 | DEBCONF_NONINTERACTIVE_SEEN=true \ 16 | QT_PATH=${QT_PATH} \ 17 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 18 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 19 | 20 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 21 | 22 | # Get Qt binaries with aqt 23 | RUN /tmp/get_qt.sh 24 | 25 | # Get linuxdeploy and build it 26 | RUN /tmp/get_linuxdeploy.sh 27 | 28 | # Install the required packages 29 | RUN /tmp/install_packages.sh 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | # Add group & user + sudo 35 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 36 | 37 | USER user 38 | WORKDIR /home/user 39 | ENV HOME /home/user 40 | -------------------------------------------------------------------------------- /6.5-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="4c5b9c5dafd14412f80088a09437585aaf2edef4" # Jan 12, 2022 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="ecde8a04cc061f17fbd58883411710dc7605c701" # Jan 11, 2022 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.5-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.5-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.5-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.5-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.5" 8 | ARG OSXCROSS_URL=https://github.com/tpoechtrager/osxcross/archive/50e86ebca7d14372febd0af8cd098705049161b9.tar.gz 9 | ARG OSXCROSS_SHA256=d0496d5874a3252c4df7ce24bd724e453f85c513505b970e039fd01638fc1ff7 10 | 11 | ARG QT_VERSION=6.5.0 12 | ARG QT_PATH=/opt/Qt 13 | 14 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales clang genisoimage" 15 | 16 | ENV DEBIAN_FRONTEND=noninteractive \ 17 | DEBCONF_NONINTERACTIVE_SEEN=true \ 18 | QT_PATH=${QT_PATH} \ 19 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 20 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 21 | 22 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 23 | 24 | # Get Qt binaries with aqt 25 | RUN /tmp/get_qt.sh 26 | 27 | # Get osxcross 28 | RUN /tmp/get_osxcross.sh 29 | 30 | # Install the required packages 31 | RUN /tmp/install_packages.sh 32 | 33 | # Reconfigure locale 34 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 35 | 36 | # Add group & user + sudo 37 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 38 | 39 | USER user 40 | WORKDIR /home/user 41 | ENV HOME /home/user 42 | -------------------------------------------------------------------------------- /6.5-macos-aqt/get_osxcross.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$OSXCROSS_URL" ] || OSXCROSS_URL="https://github.com/tpoechtrager/osxcross/archive/be2b79f444aa0b43b8695a4fb7b920bf49ecc01c.tar.gz" 5 | [ "$OSXCROSS_SHA256" ] || OSXCROSS_SHA256=41f24fa591a1968a178aa2374323485466e99fff7660e88901eda6add5a1e7f0 6 | [ "$SDK_URL" ] || SDK_URL="https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.3.sdk.tar.xz" 7 | [ "$SDK_SHA256" ] || SDK_SHA256=cd4f08a75577145b8f05245a2975f7c81401d75e9535dcffbb879ee1deefcbf4 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install osxcross' 23 | echo 24 | 25 | apt install -y curl ca-certificates clang llvm-dev libxml2-dev uuid-dev libssl-dev cpio libbz2-dev make patch git zlib1g-dev 26 | 27 | echo 28 | echo '--> Download & install the osxcross and sdk' 29 | echo 30 | 31 | mkdir /tmp/osxcross 32 | cd /tmp/osxcross 33 | 34 | echo "$OSXCROSS_SHA256 -" > sum.txt && curl -fLs "$OSXCROSS_URL" | tee /tmp/osxcross.tar.gz | sha256sum -c sum.txt 35 | tar xf /tmp/osxcross.tar.gz --strip-components=1 36 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/osxcross/tarballs/$(basename "$SDK_URL") | sha256sum -c sum.txt 37 | 38 | # Build and place the osxcross 39 | export OUT_DIR=/opt/osxcross 40 | UNATTENDED=1 TARGET_DIR=$OUT_DIR ./build.sh 41 | 42 | # Create helper files 43 | mkdir -p /usr/local/bin 44 | cat - < /usr/local/bin/qt-cmake 45 | #!/bin/sh 46 | set -e 47 | 48 | # Set arch to "x86_64" or "aarch64" to build it 49 | [ "\$BUILD_ARCH" ] || BUILD_ARCH=x86_64 50 | 51 | eval "\$($OUT_DIR/bin/\$BUILD_ARCH-apple-*-osxcross-conf)" 52 | export OSXCROSS_HOST="\$BUILD_ARCH-apple-\$OSXCROSS_TARGET" 53 | export OSXCROSS_TOOLCHAIN_FILE="\$OSXCROSS_TARGET_DIR"/toolchain.cmake 54 | export CMAKE_TOOLCHAIN_FILE=\$QT_MACOS/lib/cmake/Qt6/qt.toolchain.cmake 55 | 56 | exec cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=\$OSXCROSS_TOOLCHAIN_FILE "\$@" 57 | EOF 58 | 59 | chmod +x /usr/local/bin/* 60 | 61 | # Required tools for macdeployqt, they will work for both architectures 62 | ln -s $OUT_DIR/bin/x86_64-apple-*-otool /usr/local/bin/otool 63 | ln -s $OUT_DIR/bin/x86_64-apple-*-install_name_tool /usr/local/bin/install_name_tool 64 | ln -s $OUT_DIR/bin/x86_64-apple-*-strip /usr/local/bin/strip 65 | 66 | echo 67 | echo '--> Restore the packages list to the original state' 68 | echo 69 | 70 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 71 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 72 | 73 | # Complete the cleaning 74 | 75 | apt -qq clean 76 | rm -rf /var/lib/apt/lists/* /tmp/osxcross* 77 | -------------------------------------------------------------------------------- /6.5-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.5-mingw-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.5-mingw-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # Just version "v2.0.6" for example 7 | ARG AQT_VERSION=3.1.4 8 | ARG AQT_SHA256=5c5f3a7d76e90c67d5ceb1e278a8ea404a4902426ff3577b5e117203070c3e55 9 | 10 | ARG QT_VERSION=6.5.1 11 | ARG QT_PATH=C:\\Qt 12 | 13 | ARG ADDITIONAL_PACKAGES="git openssh-client curl ca-certificates wine64" 14 | 15 | ENV DEBIAN_FRONTEND=noninteractive \ 16 | DEBCONF_NONINTERACTIVE_SEEN=true \ 17 | QT_PATH=${QT_PATH} \ 18 | WINEDEBUG=-all 19 | 20 | COPY get_qt.sh install_packages.sh /tmp/ 21 | 22 | # Install required packages, add group & user + sudo 23 | RUN apt update && apt install -y --no-install-suggests --no-install-recommends locales sudo && \ 24 | sudo apt -qq clean && rm -rf /var/lib/apt/lists/* && \ 25 | groupadd -r user && useradd -m -g user user && \ 26 | echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 27 | 28 | # Reconfigure locale 29 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 30 | 31 | USER user 32 | WORKDIR /home/user 33 | ENV HOME /home/user 34 | 35 | # Get Qt binaries with aqt 36 | RUN /tmp/get_qt.sh 37 | 38 | # Install the required packages 39 | RUN /tmp/install_packages.sh 40 | -------------------------------------------------------------------------------- /6.5-mingw-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=2.0.5 5 | [ "$AQT_URL" ] || AQT_URL="https://github.com/miurahr/aqtinstall/releases/download/v$AQT_VERSION/aqt.exe" 6 | [ "$AQT_SHA256" ] || AQT_SHA256=5f618c6f7938523a75299226d34e02b17874859185c117e36895835f68590822 7 | [ "$QT_VERSION" ] || exit 1 8 | 9 | [ "$QT_PATH" ] || QT_PATH=C:\\Qt 10 | 11 | root_dir=$PWD 12 | [ "$root_dir" != '/' ] || root_dir="" 13 | 14 | # Init the package system 15 | sudo apt update 16 | 17 | echo 18 | echo '--> Save the original installed packages list' 19 | echo 20 | 21 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 22 | 23 | echo 24 | echo '--> Install the required packages to install Qt' 25 | echo 26 | 27 | sudo -E apt install -y --no-install-suggests --no-install-recommends curl ca-certificates wine64 28 | echo "$AQT_SHA256 -" > sum.txt && curl -fLs "$AQT_URL" | tee /tmp/aqt.exe | sha256sum -c sum.txt 29 | 30 | echo 31 | echo '--> Download & install the Qt library using aqt' 32 | echo 33 | 34 | sudo -E ln -s /usr/bin/wine64-stable /usr/local/bin/wine 35 | 36 | wine /tmp/aqt.exe install-qt -O "$QT_PATH" windows desktop "$QT_VERSION" win64_mingw 37 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_mingw90 38 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_cmake 39 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_ninja 40 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_openssl_x64 41 | 42 | echo 43 | echo '--> Set Qt and Tools PATH for wine' 44 | echo 45 | 46 | cat - < /tmp/path.reg 47 | Windows Registry Editor Version 5.00 48 | 49 | [HKEY_CURRENT_USER\\Environment] 50 | "Path"="$(find "/home/user/.wine/drive_c/Qt" -type d -name bin -o -name Ninja | sed "s|/home/user/.wine/drive_c|C:|" | sed 's|/|\\\\|g' | tr '\n' ';')" 51 | EOF 52 | 53 | wine regedit /tmp/path.reg 54 | 55 | echo 56 | echo '--> Create helper functions' 57 | echo 58 | 59 | cat - <<\EOF | sudo -E tee /usr/local/bin/qt-cmake 60 | #!/bin/sh 61 | wine cmd /c qt-cmake "$@" 62 | EOF 63 | 64 | cat - <<\EOF | sudo -E tee /usr/local/bin/cmake 65 | #!/bin/sh 66 | wine cmake "$@" 67 | EOF 68 | 69 | cat - <<\EOF | sudo -E tee /usr/local/bin/ninja 70 | #!/bin/sh 71 | wine ninja "$@" 72 | EOF 73 | 74 | cat - <<\EOF | sudo -E tee /usr/local/bin/windeployqt 75 | #!/bin/sh 76 | wine windeployqt "$@" 77 | EOF 78 | 79 | sudo -E chmod +x /usr/local/bin/* 80 | 81 | echo 82 | echo '--> Restore the packages list to the original state' 83 | echo 84 | 85 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 86 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs sudo -E apt remove -y --purge 87 | 88 | # Complete the cleaning 89 | 90 | sudo -E apt -qq clean 91 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/wine-* 92 | -------------------------------------------------------------------------------- /6.5-mingw-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='wine64' 4 | 5 | # Init package system 6 | sudo -E apt update 7 | 8 | echo 9 | echo '--> Install the additional packages' 10 | echo 11 | 12 | sudo -E apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 13 | 14 | # Complete the cleaning 15 | 16 | sudo -E apt -qq clean 17 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/* 18 | -------------------------------------------------------------------------------- /6.5-wasm-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.5-wasm-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.4" 8 | 9 | ARG QT_VERSION=6.5.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG SDK_PATH=/opt/emsdk 13 | ARG SDK_VERSION=3.1.25 14 | ARG SDK_SHA256=b8772e32043905b3af4b926f54ac7ca3faf5d5eb93105973c85c56ec60c832d5 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_PATH=${QT_PATH} \ 21 | QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_singlethread \ 22 | EMSDK=${SDK_PATH} \ 23 | EMSDK_NODE=${SDK_PATH}/node/14.18.2_64bit/bin/node \ 24 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_singlethread/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/14.18.2_64bit/bin:${SDK_PATH} 25 | 26 | COPY get_emsdk.sh get_qt.sh install_packages.sh /tmp/ 27 | 28 | # Install emscripten 29 | RUN /tmp/get_emsdk.sh 30 | 31 | # Get Qt binaries with aqt 32 | RUN /tmp/get_qt.sh 33 | 34 | # Install the required packages 35 | RUN /tmp/install_packages.sh 36 | 37 | # Reconfigure locale 38 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 39 | 40 | # Add group & user + sudo 41 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 42 | 43 | USER user 44 | WORKDIR /home/user 45 | ENV HOME /home/user 46 | -------------------------------------------------------------------------------- /6.5-wasm-aqt/get_emsdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get emscripten sdk 3 | 4 | [ "$SDK_VERSION" ] || SDK_VERSION=2.0.30 5 | [ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz" 6 | [ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36 7 | 8 | [ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install EmSDK' 24 | echo 25 | 26 | apt install -y curl python-is-python3 27 | 28 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt 29 | mkdir -p "$SDK_PATH" 30 | tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz 31 | rm -f /tmp/emsdk.tar.gz 32 | emsdk install "$SDK_VERSION" 33 | emsdk activate "$SDK_VERSION" 34 | 35 | # Make sure node tool exist 36 | ls "$EMSDK_NODE" 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | cd /tmp 48 | rm -rf $root_dir/build 49 | apt -qq clean 50 | rm -rf /var/lib/apt/lists/* 51 | -------------------------------------------------------------------------------- /6.5-wasm-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_singlethread 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | # Host Qt needed for cross-compilation 36 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 37 | 38 | pip3 freeze | xargs pip3 uninstall -y 39 | 40 | # Create qt-cmake wrapper to simplify the emsdk usage 41 | mkdir -p /usr/local/bin 42 | cat - <<\EOF > /usr/local/bin/qt-cmake 43 | #!/bin/sh -e 44 | 45 | export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake 46 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@" 47 | EOF 48 | 49 | chmod +x /usr/local/bin/* 50 | 51 | echo 52 | echo '--> Restore the packages list to the original state' 53 | echo 54 | 55 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 56 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 57 | 58 | # Complete the cleaning 59 | 60 | apt -qq clean 61 | rm -rf /var/lib/apt/lists/* 62 | -------------------------------------------------------------------------------- /6.5-wasm-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.6-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.6-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.7" 8 | 9 | ARG QT_VERSION=6.6.1 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-11-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=33 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.0 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=25.1.8937393 20 | ARG SDK_CMDTOOLS_VERSION=10.0 21 | 22 | ENV DEBIAN_FRONTEND=noninteractive \ 23 | DEBCONF_NONINTERACTIVE_SEEN=true \ 24 | QT_VERSION=${QT_VERSION} \ 25 | AQT_VERSION=${AQT_VERSION} \ 26 | QT_PATH=${QT_PATH} \ 27 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 28 | ANDROID_HOME=${SDK_PATH} \ 29 | ANDROID_SDK_ROOT=${SDK_PATH} \ 30 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 31 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 32 | ANDROID_NDK_HOST=linux-x86_64 \ 33 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 34 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 35 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/${SDK_CMDTOOLS_VERSION}/bin:${SDK_PATH}/platform-tools 36 | 37 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 38 | 39 | # Get android sdk & ndk 40 | RUN /tmp/get_android.sh 41 | 42 | # Get Qt binaries with aqt 43 | RUN /tmp/get_qt.sh 44 | 45 | # Install the required packages 46 | RUN /tmp/install_packages.sh 47 | 48 | # Reconfigure locale 49 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 50 | 51 | # Add group & user + sudo 52 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 53 | 54 | USER user 55 | WORKDIR /home/user 56 | ENV HOME /home/user 57 | -------------------------------------------------------------------------------- /6.6-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;${SDK_CMDTOOLS_VERSION}" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.6-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | for abi in armv7 arm64_v8a x86 x86_64; do 33 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 34 | done 35 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 36 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 37 | # Host Qt needed for cross-compilation 38 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.6-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.6-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.6-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.7" 8 | 9 | ARG QT_VERSION=6.6.1 10 | # ARG LINUXDEPLOY_COMMIT= # Jul 13, 2023 11 | # ARG LINUXDEPLOY_QT_COMMIT= # May 25, 2023 12 | ARG QT_PATH=/opt/Qt 13 | 14 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 15 | 16 | ENV DEBIAN_FRONTEND=noninteractive \ 17 | DEBCONF_NONINTERACTIVE_SEEN=true \ 18 | QT_VERSION=${QT_VERSION} \ 19 | AQT_VERSION=${AQT_VERSION} \ 20 | QT_PATH=${QT_PATH} \ 21 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 22 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 23 | 24 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 25 | 26 | # Get Qt binaries with aqt 27 | RUN /tmp/get_qt.sh 28 | 29 | # Get linuxdeploy and build it 30 | RUN /tmp/get_linuxdeploy.sh 31 | 32 | # Install the required packages 33 | RUN /tmp/install_packages.sh 34 | 35 | # Reconfigure locale 36 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 37 | 38 | # Add group & user + sudo 39 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 40 | 41 | USER user 42 | WORKDIR /home/user 43 | ENV HOME /home/user 44 | -------------------------------------------------------------------------------- /6.6-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install linuxdeploy with qt plugin 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="17ca786a2523a375617a8b274f70cef9c7189373" # Jul 13, 2023 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="9a388d32b1e95d8b69e201356f050137eb6c0aa3" # May 25, 2023 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.6-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.6-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.6-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.6-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.7" 8 | ARG OSXCROSS_URL=https://github.com/tpoechtrager/osxcross/archive/50e86ebca7d14372febd0af8cd098705049161b9.tar.gz 9 | ARG OSXCROSS_SHA256=d0496d5874a3252c4df7ce24bd724e453f85c513505b970e039fd01638fc1ff7 10 | 11 | ARG QT_VERSION=6.6.1 12 | ARG QT_PATH=/opt/Qt 13 | 14 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales clang genisoimage" 15 | 16 | ENV DEBIAN_FRONTEND=noninteractive \ 17 | DEBCONF_NONINTERACTIVE_SEEN=true \ 18 | QT_VERSION=${QT_VERSION} \ 19 | AQT_VERSION=${AQT_VERSION} \ 20 | QT_PATH=${QT_PATH} \ 21 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 22 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 23 | 24 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 25 | 26 | # Get Qt binaries with aqt 27 | RUN /tmp/get_qt.sh 28 | 29 | # Get osxcross 30 | RUN /tmp/get_osxcross.sh 31 | 32 | # Install the required packages 33 | RUN /tmp/install_packages.sh 34 | 35 | # Reconfigure locale 36 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 37 | 38 | # Add group & user + sudo 39 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 40 | 41 | USER user 42 | WORKDIR /home/user 43 | ENV HOME /home/user 44 | -------------------------------------------------------------------------------- /6.6-macos-aqt/get_osxcross.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$OSXCROSS_URL" ] || OSXCROSS_URL="https://github.com/tpoechtrager/osxcross/archive/5e1b71fcceb23952f3229995edca1b6231525b5b.tar.gz" # Sep 22, 2023 5 | [ "$OSXCROSS_SHA256" ] || OSXCROSS_SHA256=d3f771bbc20612fea577b18a71be3af2eb5ad2dd44624196cf55de866d008647 6 | [ "$SDK_URL" ] || SDK_URL="https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.3.sdk.tar.xz" 7 | [ "$SDK_SHA256" ] || SDK_SHA256=cd4f08a75577145b8f05245a2975f7c81401d75e9535dcffbb879ee1deefcbf4 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install osxcross' 23 | echo 24 | 25 | apt install -y curl ca-certificates clang llvm-dev libxml2-dev uuid-dev libssl-dev cpio libbz2-dev make patch git zlib1g-dev 26 | 27 | echo 28 | echo '--> Download & install the osxcross and sdk' 29 | echo 30 | 31 | mkdir /tmp/osxcross 32 | cd /tmp/osxcross 33 | 34 | echo "$OSXCROSS_SHA256 -" > sum.txt && curl -fLs "$OSXCROSS_URL" | tee /tmp/osxcross.tar.gz | sha256sum -c sum.txt 35 | tar xf /tmp/osxcross.tar.gz --strip-components=1 36 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/osxcross/tarballs/$(basename "$SDK_URL") | sha256sum -c sum.txt 37 | 38 | # Build and place the osxcross 39 | export OUT_DIR=/opt/osxcross 40 | UNATTENDED=1 TARGET_DIR=$OUT_DIR ./build.sh 41 | 42 | # Create helper files 43 | mkdir -p /usr/local/bin 44 | cat - < /usr/local/bin/qt-cmake 45 | #!/bin/sh 46 | set -e 47 | 48 | # Set arch to "x86_64" or "aarch64" to build it 49 | [ "\$BUILD_ARCH" ] || BUILD_ARCH=x86_64 50 | 51 | eval "\$($OUT_DIR/bin/\$BUILD_ARCH-apple-*-osxcross-conf)" 52 | export OSXCROSS_HOST="\$BUILD_ARCH-apple-\$OSXCROSS_TARGET" 53 | export OSXCROSS_TOOLCHAIN_FILE="\$OSXCROSS_TARGET_DIR"/toolchain.cmake 54 | export CMAKE_TOOLCHAIN_FILE=\$QT_MACOS/lib/cmake/Qt6/qt.toolchain.cmake 55 | 56 | exec cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=\$OSXCROSS_TOOLCHAIN_FILE "\$@" 57 | EOF 58 | 59 | chmod +x /usr/local/bin/* 60 | 61 | # Required tools for macdeployqt, they will work for both architectures 62 | ln -s $OUT_DIR/bin/x86_64-apple-*-otool /usr/local/bin/otool 63 | ln -s $OUT_DIR/bin/x86_64-apple-*-install_name_tool /usr/local/bin/install_name_tool 64 | ln -s $OUT_DIR/bin/x86_64-apple-*-strip /usr/local/bin/strip 65 | 66 | echo 67 | echo '--> Restore the packages list to the original state' 68 | echo 69 | 70 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 71 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 72 | 73 | # Complete the cleaning 74 | 75 | apt -qq clean 76 | rm -rf /var/lib/apt/lists/* /tmp/osxcross* 77 | -------------------------------------------------------------------------------- /6.6-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.6-mingw-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.6-mingw-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # Just version "v2.0.6" for example 7 | ARG AQT_VERSION=3.1.7 8 | ARG AQT_SHA256=b6ca0afb5e54e692b63a24e3db98bbac34927545e867c51ba71a4ea84eeae446 9 | 10 | ARG QT_VERSION=6.6.1 11 | ARG QT_PATH=C:\\Qt 12 | 13 | ARG ADDITIONAL_PACKAGES="git openssh-client curl ca-certificates wine64" 14 | 15 | ENV DEBIAN_FRONTEND=noninteractive \ 16 | DEBCONF_NONINTERACTIVE_SEEN=true \ 17 | QT_VERSION=${QT_VERSION} \ 18 | AQT_VERSION=${AQT_VERSION} \ 19 | AQT_SHA256=${AQT_SHA256} \ 20 | QT_PATH=${QT_PATH} \ 21 | WINEDEBUG=-all 22 | 23 | COPY get_qt.sh install_packages.sh /tmp/ 24 | 25 | # Install required packages, add group & user + sudo 26 | RUN apt update && apt install -y --no-install-suggests --no-install-recommends locales sudo && \ 27 | sudo apt -qq clean && rm -rf /var/lib/apt/lists/* && \ 28 | groupadd -r user && useradd -m -g user user && \ 29 | echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | USER user 35 | WORKDIR /home/user 36 | ENV HOME /home/user 37 | 38 | # Get Qt binaries with aqt 39 | RUN /tmp/get_qt.sh 40 | 41 | # Install the required packages 42 | RUN /tmp/install_packages.sh 43 | -------------------------------------------------------------------------------- /6.6-mingw-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=2.0.5 5 | [ "$AQT_URL" ] || AQT_URL="https://github.com/miurahr/aqtinstall/releases/download/v$AQT_VERSION/aqt.exe" 6 | [ "$AQT_SHA256" ] || AQT_SHA256=5f618c6f7938523a75299226d34e02b17874859185c117e36895835f68590822 7 | [ "$QT_VERSION" ] || exit 1 8 | 9 | [ "$QT_PATH" ] || QT_PATH=C:\\Qt 10 | 11 | root_dir=$PWD 12 | [ "$root_dir" != '/' ] || root_dir="" 13 | 14 | # Init the package system 15 | sudo apt update 16 | 17 | echo 18 | echo '--> Save the original installed packages list' 19 | echo 20 | 21 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 22 | 23 | echo 24 | echo '--> Install the required packages to install Qt' 25 | echo 26 | 27 | sudo -E apt install -y --no-install-suggests --no-install-recommends curl ca-certificates wine64 28 | echo "$AQT_SHA256 -" > sum.txt && curl -fLs "$AQT_URL" | tee /tmp/aqt.exe | sha256sum -c sum.txt 29 | 30 | echo 31 | echo '--> Download & install the Qt library using aqt' 32 | echo 33 | 34 | sudo -E ln -s /usr/bin/wine64-stable /usr/local/bin/wine 35 | 36 | wine /tmp/aqt.exe install-qt -O "$QT_PATH" windows desktop "$QT_VERSION" win64_mingw 37 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_mingw90 38 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_cmake 39 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_ninja 40 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_opensslv3_x64 41 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_vcredist 42 | 43 | echo 44 | echo '--> Set Qt and Tools PATH for wine' 45 | echo 46 | 47 | cat - < /tmp/path.reg 48 | Windows Registry Editor Version 5.00 49 | 50 | [HKEY_CURRENT_USER\\Environment] 51 | "Path"="$(find "/home/user/.wine/drive_c/Qt" -type d -name bin -o -name Ninja | sed "s|/home/user/.wine/drive_c|C:|" | sed 's|/|\\\\|g' | tr '\n' ';')" 52 | EOF 53 | 54 | wine regedit /tmp/path.reg 55 | 56 | echo 57 | echo '--> Create helper functions' 58 | echo 59 | 60 | cat - <<\EOF | sudo -E tee /usr/local/bin/qt-cmake 61 | #!/bin/sh 62 | wine cmd /c qt-cmake "$@" 63 | EOF 64 | 65 | cat - <<\EOF | sudo -E tee /usr/local/bin/cmake 66 | #!/bin/sh 67 | wine cmake "$@" 68 | EOF 69 | 70 | cat - <<\EOF | sudo -E tee /usr/local/bin/ninja 71 | #!/bin/sh 72 | wine ninja "$@" 73 | EOF 74 | 75 | cat - <<\EOF | sudo -E tee /usr/local/bin/windeployqt 76 | #!/bin/sh 77 | wine windeployqt "$@" 78 | EOF 79 | 80 | sudo -E chmod +x /usr/local/bin/* 81 | 82 | echo 83 | echo '--> Restore the packages list to the original state' 84 | echo 85 | 86 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 87 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs sudo -E apt remove -y --purge 88 | 89 | # Complete the cleaning 90 | 91 | sudo -E apt -qq clean 92 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/wine-* 93 | -------------------------------------------------------------------------------- /6.6-mingw-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='wine64' 4 | 5 | # Init package system 6 | sudo -E apt update 7 | 8 | echo 9 | echo '--> Install the additional packages' 10 | echo 11 | 12 | sudo -E apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 13 | 14 | # Complete the cleaning 15 | 16 | sudo -E apt -qq clean 17 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/* 18 | -------------------------------------------------------------------------------- /6.6-wasm-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.6-wasm-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.7" 8 | 9 | ARG QT_VERSION=6.6.1 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG SDK_PATH=/opt/emsdk 13 | ARG SDK_VERSION=3.1.37 14 | ARG SDK_SHA256=c3c80dfe82fb448751d1c48200e5143aeca0f0db1d021db4b63655a9d9470cd8 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_VERSION=${QT_VERSION} \ 21 | AQT_VERSION=${AQT_VERSION} \ 22 | QT_PATH=${QT_PATH} \ 23 | QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_singlethread \ 24 | EMSDK=${SDK_PATH} \ 25 | EMSDK_NODE=${SDK_PATH}/node/15.14.0_64bit/bin/node \ 26 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_singlethread/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/15.14.0_64bit/bin:${SDK_PATH} 27 | 28 | COPY get_emsdk.sh get_qt.sh install_packages.sh /tmp/ 29 | 30 | # Install emscripten 31 | RUN /tmp/get_emsdk.sh 32 | 33 | # Get Qt binaries with aqt 34 | RUN /tmp/get_qt.sh 35 | 36 | # Install the required packages 37 | RUN /tmp/install_packages.sh 38 | 39 | # Reconfigure locale 40 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 41 | 42 | # Add group & user + sudo 43 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 44 | 45 | USER user 46 | WORKDIR /home/user 47 | ENV HOME /home/user 48 | -------------------------------------------------------------------------------- /6.6-wasm-aqt/get_emsdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get emscripten sdk 3 | 4 | [ "$SDK_VERSION" ] || SDK_VERSION=2.0.30 5 | [ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz" 6 | [ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36 7 | 8 | [ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install EmSDK' 24 | echo 25 | 26 | apt install -y curl python-is-python3 27 | 28 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt 29 | mkdir -p "$SDK_PATH" 30 | tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz 31 | rm -f /tmp/emsdk.tar.gz 32 | emsdk install "$SDK_VERSION" 33 | emsdk activate "$SDK_VERSION" 34 | 35 | # Make sure node tool exist 36 | ls "$EMSDK_NODE" 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | cd /tmp 48 | rm -rf $root_dir/build 49 | apt -qq clean 50 | rm -rf /var/lib/apt/lists/* 51 | -------------------------------------------------------------------------------- /6.6-wasm-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_singlethread 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | # Host Qt needed for cross-compilation 36 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 37 | 38 | pip3 freeze | xargs pip3 uninstall -y 39 | 40 | # Create qt-cmake wrapper to simplify the emsdk usage 41 | mkdir -p /usr/local/bin 42 | cat - <<\EOF > /usr/local/bin/qt-cmake 43 | #!/bin/sh -e 44 | 45 | export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake 46 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@" 47 | EOF 48 | 49 | chmod +x /usr/local/bin/* 50 | 51 | echo 52 | echo '--> Restore the packages list to the original state' 53 | echo 54 | 55 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 56 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 57 | 58 | # Complete the cleaning 59 | 60 | apt -qq clean 61 | rm -rf /var/lib/apt/lists/* 62 | -------------------------------------------------------------------------------- /6.6-wasm-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.7-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.7-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.16" 8 | 9 | ARG QT_VERSION=6.7.1 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-17-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=34 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.0 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=26.1.10909125 20 | ARG SDK_CMDTOOLS_VERSION=10.0 21 | 22 | ENV DEBIAN_FRONTEND=noninteractive \ 23 | DEBCONF_NONINTERACTIVE_SEEN=true \ 24 | QT_VERSION=${QT_VERSION} \ 25 | AQT_VERSION=${AQT_VERSION} \ 26 | QT_PATH=${QT_PATH} \ 27 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 28 | ANDROID_HOME=${SDK_PATH} \ 29 | ANDROID_SDK_ROOT=${SDK_PATH} \ 30 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 31 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 32 | ANDROID_NDK_HOST=linux-x86_64 \ 33 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 34 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 35 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/${SDK_CMDTOOLS_VERSION}/bin:${SDK_PATH}/platform-tools 36 | 37 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 38 | 39 | # Get android sdk & ndk 40 | RUN /tmp/get_android.sh 41 | 42 | # Get Qt binaries with aqt 43 | RUN /tmp/get_qt.sh 44 | 45 | # Install the required packages 46 | RUN /tmp/install_packages.sh 47 | 48 | # Reconfigure locale 49 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 50 | 51 | # Add group & user + sudo 52 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 53 | 54 | USER user 55 | WORKDIR /home/user 56 | ENV HOME /home/user 57 | -------------------------------------------------------------------------------- /6.7-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;${SDK_CMDTOOLS_VERSION}" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.7-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | # Host Qt needed for cross-compilation 33 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" linux_gcc_64 34 | for abi in armv7 arm64_v8a x86 x86_64; do 35 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 36 | done 37 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 38 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.7-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.7-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.7-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.13" 8 | 9 | ARG QT_VERSION=6.7.0 10 | # LINUXDEPLOY_COMMIT Jan 3, 2024 11 | ARG LINUXDEPLOY_COMMIT=2b73a2173f8acfc0269e681bdb28ebf65b0b4b48 12 | # LINUXDEPLOY_QT_COMMIT Apr 25, 2024 13 | ARG LINUXDEPLOY_QT_COMMIT=0e7e8ce889c1105373e88e409ea555058673bb1e 14 | ARG QT_PATH=/opt/Qt 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_VERSION=${QT_VERSION} \ 21 | AQT_VERSION=${AQT_VERSION} \ 22 | QT_PATH=${QT_PATH} \ 23 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 24 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 25 | 26 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 27 | 28 | # Get Qt binaries with aqt 29 | RUN /tmp/get_qt.sh 30 | 31 | # Get linuxdeploy and build it 32 | RUN /tmp/get_linuxdeploy.sh 33 | 34 | # Install the required packages 35 | RUN /tmp/install_packages.sh 36 | 37 | # Reconfigure locale 38 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 39 | 40 | # Add group & user + sudo 41 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 42 | 43 | USER user 44 | WORKDIR /home/user 45 | ENV HOME /home/user 46 | -------------------------------------------------------------------------------- /6.7-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install linuxdeploy with qt plugin 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="17ca786a2523a375617a8b274f70cef9c7189373" # Jul 13, 2023 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="9a388d32b1e95d8b69e201356f050137eb6c0aa3" # May 25, 2023 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.7-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" linux_gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.7-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.7-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.7-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.13" 8 | ARG OSXCROSS_URL=https://github.com/tpoechtrager/osxcross/archive/ff8d100f3f026b4ffbe4ce96d8aac4ce06f1278b.tar.gz 9 | ARG OSXCROSS_SHA256=fe2880db44d0cd0fea9fd37b77743c32297f2832eb8bcbf49ea16182f1634ace 10 | ARG SDK_URL=https://github.com/alexey-lysiuk/macos-sdk/releases/download/12.3/MacOSX12.3.tar.xz 11 | ARG SDK_SHA256=91c03be5399be04d8f6b773da13045525e01298c1dfff273b4e1f1e904ee5484 12 | 13 | ARG QT_VERSION=6.7.0 14 | ARG QT_PATH=/opt/Qt 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales clang genisoimage" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_VERSION=${QT_VERSION} \ 21 | AQT_VERSION=${AQT_VERSION} \ 22 | QT_PATH=${QT_PATH} \ 23 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 24 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 25 | 26 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 27 | 28 | # Get Qt binaries with aqt 29 | RUN /tmp/get_qt.sh 30 | 31 | # Get osxcross 32 | RUN /tmp/get_osxcross.sh 33 | 34 | # Install the required packages 35 | RUN /tmp/install_packages.sh 36 | 37 | # Reconfigure locale 38 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 39 | 40 | # Add group & user + sudo 41 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 42 | 43 | USER user 44 | WORKDIR /home/user 45 | ENV HOME /home/user 46 | -------------------------------------------------------------------------------- /6.7-macos-aqt/get_osxcross.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install osxcross with SDK 3 | 4 | [ "$OSXCROSS_URL" ] || OSXCROSS_URL="https://github.com/tpoechtrager/osxcross/archive/5e1b71fcceb23952f3229995edca1b6231525b5b.tar.gz" # Sep 22, 2023 5 | [ "$OSXCROSS_SHA256" ] || OSXCROSS_SHA256=d3f771bbc20612fea577b18a71be3af2eb5ad2dd44624196cf55de866d008647 6 | [ "$SDK_URL" ] || SDK_URL="https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.3.sdk.tar.xz" 7 | [ "$SDK_SHA256" ] || SDK_SHA256=cd4f08a75577145b8f05245a2975f7c81401d75e9535dcffbb879ee1deefcbf4 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install osxcross' 23 | echo 24 | 25 | apt install -y curl ca-certificates clang llvm-dev libxml2-dev uuid-dev libssl-dev cpio libbz2-dev make patch git zlib1g-dev 26 | 27 | echo 28 | echo '--> Download & install the osxcross and sdk' 29 | echo 30 | 31 | mkdir /tmp/osxcross 32 | cd /tmp/osxcross 33 | 34 | echo "$OSXCROSS_SHA256 -" > sum.txt && curl -fLs "$OSXCROSS_URL" | tee /tmp/osxcross.tar.gz | sha256sum -c sum.txt 35 | tar xf /tmp/osxcross.tar.gz --strip-components=1 36 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/osxcross/tarballs/$(basename "$SDK_URL") | sha256sum -c sum.txt 37 | 38 | # Build and place the osxcross 39 | export OUT_DIR=/opt/osxcross 40 | UNATTENDED=1 TARGET_DIR=$OUT_DIR ./build.sh 41 | 42 | # Create helper files 43 | mkdir -p /usr/local/bin 44 | cat - < /usr/local/bin/qt-cmake 45 | #!/bin/sh 46 | set -e 47 | 48 | # Set arch to "x86_64" or "aarch64" to build it 49 | [ "\$BUILD_ARCH" ] || BUILD_ARCH=x86_64 50 | 51 | eval "\$($OUT_DIR/bin/\$BUILD_ARCH-apple-*-osxcross-conf)" 52 | export OSXCROSS_HOST="\$BUILD_ARCH-apple-\$OSXCROSS_TARGET" 53 | export OSXCROSS_TOOLCHAIN_FILE="\$OSXCROSS_TARGET_DIR"/toolchain.cmake 54 | export CMAKE_TOOLCHAIN_FILE=\$QT_MACOS/lib/cmake/Qt6/qt.toolchain.cmake 55 | 56 | exec cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=\$OSXCROSS_TOOLCHAIN_FILE "\$@" 57 | EOF 58 | 59 | chmod +x /usr/local/bin/* 60 | 61 | # Required tools for macdeployqt, they will work for both architectures 62 | ln -s $OUT_DIR/bin/x86_64-apple-*-otool /usr/local/bin/otool 63 | ln -s $OUT_DIR/bin/x86_64-apple-*-install_name_tool /usr/local/bin/install_name_tool 64 | ln -s $OUT_DIR/bin/x86_64-apple-*-strip /usr/local/bin/strip 65 | 66 | echo 67 | echo '--> Restore the packages list to the original state' 68 | echo 69 | 70 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 71 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 72 | 73 | # Complete the cleaning 74 | 75 | apt -qq clean 76 | rm -rf /var/lib/apt/lists/* /tmp/osxcross* 77 | -------------------------------------------------------------------------------- /6.7-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.7-mingw-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.7-mingw-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # Just version "2.0.6" for example 7 | ARG AQT_VERSION=3.1.14 8 | ARG AQT_SHA256=6c2d9dd85925b003b01990f781a7ead30945610a9048755e1f87496fff642df6 9 | 10 | ARG QT_VERSION=6.7.0 11 | ARG QT_PATH=C:\\Qt 12 | 13 | ARG ADDITIONAL_PACKAGES="git openssh-client curl ca-certificates wine64" 14 | 15 | ENV DEBIAN_FRONTEND=noninteractive \ 16 | DEBCONF_NONINTERACTIVE_SEEN=true \ 17 | QT_VERSION=${QT_VERSION} \ 18 | AQT_VERSION=${AQT_VERSION} \ 19 | AQT_SHA256=${AQT_SHA256} \ 20 | QT_PATH=${QT_PATH} \ 21 | WINEDEBUG=-all 22 | 23 | COPY get_qt.sh install_packages.sh /tmp/ 24 | 25 | # Install required packages, add group & user + sudo 26 | RUN apt update && apt install -y --no-install-suggests --no-install-recommends locales sudo && \ 27 | sudo apt -qq clean && rm -rf /var/lib/apt/lists/* && \ 28 | groupadd -r user && useradd -m -g user user && \ 29 | echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 30 | 31 | # Reconfigure locale 32 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 33 | 34 | USER user 35 | WORKDIR /home/user 36 | ENV HOME /home/user 37 | 38 | # Get Qt binaries with aqt 39 | RUN /tmp/get_qt.sh 40 | 41 | # Install the required packages 42 | RUN /tmp/install_packages.sh 43 | -------------------------------------------------------------------------------- /6.7-mingw-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=2.0.5 5 | [ "$AQT_URL" ] || AQT_URL="https://github.com/miurahr/aqtinstall/releases/download/v$AQT_VERSION/aqt.exe" 6 | [ "$AQT_SHA256" ] || AQT_SHA256=5f618c6f7938523a75299226d34e02b17874859185c117e36895835f68590822 7 | [ "$QT_VERSION" ] || exit 1 8 | 9 | [ "$QT_PATH" ] || QT_PATH=C:\\Qt 10 | 11 | root_dir=$PWD 12 | [ "$root_dir" != '/' ] || root_dir="" 13 | 14 | # Init the package system 15 | sudo apt update 16 | 17 | echo 18 | echo '--> Save the original installed packages list' 19 | echo 20 | 21 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 22 | 23 | echo 24 | echo '--> Install the required packages to install Qt' 25 | echo 26 | 27 | sudo -E apt install -y --no-install-suggests --no-install-recommends curl ca-certificates wine64 28 | echo "$AQT_SHA256 -" > sum.txt && curl -fLs "$AQT_URL" | tee /tmp/aqt.exe | sha256sum -c sum.txt 29 | 30 | echo 31 | echo '--> Download & install the Qt library using aqt' 32 | echo 33 | 34 | sudo -E ln -s /usr/bin/wine64-stable /usr/local/bin/wine 35 | 36 | wine /tmp/aqt.exe install-qt -O "$QT_PATH" windows desktop "$QT_VERSION" win64_mingw 37 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_mingw90 38 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_cmake 39 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_ninja 40 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_opensslv3_x64 41 | wine /tmp/aqt.exe install-tool -O "$QT_PATH" windows desktop tools_vcredist 42 | 43 | echo 44 | echo '--> Set Qt and Tools PATH for wine' 45 | echo 46 | 47 | cat - < /tmp/path.reg 48 | Windows Registry Editor Version 5.00 49 | 50 | [HKEY_CURRENT_USER\\Environment] 51 | "Path"="$(find "/home/user/.wine/drive_c/Qt" -type d -name bin -o -name Ninja | sed "s|/home/user/.wine/drive_c|C:|" | sed 's|/|\\\\|g' | tr '\n' ';')" 52 | EOF 53 | 54 | wine regedit /tmp/path.reg 55 | 56 | echo 57 | echo '--> Create helper functions' 58 | echo 59 | 60 | cat - <<\EOF | sudo -E tee /usr/local/bin/qt-cmake 61 | #!/bin/sh 62 | wine cmd /c qt-cmake "$@" 63 | EOF 64 | 65 | cat - <<\EOF | sudo -E tee /usr/local/bin/cmake 66 | #!/bin/sh 67 | wine cmake "$@" 68 | EOF 69 | 70 | cat - <<\EOF | sudo -E tee /usr/local/bin/ninja 71 | #!/bin/sh 72 | wine ninja "$@" 73 | EOF 74 | 75 | cat - <<\EOF | sudo -E tee /usr/local/bin/windeployqt 76 | #!/bin/sh 77 | wine windeployqt "$@" 78 | EOF 79 | 80 | sudo -E chmod +x /usr/local/bin/* 81 | 82 | echo 83 | echo '--> Restore the packages list to the original state' 84 | echo 85 | 86 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 87 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs sudo -E apt remove -y --purge 88 | 89 | # Complete the cleaning 90 | 91 | sudo -E apt -qq clean 92 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/wine-* 93 | -------------------------------------------------------------------------------- /6.7-mingw-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='wine64' 4 | 5 | # Init package system 6 | sudo -E apt update 7 | 8 | echo 9 | echo '--> Install the additional packages' 10 | echo 11 | 12 | sudo -E apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 13 | 14 | # Complete the cleaning 15 | 16 | sudo -E apt -qq clean 17 | sudo -E rm -rf /var/lib/apt/lists/* /tmp/* 18 | -------------------------------------------------------------------------------- /6.8-android-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.8-android-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.18" 8 | 9 | ARG QT_VERSION=6.8.0 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 openjdk-17-jdk-headless locales" 13 | 14 | ARG ANDROID_NATIVE_API_LEVEL=34 15 | ARG SDK_PLATFORM=android-${ANDROID_NATIVE_API_LEVEL} 16 | ARG SDK_PATH=/opt/android-sdk 17 | ARG SDK_BUILD_TOOLS=${ANDROID_NATIVE_API_LEVEL}.0.0 18 | ARG SDK_PACKAGES="platform-tools" 19 | ARG NDK_VERSION=26.1.10909125 20 | ARG SDK_CMDTOOLS_VERSION=10.0 21 | 22 | ENV DEBIAN_FRONTEND=noninteractive \ 23 | DEBCONF_NONINTERACTIVE_SEEN=true \ 24 | QT_VERSION=${QT_VERSION} \ 25 | AQT_VERSION=${AQT_VERSION} \ 26 | QT_PATH=${QT_PATH} \ 27 | QT_ANDROID=${QT_PATH}/${QT_VERSION}/android_arm64_v8a \ 28 | ANDROID_HOME=${SDK_PATH} \ 29 | ANDROID_SDK_ROOT=${SDK_PATH} \ 30 | ANDROID_SDK_BUILD_TOOLS=${SDK_BUILD_TOOLS} \ 31 | ANDROID_NDK_ROOT=${SDK_PATH}/ndk/${NDK_VERSION} \ 32 | ANDROID_NDK_HOST=linux-x86_64 \ 33 | ANDROID_NDK_PLATFORM=${SDK_PLATFORM} \ 34 | ANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ 35 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/android_arm64_v8a/bin:${SDK_PATH}/cmdline-tools/${SDK_CMDTOOLS_VERSION}/bin:${SDK_PATH}/platform-tools 36 | 37 | COPY get_android.sh get_qt.sh install_packages.sh /tmp/ 38 | 39 | # Get android sdk & ndk 40 | RUN /tmp/get_android.sh 41 | 42 | # Get Qt binaries with aqt 43 | RUN /tmp/get_qt.sh 44 | 45 | # Install the required packages 46 | RUN /tmp/install_packages.sh 47 | 48 | # Reconfigure locale 49 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 50 | 51 | # Add group & user + sudo 52 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 53 | 54 | USER user 55 | WORKDIR /home/user 56 | ENV HOME /home/user 57 | -------------------------------------------------------------------------------- /6.8-android-aqt/get_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get android sdk & ndk 3 | 4 | [ "$SDK_URL" ] || SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip" 5 | [ "$SDK_SHA256" ] || SDK_SHA256=124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf 6 | 7 | [ "$SDK_PATH" ] || SDK_PATH=/opt/android-sdk 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install Android SDK & NDK' 23 | echo 24 | 25 | apt install -y curl unzip openjdk-11-jdk-headless 26 | 27 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/sdk-tools.zip | sha256sum -c sum.txt 28 | unzip -q /tmp/sdk-tools.zip -d /tmp 29 | rm -f /tmp/sdk-tools.zip 30 | yes | /tmp/cmdline-tools/bin/sdkmanager --install --verbose --sdk_root="$SDK_PATH" "cmdline-tools;${SDK_CMDTOOLS_VERSION}" 31 | rm -rf /tmp/cmdline-tools 32 | sdkmanager --install --verbose "platforms;${SDK_PLATFORM}" "ndk;${NDK_VERSION}" "build-tools;${SDK_BUILD_TOOLS}" ${SDK_PACKAGES} 33 | 34 | echo 35 | echo '--> Restore the packages list to the original state' 36 | echo 37 | 38 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 39 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 40 | 41 | # Complete the cleaning 42 | 43 | cd /tmp 44 | rm -rf $root_dir/build 45 | apt -qq clean 46 | rm -rf /var/lib/apt/lists/* 47 | -------------------------------------------------------------------------------- /6.8-android-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | # Host Qt needed for cross-compilation 33 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" linux_gcc_64 34 | for abi in armv7 arm64_v8a x86 x86_64; do 35 | aqt install-qt -O "$QT_PATH" linux android "$QT_VERSION" "android_$abi" 36 | done 37 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 38 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 39 | 40 | pip3 freeze | xargs pip3 uninstall -y 41 | 42 | # Create qt-cmake wrapper to simplify the android sdk usage 43 | mkdir -p /usr/local/bin 44 | cat - <<\EOF > /usr/local/bin/qt-cmake 45 | #!/bin/sh -e 46 | 47 | # Set arch to "armv7", "arm64_v8a", "x86" or "x86_64" to build it 48 | [ "$BUILD_ARCH" ] || BUILD_ARCH=arm64_v8a 49 | 50 | export CMAKE_TOOLCHAIN_FILE=$(dirname "$QT_ANDROID")/android_$BUILD_ARCH/lib/cmake/Qt6/qt.toolchain.cmake 51 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_ANDROID")/gcc_64" "-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" "-DANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" "$@" 52 | EOF 53 | 54 | chmod +x /usr/local/bin/* 55 | 56 | echo 57 | echo '--> Restore the packages list to the original state' 58 | echo 59 | 60 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 61 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 62 | 63 | # Complete the cleaning 64 | 65 | apt -qq clean 66 | rm -rf /var/lib/apt/lists/* 67 | -------------------------------------------------------------------------------- /6.8-android-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.8-gcc-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.8-gcc-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.1.18" 8 | 9 | ARG QT_VERSION=6.8.0 10 | # LINUXDEPLOY_COMMIT Aug 7, 2024 11 | ARG LINUXDEPLOY_COMMIT=f6730d2fbacd9005dd9640ea517771f7597eec73 12 | # LINUXDEPLOY_QT_COMMIT Sep 19, 2024 13 | ARG LINUXDEPLOY_QT_COMMIT=70b466586a3a311d0319ff687c3d14bbd73373db 14 | ARG QT_PATH=/opt/Qt 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_VERSION=${QT_VERSION} \ 21 | AQT_VERSION=${AQT_VERSION} \ 22 | QT_PATH=${QT_PATH} \ 23 | QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \ 24 | PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH 25 | 26 | COPY get_qt.sh get_linuxdeploy.sh install_packages.sh /tmp/ 27 | 28 | # Get Qt binaries with aqt 29 | RUN /tmp/get_qt.sh 30 | 31 | # Get linuxdeploy and build it 32 | RUN /tmp/get_linuxdeploy.sh 33 | 34 | # Install the required packages 35 | RUN /tmp/install_packages.sh 36 | 37 | # Reconfigure locale 38 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 39 | 40 | # Add group & user + sudo 41 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 42 | 43 | USER user 44 | WORKDIR /home/user 45 | ENV HOME /home/user 46 | -------------------------------------------------------------------------------- /6.8-gcc-aqt/get_linuxdeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install linuxdeploy with qt plugin 3 | 4 | [ "$LINUXDEPLOY_GIT" ] || LINUXDEPLOY_GIT="https://github.com/linuxdeploy/linuxdeploy.git" 5 | [ "$LINUXDEPLOY_COMMIT" ] || LINUXDEPLOY_COMMIT="17ca786a2523a375617a8b274f70cef9c7189373" # Jul 13, 2023 6 | [ "$LINUXDEPLOY_QT_GIT" ] || LINUXDEPLOY_QT_GIT="https://github.com/linuxdeploy/linuxdeploy-plugin-qt.git" 7 | [ "$LINUXDEPLOY_QT_COMMIT" ] || LINUXDEPLOY_QT_COMMIT="9a388d32b1e95d8b69e201356f050137eb6c0aa3" # May 25, 2023 8 | 9 | # Init the package system 10 | apt update 11 | 12 | echo 13 | echo '--> Save the original installed packages list' 14 | echo 15 | 16 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 17 | 18 | echo 19 | echo '--> Install the required packages to install linuxdeploy' 20 | echo 21 | 22 | apt install -y git libboost-filesystem-dev libboost-regex-dev cimg-dev wget patchelf nlohmann-json3-dev build-essential 23 | 24 | echo 25 | echo '--> Download & install the linuxdeploy' 26 | echo 27 | 28 | git clone "$LINUXDEPLOY_GIT" /tmp/linuxdeploy 29 | git -C /tmp/linuxdeploy checkout "$LINUXDEPLOY_COMMIT" 30 | git -C /tmp/linuxdeploy submodule update --init --recursive 31 | git clone "$LINUXDEPLOY_QT_GIT" /tmp/linuxdeploy-plugin-qt 32 | git -C /tmp/linuxdeploy-plugin-qt checkout "$LINUXDEPLOY_QT_COMMIT" 33 | git -C /tmp/linuxdeploy-plugin-qt submodule update --init --recursive 34 | 35 | cmake /tmp/linuxdeploy -B /tmp/linuxdeploy-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 36 | cmake --build /tmp/linuxdeploy-build 37 | 38 | cmake /tmp/linuxdeploy-plugin-qt -B /tmp/linuxdeploy-plugin-qt-build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DUSE_CCACHE=OFF 39 | cmake --build /tmp/linuxdeploy-plugin-qt-build 40 | 41 | mkdir -p /usr/local/bin 42 | mv /tmp/linuxdeploy-build/bin/linuxdeploy /usr/local/bin 43 | mv /tmp/linuxdeploy-plugin-qt-build/bin/linuxdeploy-plugin-qt /usr/local/bin 44 | 45 | echo 46 | echo '--> Restore the packages list to the original state' 47 | echo 48 | 49 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 50 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 51 | 52 | # Complete the cleaning 53 | 54 | apt -qq clean 55 | rm -rf /var/lib/apt/lists/* /tmp/linuxdeploy* 56 | -------------------------------------------------------------------------------- /6.8-gcc-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip libglib2.0-0 26 | pip3 install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" linux_gcc_64 33 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 34 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 35 | 36 | pip3 freeze | xargs pip3 uninstall -y 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | apt -qq clean 48 | rm -rf /var/lib/apt/lists/* 49 | -------------------------------------------------------------------------------- /6.8-gcc-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.8-macos-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.8-macos-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.2.0" 8 | ARG OSXCROSS_URL=https://github.com/tpoechtrager/osxcross/archive/29fe6dd35522073c9df5800f8cd1feb4b9a993a8.tar.gz 9 | ARG OSXCROSS_SHA256=4f0e8280eb98425a3cf620dc2de8725ef6a1cc02e8ea03a846b58b871ead1806 10 | ARG SDK_URL=https://github.com/alexey-lysiuk/macos-sdk/releases/download/12.3/MacOSX12.3.tar.xz 11 | ARG SDK_SHA256=91c03be5399be04d8f6b773da13045525e01298c1dfff273b4e1f1e904ee5484 12 | 13 | ARG QT_VERSION=6.8.1 14 | ARG QT_PATH=/opt/Qt 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl build-essential python3 locales genisoimage" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_VERSION=${QT_VERSION} \ 21 | AQT_VERSION=${AQT_VERSION} \ 22 | QT_PATH=${QT_PATH} \ 23 | QT_MACOS=${QT_PATH}/${QT_VERSION}/macos \ 24 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/macos/bin:/opt/osxcross/bin 25 | 26 | COPY get_qt.sh get_osxcross.sh install_packages.sh /tmp/ 27 | 28 | # Get Qt binaries with aqt 29 | RUN /tmp/get_qt.sh 30 | 31 | # Get osxcross 32 | RUN /tmp/get_osxcross.sh 33 | 34 | # Install the required packages 35 | RUN /tmp/install_packages.sh 36 | 37 | # Reconfigure locale 38 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 39 | 40 | # Add group & user + sudo 41 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 42 | 43 | USER user 44 | WORKDIR /home/user 45 | ENV HOME /home/user 46 | -------------------------------------------------------------------------------- /6.8-macos-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local /opt -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.8-wasm-aqt/Dockerfile: -------------------------------------------------------------------------------- 1 | # Image: stateoftheartio/qt6:6.8-wasm-aqt 2 | 3 | FROM ubuntu:20.04 4 | MAINTAINER State Of The Art (@stateoftheartio) 5 | 6 | # PIP requirement like "aqtinstall==2.0.6" or url with egg file 7 | ARG AQT_VERSION="aqtinstall==3.2.0" 8 | 9 | ARG QT_VERSION=6.8.1 10 | ARG QT_PATH=/opt/Qt 11 | 12 | ARG SDK_PATH=/opt/emsdk 13 | ARG SDK_VERSION=3.1.56 14 | ARG SDK_SHA256=6df4b778f52e0e86c721cc6f97e7ad8fd6c842be2451e39f2bc528facb5d4cde 15 | 16 | ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales" 17 | 18 | ENV DEBIAN_FRONTEND=noninteractive \ 19 | DEBCONF_NONINTERACTIVE_SEEN=true \ 20 | QT_VERSION=${QT_VERSION} \ 21 | AQT_VERSION=${AQT_VERSION} \ 22 | QT_PATH=${QT_PATH} \ 23 | QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_singlethread \ 24 | EMSDK=${SDK_PATH} \ 25 | EMSDK_NODE=${SDK_PATH}/node/16.20.0_64bit/bin/node \ 26 | PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_singlethread/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/15.14.0_64bit/bin:${SDK_PATH} 27 | 28 | COPY get_emsdk.sh get_qt.sh install_packages.sh /tmp/ 29 | 30 | # Install emscripten 31 | RUN /tmp/get_emsdk.sh 32 | 33 | # Get Qt binaries with aqt 34 | RUN /tmp/get_qt.sh 35 | 36 | # Install the required packages 37 | RUN /tmp/install_packages.sh 38 | 39 | # Reconfigure locale 40 | RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales 41 | 42 | # Add group & user + sudo 43 | RUN groupadd -r user && useradd --create-home --gid user user && echo 'user ALL=NOPASSWD: ALL' > /etc/sudoers.d/user 44 | 45 | USER user 46 | WORKDIR /home/user 47 | ENV HOME /home/user 48 | -------------------------------------------------------------------------------- /6.8-wasm-aqt/get_emsdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to get emscripten sdk 3 | 4 | [ "$SDK_VERSION" ] || SDK_VERSION=2.0.30 5 | [ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz" 6 | [ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36 7 | 8 | [ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk 9 | 10 | root_dir=$PWD 11 | [ "$root_dir" != '/' ] || root_dir="" 12 | 13 | # Init the package system 14 | apt update 15 | 16 | echo 17 | echo '--> Save the original installed packages list' 18 | echo 19 | 20 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 21 | 22 | echo 23 | echo '--> Install EmSDK' 24 | echo 25 | 26 | apt install -y curl python-is-python3 27 | 28 | echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt 29 | mkdir -p "$SDK_PATH" 30 | tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz 31 | rm -f /tmp/emsdk.tar.gz 32 | emsdk install "$SDK_VERSION" 33 | emsdk activate "$SDK_VERSION" 34 | 35 | # Make sure node tool exist 36 | ls "$EMSDK_NODE" 37 | 38 | echo 39 | echo '--> Restore the packages list to the original state' 40 | echo 41 | 42 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 43 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 44 | 45 | # Complete the cleaning 46 | 47 | cd /tmp 48 | rm -rf $root_dir/build 49 | apt -qq clean 50 | rm -rf /var/lib/apt/lists/* 51 | -------------------------------------------------------------------------------- /6.8-wasm-aqt/get_qt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | # Script to install Qt 6 in docker container 3 | 4 | [ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall 5 | [ "$QT_VERSION" ] || exit 1 6 | 7 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 8 | 9 | root_dir=$PWD 10 | [ "$root_dir" != '/' ] || root_dir="" 11 | 12 | # Init the package system 13 | apt update 14 | 15 | echo 16 | echo '--> Save the original installed packages list' 17 | echo 18 | 19 | dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst 20 | 21 | echo 22 | echo '--> Install the required packages to install Qt' 23 | echo 24 | 25 | apt install -y git python3-pip python3.9 libglib2.0-0 26 | python3.9 -m pip install --no-cache-dir "$AQT_VERSION" 27 | 28 | echo 29 | echo '--> Download & install the Qt library using aqt' 30 | echo 31 | 32 | # Host Qt needed for cross-compilation 33 | aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" linux_gcc_64 34 | 35 | aqt install-qt -O "$QT_PATH" all_os wasm "$QT_VERSION" wasm_singlethread 36 | aqt install-tool -O "$QT_PATH" linux desktop tools_cmake 37 | aqt install-tool -O "$QT_PATH" linux desktop tools_ninja 38 | 39 | python3.9 -m pip freeze | xargs python3.9 -m pip uninstall -y 40 | 41 | # Create qt-cmake wrapper to simplify the emsdk usage 42 | mkdir -p /usr/local/bin 43 | cat - <<\EOF > /usr/local/bin/qt-cmake 44 | #!/bin/sh -e 45 | 46 | export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake 47 | exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@" 48 | EOF 49 | 50 | chmod +x /usr/local/bin/* 51 | 52 | echo 53 | echo '--> Restore the packages list to the original state' 54 | echo 55 | 56 | dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst 57 | grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge 58 | 59 | # Complete the cleaning 60 | 61 | apt -qq clean 62 | rm -rf /var/lib/apt/lists/* 63 | -------------------------------------------------------------------------------- /6.8-wasm-aqt/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | [ "$QT_PATH" ] || QT_PATH=/opt/Qt 4 | 5 | [ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build' 6 | 7 | # Init package system 8 | apt update 9 | 10 | echo 11 | echo '--> Locating the shared libs required for the installed tools' 12 | echo 13 | 14 | find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \ 15 | grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst 16 | 17 | echo 18 | echo '--> Locating packages to provide the required shared libs' 19 | echo 20 | 21 | apt install -y apt-file 22 | apt-file update 23 | 24 | while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst 25 | 26 | # TODO: Clean apt-file cache 27 | 28 | apt autoremove -y --purge apt-file 29 | 30 | echo 31 | echo '--> Install the found libraries' 32 | echo 33 | 34 | cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES 35 | 36 | # Complete the cleaning 37 | 38 | apt -qq clean 39 | rm -rf /var/lib/apt/lists/* 40 | -------------------------------------------------------------------------------- /6.8-wasm-aqt/quiki.conf: -------------------------------------------------------------------------------- 1 | /* QUIKI WEBSERVER CONFIGURATION */ 2 | 3 | 4 | /* directories-- */ 5 | 6 | @repo: .; /* set this variable to the absolute path of the quiki repository */ 7 | @server.dir.resource: [@repo]/resources; /* resource files that ship with quiki */ 8 | @server.dir.template: [@repo]/resources/webserver/templates; /* comma-separated template search paths */ 9 | @server.dir.wiki: [@repo]/wikis; /* where your site directories are located */ 10 | 11 | /* HTTP server bindings-- */ 12 | 13 | @server.http.bind: ; /* leave blank to listen on all available addresses */ 14 | @server.http.port: 3000; /* port number or "unix" to listen on UNIX socket */ 15 | 16 | 17 | /* pregeneration-- 18 | * 19 | * if enabled, quiki generates all pages and images at startup; then monitors for 20 | * changes as they occur. when disabled, quiki only generates content as it is requested 21 | * by clients. having this on makes pages load much faster. */ 22 | 23 | @server.enable.pregeneration; 24 | 25 | 26 | /* adminifier-- 27 | * 28 | * this is quiki's web based admin panel and editor. you can use a single instance to 29 | * manage all the sites on this quiki webserver. */ 30 | 31 | @adminifier.enable; /* whether to enable adminifier */ 32 | @adminifier.host: ; /* HTTP host for adminifier. leave blank to use all hosts */ 33 | @adminifier.root: /admin; /* HTTP root for adminifier. leave blank to use / */ 34 | 35 | 36 | /* WEBSITE CONFIGURATIONS -- 37 | * 38 | * you can configure any number of websites to be served by this quiki. 39 | * enable them with server.wiki.[shortname].enable, where [shortname] is the name of 40 | * the wiki's directory in server.dir.wiki */ 41 | 42 | @server.wiki.mywiki.enable; 43 | 44 | -------------------------------------------------------------------------------- /test/sample_projects/qt_console/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(qt_console VERSION 0.1 LANGUAGES CXX) 4 | 5 | set(CMAKE_AUTOUIC ON) 6 | set(CMAKE_AUTOMOC ON) 7 | set(CMAKE_AUTORCC ON) 8 | 9 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 10 | 11 | find_package(Qt6 6.2 COMPONENTS Core LinguistTools REQUIRED) 12 | 13 | qt_add_executable(qt_console 14 | main.cpp 15 | ) 16 | 17 | qt_add_translations(qt_console 18 | TS_FILES 19 | qt_console_ru_RU.ts 20 | ) 21 | 22 | target_link_libraries(qt_console 23 | PRIVATE Qt6::Core) 24 | -------------------------------------------------------------------------------- /test/sample_projects/qt_console/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | QCoreApplication a(argc, argv); 8 | 9 | QTranslator translator; 10 | const QStringList uiLanguages = QLocale::system().uiLanguages(); 11 | for (const QString &locale : uiLanguages) { 12 | const QString baseName = "qt_console_" + QLocale(locale).name(); 13 | if (translator.load(":/i18n/" + baseName)) { 14 | a.installTranslator(&translator); 15 | break; 16 | } 17 | } 18 | 19 | return a.exec(); 20 | } 21 | -------------------------------------------------------------------------------- /test/sample_projects/qt_console/qt_console_ru_RU.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /test/sample_projects/qt_quick/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(qt_quick VERSION 0.1 LANGUAGES CXX) 4 | 5 | set(CMAKE_AUTOMOC ON) 6 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 7 | 8 | find_package(Qt6 6.2 COMPONENTS Quick LinguistTools REQUIRED) 9 | 10 | qt_add_executable(appqt_quick 11 | main.cpp 12 | ) 13 | 14 | qt_add_translations(appqt_quick 15 | TS_FILES 16 | qt_quick_ru_RU.ts 17 | ) 18 | 19 | qt_add_qml_module(appqt_quick 20 | URI qt_quick 21 | VERSION 1.0 22 | QML_FILES main.qml 23 | ) 24 | 25 | set_target_properties(appqt_quick PROPERTIES 26 | MACOSX_BUNDLE TRUE 27 | MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com 28 | MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} 29 | MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} 30 | WIN32_EXECUTABLE TRUE 31 | ) 32 | 33 | target_compile_definitions(appqt_quick 34 | PRIVATE $<$,$>:QT_QML_DEBUG>) 35 | target_link_libraries(appqt_quick 36 | PRIVATE Qt6::Quick) 37 | -------------------------------------------------------------------------------- /test/sample_projects/qt_quick/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | #include 6 | 7 | int main(int argc, char *argv[]) 8 | { 9 | QGuiApplication app(argc, argv); 10 | 11 | QTranslator translator; 12 | const QStringList uiLanguages = QLocale::system().uiLanguages(); 13 | for (const QString &locale : uiLanguages) { 14 | const QString baseName = "qt_quick_" + QLocale(locale).name(); 15 | if (translator.load(":/i18n/" + baseName)) { 16 | app.installTranslator(&translator); 17 | break; 18 | } 19 | } 20 | 21 | QQmlApplicationEngine engine; 22 | const QUrl url(u"qrc:/qt_quick/main.qml"_qs); 23 | QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, 24 | &app, [url](QObject *obj, const QUrl &objUrl) { 25 | if (!obj && url == objUrl) 26 | QCoreApplication::exit(-1); 27 | }, Qt::QueuedConnection); 28 | engine.load(url); 29 | 30 | return app.exec(); 31 | } 32 | -------------------------------------------------------------------------------- /test/sample_projects/qt_quick/main.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | 3 | Window { 4 | width: 640 5 | height: 480 6 | visible: true 7 | title: qsTr("Hello World") 8 | } 9 | -------------------------------------------------------------------------------- /test/sample_projects/qt_quick/qt_quick_ru_RU.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /test/sample_projects/qt_widgets/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(qt_widgets VERSION 0.1 LANGUAGES CXX) 4 | 5 | set(CMAKE_AUTOUIC ON) 6 | set(CMAKE_AUTOMOC ON) 7 | set(CMAKE_AUTORCC ON) 8 | 9 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 10 | 11 | find_package(Qt6 6.2 COMPONENTS Widgets LinguistTools REQUIRED) 12 | 13 | qt_add_executable(appqt_widgets 14 | main.cpp 15 | mainwindow.cpp 16 | mainwindow.h 17 | mainwindow.ui 18 | ) 19 | 20 | qt_add_translations(appqt_widgets 21 | TS_FILES 22 | qt_widgets_ru_RU.ts 23 | ) 24 | 25 | set_target_properties(appqt_widgets PROPERTIES 26 | MACOSX_BUNDLE TRUE 27 | MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com 28 | MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} 29 | MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} 30 | WIN32_EXECUTABLE TRUE 31 | ) 32 | 33 | target_link_libraries(appqt_widgets 34 | PRIVATE Qt6::Widgets) 35 | -------------------------------------------------------------------------------- /test/sample_projects/qt_widgets/main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | int main(int argc, char *argv[]) 8 | { 9 | QApplication a(argc, argv); 10 | 11 | QTranslator translator; 12 | const QStringList uiLanguages = QLocale::system().uiLanguages(); 13 | for (const QString &locale : uiLanguages) { 14 | const QString baseName = "qt_widgets_" + QLocale(locale).name(); 15 | if (translator.load(":/i18n/" + baseName)) { 16 | a.installTranslator(&translator); 17 | break; 18 | } 19 | } 20 | MainWindow w; 21 | w.show(); 22 | return a.exec(); 23 | } 24 | -------------------------------------------------------------------------------- /test/sample_projects/qt_widgets/mainwindow.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include "./ui_mainwindow.h" 3 | 4 | MainWindow::MainWindow(QWidget *parent) 5 | : QMainWindow(parent) 6 | , ui(new Ui::MainWindow) 7 | { 8 | ui->setupUi(this); 9 | } 10 | 11 | MainWindow::~MainWindow() 12 | { 13 | delete ui; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/sample_projects/qt_widgets/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | 6 | QT_BEGIN_NAMESPACE 7 | namespace Ui { class MainWindow; } 8 | QT_END_NAMESPACE 9 | 10 | class MainWindow : public QMainWindow 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | MainWindow(QWidget *parent = nullptr); 16 | ~MainWindow(); 17 | 18 | private: 19 | Ui::MainWindow *ui; 20 | }; 21 | #endif // MAINWINDOW_H 22 | -------------------------------------------------------------------------------- /test/sample_projects/qt_widgets/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 600 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /test/sample_projects/qt_widgets/qt_widgets_ru_RU.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | MainWindow 6 | 7 | 8 | MainWindow 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /test/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Script runs the containers to test them over example projects 3 | 4 | test_dir="$(dirname "$0")" 5 | IMAGES="$@" 6 | if [ "x$IMAGES" = 'x' ]; then 7 | # Use latest images 8 | version=$(find "$test_dir/.." -name "*-aqt" -printf "%f\n" | sort -n | tail -1 | cut -d- -f 1) 9 | IMAGES=$(find "$test_dir/.." -name "$version-*-aqt" -printf "%f\n") 10 | fi 11 | 12 | echo 'Running tests for:' 13 | echo "$IMAGES" 14 | echo 15 | 16 | errors=0 17 | 18 | for image in $IMAGES; do 19 | for src in $(find "$(cd "$test_dir"; pwd)/sample_projects" -mindepth 1 -maxdepth 1 -type d); do 20 | project="$(basename "$src")" 21 | 22 | cmd= 23 | 24 | # Install deps for non-console apps on gcc 25 | if [ "$(echo "$image" | grep 'gcc-')" -a -z "$(echo "$project" | grep 'console')" ]; then 26 | cmd='sudo apt update ; sudo apt install -y libgl-dev;' 27 | fi 28 | cmd="$cmd qt-cmake ./project -G Ninja -B ./build; cmake --build ./build;" 29 | 30 | archs= 31 | if echo "$image" | grep -q 'gcc-'; then 32 | cmd="$cmd "'linuxdeploy --plugin qt -e "$(find ./build -maxdepth 1 -type f -executable)" --appdir ./build/deploy;' 33 | fi 34 | if echo "$image" | grep -q 'android-'; then 35 | # Skip console build for android 36 | [ "x$(echo "$project" | grep 'console')" = 'x' ] || continue 37 | archs="armv7 x86 x86_64" 38 | fi 39 | if echo "$image" | grep -q 'mingw-'; then 40 | cmd="$cmd windeployqt --qmldir ./project --dir build/deploy --libdir build/deploy/libs --plugindir build/deploy/plugins build/*.exe;" 41 | fi 42 | if echo "$image" | grep -q 'macos-'; then 43 | # Deploy only GUI apps since there will be no .app bundle for console project 44 | if [ "x$(echo "$project" | grep 'console')" = 'x' ]; then 45 | cmd="$cmd macdeployqt ./build/*.app -verbose=1 -dmg -qmldir=./project;" 46 | fi 47 | archs="aarch64" 48 | fi 49 | cmd="$cmd ls -alh build;" 50 | 51 | for arch in '' $archs; do 52 | logfile="$test_dir/logs/${image}_${project}_$arch.log" 53 | mkdir -p $(dirname "$logfile") 54 | echo -n "Running $image $project $arch...\t" 55 | docker run -it --rm -v "$src:/home/user/project:ro" stateoftheartio/qt6:$image \ 56 | sh -xec "BUILD_ARCH=$arch $cmd" > "$logfile" 2>&1 57 | if [ "$?" -eq 0 ]; then 58 | echo "SUCCESS" 59 | else 60 | echo "FAIL - $logfile" 61 | errors=$(($errors+1)) 62 | fi 63 | done 64 | done 65 | done 66 | 67 | exit $errors 68 | --------------------------------------------------------------------------------