Qt 5 static build scripts

From Moondust Wiki
Revision as of 00:46, 19 May 2020 by Wohlstand (talk | contribs) (→‎= Qt 5.14.2: Embed patch applying into the script)
Jump to navigation Jump to search

This is a set of scripts to download and build static Qt assembly for purpose to use them on CI

Linux

= Qt 5.14.2

Notice Important note: Qt 5.13.x, 5.14.0, 5.14.1, and 5.14.2 has a bug which will cause all your CMake projects to fail the configure to find the "Qt5::Zlib" module. To fix this annoying bug, you need to modify the "qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in" file and apply this patch before to configure the Qt.
#!/bin/bash

QtVer=5.14.2
OldDir=$PWD
ArName=qt-everywhere-src-5.14.2.tar.xz
DirName=qt-everywhere-src-5.14.2

if [[ ! -f $ArName ]]; then
    echo "Downloading..."
    wget http://download.qt.io/official_releases/qt/5.14/5.14.2/single/qt-everywhere-src-5.14.2.tar.xz
fi

if [[ ! -d $DirName ]]; then
# Apply the patch to the buggy Qt 5.14.2
    echo "Dumping a patch..."
    cat <<EOF >qt051402-zlib-fix.diff
--- qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
+++ qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
@@ -406,8 +406,12 @@
 !!ENDIF
     endif()

+!!IF equals(TEMPLATE, aux)
+    add_library(Qt5::$${CMAKE_MODULE_NAME} INTERFACE IMPORTED)
+!!ELSE
     add_library(Qt5::$${CMAKE_MODULE_NAME} STATIC IMPORTED)
     set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} PROPERTY IMPORTED_LINK_INTERFACE_LANGUAGES "CXX")
+!!ENDIF
 !!ELSE
 !!IF equals(TEMPLATE, aux)
     add_library(Qt5::$${CMAKE_MODULE_NAME} INTERFACE IMPORTED)
EOF
    echo "Unpacking..."
    tar -xf $ArName
    cd $DirName
    echo "Applying a patch..."
    patch qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in ../qt051402-zlib-fix.diff
    cd ..
fi

echo "Creating /home/runner/Qt (needs root)..."
if [ ! -d /home/runner/Qt ]; then
    MyUsername=$(whoami)
    sudo mkdir -p /home/runner/Qt
    sudo chown -R $MyUsername /home/runner
fi

cd $DirName

./configure -static -release -silent -c++std c++14 \
-prefix "/home/runner/Qt/${QtVer}_static" \
-opensource -confirm-license -opengl \
-nomake examples \
-skip qt3d \
-skip activeqt \
-skip canvas3d \
-skip charts \
-skip connectivity \
-skip datavis3d \
-skip gamepad \
-skip location \
-skip purchasing \
-skip serialbus \
-skip serialport \
-skip qtserialport \
-skip script \
-skip scxml \
-skip speech \
-skip sensors \
-skip virtualkeyboard \
-skip wayland \
-skip webengine \
-skip webchannel \
-skip webglplugin \
-skip websockets \
-skip webview \
-qt-xcb \
-qt-libpng -no-libjpeg -qt-zlib -qt-pcre -gtk -qt-harfbuzz -system-freetype -fontconfig \
-pulseaudio -alsa

make -j 4
make install

cd /home/runner/Qt/
tar -cjf qt-$QtVer-static-ubuntu-14-04-x64-gcc6.tar.bz2 "${QtVer}_static"

cd $OldDir

echo "Everything has been completed!"

= Qt 5.10.1

#!/bin/bash

QtVer=5.10.1
OldDir=$PWD
ArName=qt-everywhere-src-5.10.1.tar.xz
DirName=qt-everywhere-src-5.10.1

if [ ! -f $ArName ]; then
    echo "Downloading..."
    wget http://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz
fi

if [ ! -d $DirName ]; then
    echo "Unpacking..."
    tar -xf $ArName
fi

