File indexing completed on 2024-05-12 04:17:32

0001 #!/bin/bash
0002 
0003 # Script to install dependencies under Ubuntu Linux to compile digiKam.
0004 # This script must be run as sudo
0005 # *Ubuntu* compatible version >= 18.04
0006 #
0007 # SPDX-FileCopyrightText: 2021      by TRAN Quoc Hung <quochungtran1999 at gmail dot com>
0008 # SPDX-FileCopyrightText: 2021      by Surya K M      <suryakm_is20 dot rvitm@rvei dot edu dot in>
0009 # SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010 # SPDX-FileCopyrightText: 2024      by Joerg Lohse    <joergmlpts at gmail dot com>
0011 
0012 #
0013 # SPDX-License-Identifier: BSD-3-Clause
0014 #
0015 
0016 # Check OS name and version.
0017 
0018 OS_NAME=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | sed 's/\"//' | sed 's/\"//' | tr '[:upper:]' '[:lower:]')
0019 OS_ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
0020 OS_VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
0021 
0022 echo $OS_NAME
0023 echo $OS_ARCH
0024 echo $OS_VERSION
0025 
0026 if [[ "$OS_NAME" != "ubuntu" ]] ; then
0027     echo "Not running Linux ubuntu..."
0028     exit -1
0029 fi
0030 
0031 
0032 echo "Check the list of dependencies in the online doc API : https://www.digikam.org/api/index.html#externaldeps"
0033 echo "-------------------------------------------------------------------"
0034 
0035 # To download package information from all configured sources.'
0036 
0037 sudo apt-get update
0038 sudo apt-get upgrade
0039 
0040 # Benefit from a higher version of certain software , update the key
0041 
0042 sudo apt-key adv --refresh-keys --keyserver keyserver.ubuntu.com
0043 sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
0044 
0045 # To fix GPP key error with some repositories
0046 # See: https://www.skyminds.net/linux-resoudre-les-erreurs-communes-de-cle-gpg-dans-apt/
0047 
0048 sudo apt-get update 2>&1 | \
0049     sed -ne 's?^.*NO_PUBKEY ??p' | \
0050     xargs -r -- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
0051 
0052 # Install dependencies to checkout source code
0053 
0054 sudo apt-get install -y git git-lfs
0055 
0056 echo "-------------------------------------------------------------------"
0057 
0058 sudo apt-get install -y perl
0059 
0060 echo "-------------------------------------------------------------------"
0061 
0062 # Install required dependencies to compile and link source code
0063 
0064 required_packages=("cmake"                   # To Compile Source Code
0065                    "ninja-build"             # To Compile Source Code
0066                    "extra-cmake-modules"     # To Compile Source Code
0067                    "build-essential"         # To Compile Source Code
0068                    "qttools5-dev-tools"      # To handle Qt5 configuration.
0069 
0070                    "libqt5core5a"            # Qt 5 core module
0071                    "libqt5gui5"              # Qt 5 Gui module
0072                    "libqt5widgets5"          # Qt 5 widget module
0073                    "libqt5network5"          # Qt 5 network module
0074                    "libqt5sql5"              # Qt 5 SQL module
0075                    "libqt5sql5-mysql"        # Qt 5 SQL module
0076                    "libqt5sql5-sqlite"       # Qt 5 SQL module
0077                    "libqt5xml5"              # Qt 5 XML module
0078                    "libqt5concurrent5"       # Qt 5 Concurrent module
0079                    "libqt5printsupport5"     # Qt 5 PrintSupport module
0080                    "libqt5svg5"              # Qt 5 Svg module
0081                    "libqt5webengine5"        # Qt 5 webengine module
0082                    "qtwebengine5-dev"        # Qt 5 webengine module
0083                    "libqt5networkauth5-dev"  # Qt 5 network authentification.
0084 
0085                    "libkf5config-dev"        # Configuration settings framework for Qt
0086                    "libkf5xmlgui-dev"        # User configurable main windows
0087                    "libkf5i18n-dev"          # Advanced internationalization framework
0088                    "libkf5windowsystem-dev"  # Development files for kwindowsystem
0089                    "libkf5service-dev"       # Development files for kservice
0090                    "libkf5solid-dev"         # Qt library to query and control hardware
0091                    "libkf5coreaddons-dev"    # Development files - KDE Frameworks 5 addons to QtCore
0092 
0093                    "libopencv-dev"           # Development files for opencv
0094                    "libpthread-stubs0-dev"   # Development files for pthread
0095                    "libtiff-dev"             # Tag image file format library
0096                    "libpng-dev"              # PNG library
0097                    "libjpeg-dev"             # JPEG library
0098                    "libboost-all-dev"        # Boots C++ Libraries
0099                    "liblcms2-dev"            # Little CMS 2 color management library
0100                    "libexpat1-dev"           # XML parsing C library
0101                    "libexiv2-dev"            # Metadata manipulation library
0102                     )
0103 
0104 
0105 for pkg in ${required_packages[@]}; do
0106 
0107     sudo apt-get install -y ${pkg}
0108 
0109     current_version=$(dpkg-query --showformat='${Version}' --show ${pkg})
0110 
0111     case "${pkg}" in
0112     "cmake")
0113         required_version=3.3.2
0114         ;;
0115     "extra-cmake-modules")
0116         required_version=5.5.0
0117         ;;
0118     "build-essential")
0119         required_version=7.2.0
0120         ;;
0121     "libqt5core5a")
0122         required_version=5.9.0
0123         ;;
0124     "libkf5config-dev")
0125         required_version=5.5.0
0126         ;;
0127     "libopencv-dev")
0128         required_version=3.3.0
0129         ;;
0130     "libpthread-stubs0-dev")
0131         required_version=2.0.0
0132         ;;
0133     "libtiff-dev")
0134         required_version=4.0.0
0135         ;;
0136     "libpng-dev")
0137         required_version=1.6.0
0138         ;;
0139     "libjpeg-dev")
0140         required_version=6b
0141         ;;
0142     "libboost-all-dev")
0143         required_version=1.55.0
0144         ;;
0145     "liblcms2-dev")
0146         required_version=2.0.0
0147         ;;
0148     "libexpat1-dev")
0149         required_version=2.1.0
0150         ;;
0151     "libexiv2-dev")
0152         required_version=0.27.0
0153         ;;
0154     esac
0155 
0156     echo $current_version
0157 
0158     if $(dpkg --compare-versions "$current_version" "lt" "$required_version"); then
0159             echo "less than $required_version";
0160             echo "please upgrade newer version or another packages";
0161     else
0162             echo "greater than $required_version ............. accepted";
0163     fi
0164 
0165     echo "-------------------------------------------------------------------"
0166 
0167 done
0168 
0169 # Install optional dependencies to compile and link source code
0170 
0171 optional_packages=("ruby"                               # For i18n extraction
0172                    "subversion"                         # For i18n extraction
0173                    "hunspell"                           # For check spelling
0174                    "valgrind"                           # For debuging
0175                    "keychain"                           # For git-ssh
0176                    "ssh-askpass"                        # For git-ssh
0177                    "lzip"                               # For CI/CD
0178                    "gzip"                               # For CI/CD
0179                    "unzip"                              # For CI/CD
0180                    "unrar"                              # For CI/CD
0181                    "autoconf"                           # For MXE build
0182                    "automake"                           # For MXE build
0183                    "autopoint"                          # For MXE build
0184                    "bash"                               # For MXE build
0185                    "bison"                              # For MXE build
0186                    "bzip2"                              # For MXE build
0187                    "flex"                               # For MXE build
0188                    "gcc-mingw-w64"                      # For MXE build
0189                    "g++"                                # For MXE build
0190                    "g++-multilib"                       # For MXE build
0191                    "gettext"                            # For MXE build
0192                    "git"                                # For MXE build
0193                    "gperf"                              # For MXE build
0194                    "icoutils"                           # For MXE build
0195                    "intltool"                           # For MXE build
0196                    "libc6-dev-i386"                     # For MXE build
0197                    "libgdk-pixbuf2.0-dev"               # For MXE build
0198                    "gtk-doc-tools"                      # For MXE build
0199                    "libltdl-dev"                        # For MXE build
0200                    "libgl-dev"                          # For MXE build
0201                    "libssl-dev"                         # For MXE build
0202                    "libtool"                            # For MXE build
0203                    "libtool-bin"                        # For MXE build
0204                    "libxml-parser-perl"                 # For MXE build
0205                    "lzip"                               # For MXE build
0206                    "make"                               # For MXE build
0207                    "openssl"                            # For MXE build
0208                    "p7zip-full"                         # For MXE build
0209                    "patch"                              # For MXE build
0210                    "perl"                               # For MXE build
0211                    "python3"                            # For MXE build
0212                    "python3-mako"                       # For MXE build
0213                    "python3-pkg-resources"              # For MXE build
0214                    "python-is-python3"                  # For MXE build
0215                    "ruby"                               # For MXE build
0216                    "scons"                              # For MXE build
0217                    "sed"                                # For MXE build
0218                    "unzip"                              # For MXE build
0219                    "wget"                               # For MXE build
0220                    "xz-utils"                           # For MXE build
0221                    "python3-pygments"                   # For Cppcheck static analysis
0222                    "python3-bs4"                        # For Clazy static analysis
0223                    "python3-soupsieve"                  # For Clazy static analisys
0224                    "cppcheck"                           # For static analysis
0225                    "clang"                              # For static analysis
0226                    "clang-tidy"                         # For static analysis
0227                    "clang-tools"                        # For static analysis
0228                    "libasan4"                           # For static analysis
0229                    "openjdk-18-jre"                     # For static analysis
0230                    "libsaxonhe-java"                    # For static analysis
0231                    "libxml-perl"                        # For static analysis
0232                    "libxml-libxml-perl"                 # For static analysis
0233                    "libyaml-libyaml-perl"               # For static analysis
0234                    "libyaml-perl"                       # For static analysis
0235                    "libjson-perl"                       # For static analysis
0236                    "llvm"                               # For static analysis
0237                    "clazy"                              # For static analysis
0238                    "libclang-dev"                       # For static analysis
0239                    "doxygen"                            # For API doc
0240                    "graphviz"                           # For API doc
0241                    "kate"                               # For debuging
0242                    "ktexteditor-katepart"               # For debuging
0243                    "ccache"                             # For compiling
0244                    "hugin"                              # For run-time processing
0245                    "exiftool"                           # For metadata processing
0246                    "bison"                              # For Qt build (>= 2.5.0)
0247                    "flex"                               # For compiling (>= 2.5.0)
0248                    "mariadb-server"                     # Run-time: mysql internal server init
0249                    "curl"                               # For CI/CD
0250                    "wget"                               # For CI/CD
0251                    "coreutils"                          # For CI/CD
0252                    "dmg2img"                            # For CI/CD (MacOS)
0253                    "tesseract-ocr"                      # For CI/CD (MacOS)
0254                    "libeigen3-dev"                      # >= 3.2
0255                    "liblensfun-dev"                     # >= 0.2.8
0256                    "libgomp1"                           # For Libraw compilation
0257                    "libavdevice-dev"                    # >= 3.3.x
0258                    "libavfilter-dev"                    # >= 3.3.x
0259                    "libavformat-dev"                    # >= 3.3.x
0260                    "libavcodec-dev"                     # >= 3.3.x
0261                    "libavutils-dev"                     # >= 3.3.x
0262                    "libpostproc-dev"                    # >= 3.3.x
0263                    "libgphoto2-dev"                     # >= 2.5
0264                    "libsane-dev"                        # >= 5.0.0
0265                    "libjasper-dev"                      # >= 1.900.1
0266                    "libheif-dev"
0267                    "libxslt-dev"                        # >= 1.1.0
0268                    "libxml2-dev"                        # >= 2.7.0
0269                    "libtiff-dev"                        # >= 4.0
0270                    "liblqr-dev"                         # >= 0.4.2
0271                    "libfftw3-dev"                       # For GMic-Qt compilation
0272                    "libx265-dev"                        # >= 2.2
0273                    "libmagick++-dev"                    # >= 6.7.0
0274                    "libqt5x11extras5-dev"               # >= 5.9
0275                    "libqt5test5"                        # >= 5.9
0276                    "libqt5xml5"                         # >= 5.9
0277                    "qttools5-dev"                       # >= 5.9
0278                    "libqt5xmlpatterns5-dev"             # >= 5.9
0279                    "libqt5opengl5-dev"                  # >= 5.9
0280                    "libkf5sane-dev"                     # >= 5.5.0
0281                    "libkf5threadweaver-dev"             # >= 5.5.0
0282                    "libkf5kio-dev"                      # >= 5.5.0
0283                    "libkf5sonnet-dev"                   # >= 5.5.0
0284                    "libkf5notifications-dev"            # >= 5.5.0
0285                    "libkf5notifyconfig-dev"             # >= 5.5.0
0286                    "libkf5filemetadata-dev"             # >= 5.5.0
0287                    "libkf5calendarcore-dev"             # >= 5.5.0
0288                    "libkf5akonadicontact-dev"           # >= 4.89.0
0289                    "libkf5doctools-dev"
0290                    "libkf5filemetadata-dev"             # Files indexer engine for Plasma desktop
0291                    "libinih-dev"                        # For Exiv2
0292                    "libbrotli-dev"                      # For Exiv2
0293                     #TODO add new optional packages
0294                     )
0295 
0296 for pkg in ${optional_packages[@]}; do
0297     sudo apt-get install -y ${pkg}
0298     echo "-------------------------------------------------------------------"
0299 done
0300 
0301 # Add symbolic links for Krazy static analyzer
0302 
0303 sudo ln -sf /usr/share/java              /opt/saxon
0304 sudo ln -sf /usr/share/java/Saxon-HE.jar /usr/share/java/saxon9he.jar
0305 
0306 echo "Remove SNAP and install Native Firefox package"
0307 echo "-------------------------------------------------------------------"
0308 
0309 sudo systemctl disable snapd.service
0310 sudo systemctl disable snapd.socket
0311 sudo systemctl disable snapd.seeded.service
0312 
0313 sudo snap remove firefox
0314 sudo snap remove snap-store
0315 sudo snap remove gtk-common-themes
0316 
0317 sudo snap remove gnome-3-38-2004
0318 sudo snap remove gnome-32-2204
0319 sudo snap remove gnome-42-2204
0320 sudo snap remove core20
0321 sudo snap remove core22
0322 sudo snap remove bare
0323 sudo snap remove snapd
0324 sudo snap remove snapd-desktop-integration
0325 
0326 sudo rm -rf /var/cache/snapd/
0327 sudo apt autoremove --purge snapd
0328 rm -rf ~/snap
0329 
0330 sudo tee /etc/apt/preferences.d/firefox-no-snap << EOF
0331 Package: firefox*
0332 Pin: release o=Ubuntu*
0333 Pin-Priority: -1
0334 EOF
0335 
0336 sudo add-apt-repository ppa:mozillateam/ppa
0337 
0338 sudo apt install firefox