#!/bin/bash # This is GIMP 3.x.x update script for Porteus # Version 2025-01-06 # Copyright 2023-2030, Blaze, Dankov, Russia # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # root check if [ `whoami` != "root" ]; then echo -e "\nYou need to be root to run this script.\n" exit 1 fi PRGNAM=${PRGNAM:-gimp} BUILD=${BUILD:-1} ARCH=$( uname -m ) VERSION=$(lynx -source "https://www.nic.funet.fi/pub/mirrors/ftp.gimp.org/pub/gimp/v3.0/SHA256SUMS" | tail -n1 | cut -d'-' -f2-3 | sed -e 's|\.tar.xz||') BOLD=${BOLD:-"\e[1m"} CYAN=${CYAN:-"\e[96m"} GREEN=${GREEN:-"\e[92m"} RED=${RED:-"\e[31m"} RESET=${RESET:-"\e[0m"} CWD=$(pwd) TMPDIR=/tmp/portch PKG=$TMPDIR/package-$PRGNAM PKGINFO=$PKG/var/lib/pkgtools/packages ICON=$PKG/usr/share/applications/gimp.desktop OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "x86_64" ]; then LIBDIRSUFFIX="64" else LIBDIRSUFFIX="" fi cleanup(){ [ -d $TMPDIR ] && rm -rf $TMPDIR [ -d $PKG ] && rm -rf $PKG rm -f ${OUTPUT}/*.txz exit } # check if gimp installed in the system if [[ -f "/usr/bin/gimp" ]]; then MYVER=${MYVER:-`gimp --version | awk '{print $NF}'`} fi if [ "$MYVER" == "$VERSION" ]; then echo -e "You have the latest ${GREEN}$MYVER${RESET} version of $PRGNAM" sleep 5 exit else read -p "$(echo -e Would you like to build $PRGNAM ${GREEN}$VERSION${RESET} xzm module? [y/n])" -n 1 -r -s && echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "We continue the execution of the $0 script" &>/dev/null else exit fi fi rm -rf $PKG ${OUTPUT}/*.txz mkdir -p $TMPDIR $PKG cd $PKG if [[ "$XDG_CURRENT_DESKTOP" == "X-Cinnamon" || "$XDG_CURRENT_DESKTOP" == "MATE" ]]; then XZM=no getpkg -q gimp Imath LibRaw appstream-glib cfitsio gegl gexiv2 lensfun libmypaint libwmf libyaml luajit-lgi openexr # add babl elif [[ "$XDG_CURRENT_DESKTOP" == "GNOME" || "$XDG_CURRENT_DESKTOP" == "KDE" || "$XDG_CURRENT_DESKTOP" == "LXDE" || "$XDG_CURRENT_DESKTOP" == "LXQt" || "$XDG_DESKTOP_SESSION" == "openbox" || "$XDG_CURRENT_DESKTOP" == "XFCE" ]]; then XZM=no getpkg -q gimp Imath LibRaw appstream-glib babl cfitsio gegl gexiv2 lensfun libmypaint libwmf libyaml luajit-lgi openexr else XZM=no getpkg -q gimp Imath LibRaw appstream-glib babl cfitsio gegl gexiv2 lensfun libmypaint libwmf libyaml luajit-lgi openexr fi for i in $(find ${OUTPUT} -type f | grep ".txz" | sort); do ROOT=$PKG installpkg $i >/dev/null; done # cleanup rm -rf $PKG/usr/{doc,include,lib,man} rm -rf $PKG/usr/lib64/{gjs,pkgconfig} rm -rf $PKG/usr/share/{doc,ghostscript} rm -rf $PKG/var/lib/pkgtools/scripts/* find $PKG/usr/share/locale -type f ! -name 'gimp30*.mo' -delete # remove PDF and images MimeTypes sed -i 's|application/pdf;||' $ICON sed -i 's|image/bmp;||' $ICON sed -i 's|image/gif;image/svg+xml;image/x-compressed-xcf;image/x-fits;||' $ICON sed -i 's|image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;||' $ICON sed -i 's|image/x-tga;image/x-xbitmap;||' $ICON sed -i 's|image/tiff;image/jpeg;||' $ICON sed -i 's|image/png;image/x-icon;image/x-xpixmap;||' $ICON sed -i 's|image/x-webp;image/webp;||' $ICON # add Russian translation sed -i 's|Name\[ru\]\=GNU Image Manipulation Program|Name\[ru\]\=Редактор изображений GIMP|' $PKG/usr/share/applications/gimp.desktop # add hack with ghostscript 9.55 symbolic link on libgs.so.10 (ghostscript 10) ( cd usr/lib${LIBDIRSUFFIX} ; ln -sf libgs.so.9.55 libgs.so.10 ) ## functions to choose locale from a menu array_menu(){ echo echo "$1" echo "$2" select CHOICE in ${RESULT[@]}; do if [ -z "$CHOICE" ]; then CHOICE="en_US" echo "English locale chosen." && echo else echo -e "${BOLD}${CYAN}${CHOICE}${RESET} locale chosen" fi break done } get_locale(){ # Set locales in array for a in af am ar as ast az be bg bn br bs ca 'ca\@valencia' ckb cs csb da de dz el en_CA en_GB en_US eo es et eu fa fi fr fur fy ga gd gl gu he hi hr hu hy id is it ja ka kab kk km kn ko ky lt lv mai mk ml mn mr ms my nb nds ne nl nn nn_NO oc pa pl pt pt_BR ro ru rw sc se si sk sl sq sr 'sr\@latin' sv ta te tg th tr tt uk uz vi wa xh yi zh_CN zh_HK zh_TW; do RESULT+=( $a ) done array_menu "Or choose a locale from the list." "All other locales will be removed." ${RESULT[@]} unset RESULT } get_locale echo "Removing locales ..." find $PKG/usr/share/locale/ -maxdepth 1 -type d ! -name 'locale' | grep -Ev "${CHOICE}" | xargs -i rm -rf {} find $PKG/usr/lib${LIBDIRSUFFIX}/gimp/*.*/extensions/org.gimp.extension.goat-exercises/locale -maxdepth 1 -type d ! -name 'locale' | grep -Ev "${CHOICE}" | xargs -i rm -rf {} dir2xzm $PKG $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.xzm # check on GIMP 3.x.x xzm file exists in /tmp if [ -f "$OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.xzm" ]; then echo -e "\n${BOLD}Your $PRGNAM module is at: ${GREEN}${BOLD}$OUTPUT/$PRGNAM-$VERSION-x86_64-${BUILD}.xzm${RESET}\n${BOLD}Please copy it to your modules folder to survive a reboot.${RESET}\n" else echo -e "\n${RED}${BOLD}Faile. Your $PRGNAM module is not built.${RESET}\n" fi cleanup