File indexing completed on 2024-04-14 04:45:51

0001 #!/bin/bash
0002 # SPDX-FileCopyrightText: 2018 V. Pinon <vpinon@kde.org>
0003 # SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 # Uses msys2 package management, download from msys2.org
0005 
0006 # Be verbose, halt on errors
0007 set -xe
0008 
0009 [ -z "$MSYSTEM" ] && echo "Please run under MSYS/MINGW(64)" && exit 1
0010 
0011 # change this to another location if you prefer
0012 export SRC=$PWD/src
0013 mkdir -p $SRC
0014 
0015 export PREFIX=$MINGW_PREFIX
0016 
0017 #if [ -n "$PREFIX" ] ; then
0018 #    mkdir -p $PREFIX/lib
0019 #    export PATH=$PREFIX/bin:$PATH
0020 #    export LD_LIBRARY_PATH=$PREFIX/lib:/usr/lib
0021 #    export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:/usr/lib/pkgconfig
0022 #fi
0023 
0024 THREADS=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
0025 [[ $THREADS -gt 1 ]] && THREADS=$((THREADS-1))
0026 
0027 # $@: package base names
0028 function pacman_install {
0029     pacman -Sy --needed ${@/#/mingw-w64-x86_64-}
0030 }
0031 
0032 # $1: repo URL, $2: branch
0033 function git_pull {
0034     URL=$1 BRANCH=$2
0035     PKG=${URL##*/}; PKG=${PKG%%.git}
0036     cd $SRC
0037     if [ -d $PKG ]; then
0038         echo "$PKG already cloned"
0039         cd $PKG
0040         # git reset --hard
0041         git checkout $BRANCH
0042         git pull --rebase
0043         cd ..
0044     else
0045         git clone $URL
0046     fi
0047 }
0048 
0049 # $1: archive URL
0050 function wget_extract {
0051     URL=$1
0052     ARCHIVE=${URL##*/}
0053     PKGVERS=${ARCHIVE%%.tar.*} 
0054     cd $SRC
0055     if [ -d $SRC/$PKGVERS ]; then
0056         echo "$PKGVERS already downloaded"
0057     else
0058         [ -f $ARCHIVE ] || wget $URL
0059         if [[ ${ARCHIVE##*.} == zip ]] ; then
0060             unzip $ARCHIVE
0061         else
0062             tar -xf ${URL##*/}
0063         fi
0064     fi
0065 }
0066 
0067 # $1: package name ; $@: cmake args
0068 function cmake_ninja {
0069     PKG=$1; shift; CMAKE_ARGS="$@"
0070     [ -n "$PREFIX" ] && CMAKE_ARGS+=" -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX"
0071     if [ ! -f $SRC/$PKG/build/CMakeCache.txt ] ; then
0072         mkdir -p $SRC/$PKG/build
0073         cd $SRC/$PKG/build
0074         cmake .. -G Ninja $CMAKE_ARGS
0075     fi
0076     cd $SRC/$PKG/build
0077     ninja install
0078 }
0079 
0080 # $1: package name ; $2: configure args
0081 function configure_make {
0082     PKG=$1; shift; CONFIGURE_ARGS="$@"
0083     [ -n "$PREFIX" ] && CONFIGURE_ARGS+=" --prefix=$PREFIX"
0084     cd $SRC/$PKG
0085     ./configure $CONFIGURE_ARGS
0086     mingw32-make -j$THREADS
0087     mingw32-make install
0088 }
0089 
0090 
0091 #### DOWNLOAD DEPS
0092 if pacman -Suy ; then
0093     # MSYS tools
0094     pacman -Sy --needed tar git automake1.16
0095     # MINGW packages
0096     TOOLS="make cmake ninja pkg-config libtool" # ruby
0097     DEPS="gcc drmingw gavl opencv dlfcn SDL2 exiv2 libexif vid.stab ffmpeg gtk2 qt5 fftw ladspa-sdk eigen3 extra-cmake-modules"
0098     KF5=(breeze-icons karchive kconfig kcoreaddons kdbusaddons kguiaddons \
0099          ki18n kitemviews kwidgetsaddons kcompletion kwindowsystem \
0100          kcrash kjobwidgets kauth kcodecs kconfigwidgets kiconthemes \
0101          solid sonnet attica kservice kglobalaccel ktextwidgets \
0102          kxmlgui kbookmarks knotifications kio knewstuff \
0103          kpackage kdeclarative kirigami2 \
0104          kcmutils plasma-framework)
0105     pacman_install $DEPS $TOOLS ${KF5[@]/%/-qt5}
0106 fi
0107 
0108 #### BUILD EXTRA KF5
0109 
0110 KF5_VERSION=$(pacman -Ss $MINGW_PACKAGE_PREFIX-extra-cmake-modules | sed -n 's/.* \(5\..*\)-.*/\1/p')
0111 for FRAMEWORK in knotifyconfig purpose frameworkintegration ; do
0112     #git_pull git://anongit.kde.org/$FRAMEWORK v$KF5_VERSION
0113     wget_extract https://download.kde.org/stable/frameworks/${KF5_VERSION%.*}/$FRAMEWORK-$KF5_VERSION.tar.xz
0114     cmake_ninja $FRAMEWORK-$KF5_VERSION \
0115         -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON 
0116         #-DBUILD_TESTING:BOOL=OFF \
0117         #-DKDE_INSTALL_LIBDIR=lib \
0118         #-DKDE_INSTALL_QMLDIR=share/qt5/qml \
0119         #-DKDE_INSTALL_QTPLUGINDIR=share/qt5/plugins \
0120         #-DKDE_INSTALL_DBUSDIR=share/dbus-1 \
0121         #-DKDE_INSTALL_MANDIR=share/man \
0122         #-DKDE_INSTALL_APPDIR=share/applications \
0123         #-DKDE_INSTALL_MIMEDIR=share/mime/packages \
0124         #-DECM_MKSPECS_INSTALL_DIR=$MINGW_PREFIX/share/qt5/mkspecs/modules \
0125         #-DECM_DIR=$MINGW_PREFIX/share/ECM \
0126 done
0127 wget_extract https://download.kde.org/stable/plasma/5.16.5/kdecoration-5.16.5.tar.xz
0128 cmake_ninja kdecoration-5.16.5 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON
0129 wget_extract https://download.kde.org/stable/plasma/5.16.5/breeze-5.16.5.tar.xz || true # symlink errors
0130 cmake_ninja breeze-5.16.5 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON
0131 
0132 #### BUILD MULTIMEDIA DEPS
0133 
0134 if false ; then # Still Failing
0135     wget_extract https://github.com/jackaudio/jack2/releases/download/v1.9.12/jack2-1.9.12.tar.gz
0136     git_pull https://github.com/jackaudio/jack2.git
0137     pushd $SRC/jack2 #-1.9.12
0138     ./waf configure build install -j $THREADS --prefix=$PREFIX
0139     popd
0140     
0141     git_pull https://git.sesse.net/movit
0142     pushd $SRC/movit
0143     ./autogen.sh
0144     popd
0145     configure_make movit
0146 fi
0147 
0148 git_pull https://github.com/dyne/frei0r.git
0149 cmake_ninja frei0r -DWITHOUT_OPENCV=ON
0150 
0151 git_pull https://github.com/mltframework/mlt.git
0152 configure_make mlt --enable-gpl --enable-gpl3 --disable-windeploy
0153 
0154 #### BUILD KDENLIVE
0155 
0156 wget_extract https://github.com/rttrorg/rttr/archive/v0.9.6.tar.gz
0157 cmake_ninja rttr-0.9.6 \
0158         -DBUILD_EXAMPLES=OFF -DBUILD_DOCUMENTATION=OFF \
0159         -DBUILD_UNIT_TESTS=OFF -DBUILD_PACKAGE=OFF -DBUILD_STATIC=ON
0160 
0161 git_pull https://anongit.kde.org/kdenlive.git
0162 #git_pull https://anongit.kde.org/releaseme.git
0163 #pushd $SRC/kdenlive
0164 #ruby ../releaseme/fetchpo.rb --origin stable --project kdenlive --output-dir po --output-poqm-dir poqm .
0165 #popd
0166 mkdir -p $SRC/kdenlive/build
0167 cd $SRC/kdenlive/build
0168 cmake_ninja kdenlive -DCMAKE_BUILD_TYPE=RelWithDebSymbols -DBUILD_TESTING:BOOL=OFF -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON
0169 
0170