echo "Creating /home/runner/Qt (needs root)..."
if [ ! -d /home/runner/Qt ]; then
    MyUsername=$(whoami)
    sudo mkdir -p /home/runner/Qt
    sudo chown -R $MyUsername /home/runner
fi

cd $DirName

./configure -static -release -silent -c++std c++14 \
-prefix "/home/runner/Qt/${QtVer}_static" \
-opensource -confirm-license -opengl \
-nomake examples \
-skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech -skip qt3d \
-qt-xcb -qt-libpng -no-libjpeg -qt-zlib -qt-pcre -gtk -qt-harfbuzz -qt-freetype -fontconfig \
-pulseaudio -alsa

make -j 4
make install

cd /home/runner/Qt/
tar -cjf qt-$QtVer-static-ubuntu-14-04-x64-gcc6.tar.bz2 "${QtVer}_static"

cd $OldDir

echo "Everything has been completed!"

Mac OS X

Qt 5.12.4

#!/bin/bash

QtVer=5.12.4
OldDir=$PWD
ArName=qt-everywhere-src-5.12.4.tar.xz
DirName=qt-everywhere-src-5.12.4

MacVer=$(sw_vers -productVersion)
MacArVer=${MacVer//\./\-}
QtArVer=${QtVer//\./\-}

if [[ ! -f $ArName ]]; then
    echo "Downloading..."
    qqqurl="http://download.qt.io/archive/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz"
    wget ${qqqurl}
    # axel -a -n 10 ${qqqurl}
fi

if [[ ! -d $DirName ]]; then
    echo "Unpacking..."
    tar -xf $ArName
fi

echo "Creating /Users/StaticQt (needs root)..."
if [[ ! -d /Users/StaticQt ]]; then
    MyUsername=$(whoami)
    sudo mkdir -p /Users/StaticQt
    sudo chmod -R $MyUsername /Users/StaticQt
fi

cd $DirName

./configure \
    -static -release -silent \
    \
    -prefix /Users/StaticQt/$QtVer \
    -opensource -confirm-license -opengl \
    -nomake examples \
    \
    -skip qt3d \
    -skip activeqt \
    -skip canvas3d \
    -skip charts \
    -skip connectivity \
    -skip datavis3d \
    -skip gamepad \
    -skip location \
    -skip purchasing \
    -skip serialbus \
    -skip serialport \
    -skip qtserialport \
    -skip script \
    -skip scxml \
    -skip speech \
    -skip sensors \
    -skip virtualkeyboard \
    -skip wayland \
    -skip webengine \
    -skip webchannel \
    -skip webglplugin \
    -skip websockets \
    -skip webview \
    \
    -qt-libpng \
    -no-libjpeg \
    -no-dbus \
    -qt-zlib \
    -qt-pcre \
    -qt-harfbuzz \
    -qt-freetype

make -j 4
make install

cd /Users/StaticQt/

# Exclude some heavy files from packing
TOSKIP="skip_list.txt"
printf "" > ${TOSKIP}
echo "${QtVer}/bin/Assistant.app" >> ${TOSKIP}
echo "${QtVer}/bin/Designer.app" >> ${TOSKIP}
echo "${QtVer}/bin/Linguist.app" >> ${TOSKIP}
echo "${QtVer}/bin/pixeltool.app" >> ${TOSKIP}
echo "${QtVer}/bin/qdbusviewer.app" >> ${TOSKIP}
echo "${QtVer}/bin/qtdiag" >> ${TOSKIP}
echo "${QtVer}/bin/qml.app" >> ${TOSKIP}
echo "${QtVer}/doc" >> ${TOSKIP}
echo "${QtVer}/phrasebooks" >> ${TOSKIP}
tar -cjf qt-${QtArVer}-static-macosx-${MacArVer}.tar.bz2 --exclude-from=${TOSKIP} ${QtVer}
rm -v ${TOSKIP}

mv -v qt-${QtArVer}-static-macosx-${MacArVer}.tar.bz2 ${OldDir}

cd $OldDir

echo "Everything has been completed!"

Qt 5.11.1

#!/bin/bash

QtVer=5.11.1
OldDir=$PWD
ArName=qt-everywhere-src-5.11.1.tar.xz
DirName=qt-everywhere-src-5.11.1

MacVer=$(sw_vers -productVersion)
MacArVer=${MacVer//\./\-}
QtArVer=${QtVer//\./\-}

if [ ! -f $ArName ]; then
    echo "Downloading..."
    qqqurl="http://download.qt.io/official_releases/qt/5.11/5.11.1/single/qt-everywhere-src-5.11.1.tar.xz"
    wget ${qqqurl}
    # axel -a -n 10 ${qqqurl}
fi

if [ ! -d $DirName ]; then
    echo "Unpacking..."
    tar -xf $ArName
fi

echo "Creating /Users/StaticQt (needs root)..."
if [ ! -d /Users/StaticQt ]; then
    MyUsername=$(whoami)
    sudo mkdir -p /Users/StaticQt
    sudo chmod -R $MyUsername /Users/StaticQt
fi

cd $DirName

./configure -static -release -silent \
-prefix /Users/StaticQt/$QtVer \
-opensource -confirm-license -opengl \
-nomake examples \
-skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech \
-qt-libpng -no-libjpeg -qt-zlib -qt-pcre -qt-harfbuzz -qt-freetype

make -j 4
make install

cd /Users/StaticQt/
tar -cjf qt-${QtArVer}-static-macosx-${MacArVer}.tar.bz2 ${QtVer}

cd $OldDir

echo "Everything has been completed!"

Qt 5.10.0

#!/bin/bash

QtVer=5.10.1
OldDir=$PWD
ArName=qt-everywhere-src-5.10.1.tar.xz
DirName=qt-everywhere-src-5.10.1

if [ ! -f $ArName ]; then
    echo "Downloading..."
    wget http://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz
fi

if [ ! -d $DirName ]; then
    echo "Unpacking..."
    tar -xf $ArName
fi

echo "Creating /Users/StaticQt (needs root)..."
if [ ! -d /Users/StaticQt ]; then
    MyUsername=$(whoami)
    sudo mkdir -p /Users/StaticQt
    sudo chmod -R $MyUsername /Users/StaticQt
fi

cd $DirName

./configure -static -release -silent \
-prefix /Users/StaticQt/$QtVer \
-opensource -confirm-license -opengl \
-nomake examples \
-skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech \
-qt-libpng -no-libjpeg -qt-zlib -qt-pcre -qt-harfbuzz -qt-freetype

make -j 4
make install

cd /Users/StaticQt/
tar -cjf qt-$QtVer-static-macosx-10-12-6.tar.bz2 $QtVer

cd $OldDir

echo "Everything has been completed!"

Qt 5.9

#!/bin/bash

QtVer=5.9.0
OldDir=$PWD
ArName=qt-everywhere-opensource-src-5.9.0.tar.xz
DirName=qt-everywhere-opensource-src-5.9.0

if [ ! -f $ArName ]; then
    echo "Downloading..."
    wget http://download.qt.io/official_releases/qt/5.9/5.9.0/single/qt-everywhere-opensource-src-5.9.0.tar.xz
fi

if [ ! -d $DirName ]; then
    echo "Unpacking..."
    tar -xf $ArName
fi

echo "Creating /Users/StaticQt (needs root)..."
if [ ! -d /Users/StaticQt ]; then
    MyUsername=$(whoami)
    sudo mkdir -p /Users/StaticQt
    sudo chmod -R $MyUsername /Users/StaticQt
fi

cd $DirName

./configure -static -release -silent \
-prefix /Users/StaticQt/$QtVer \
-opensource -confirm-license -opengl \
-nomake examples \
-skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech \
-qt-libpng -no-libjpeg -qt-zlib -qt-pcre -qt-harfbuzz -qt-freetype

make -j 4
make install

cd /Users/StaticQt/
tar -cjf qt-$QtVer-static-macosx-10-12-5.tar.bz2 $QtVer

cd $OldDir

echo "Everything has been completed!"

Windows