Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
AppImage recipe for building GIMP from git
#! /bin/bash
FULL_BUNDLING=0
UPDATE=1
REBUILD=1
PREFIX=/zzz
# Move blacklisted files to a special folder
move_blacklisted()
{
mkdir -p ./usr/lib-blacklisted
if [ x"$FULL_BUNDLING" = "x1" ]; then
BLACKLISTED_FILES=$(cat $APPIMAGEBASE/AppImages/excludelist | sed '/^\s*$/d' | sed '/^#.*$/d')
else
BLACKLISTED_FILES=$(wget -q https://github.com/probonopd/AppImages/raw/master/excludelist -O - | sed '/^\s*$/d' | sed '/^#.*$/d')
fi
#echo $BLACKLISTED_FILES
for FILE in $BLACKLISTED_FILES ; do
FOUND=$(find . -type f -name "${FILE}" 2>/dev/null)
if [ ! -z "$FOUND" ] ; then
echo "Moving blacklisted ${FOUND}"
#rm -f "${FOUND}"
mv "${FOUND}" ./usr/lib-blacklisted
fi
done
}
export APPIMAGEBASE=$(pwd)/..
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
APP=gimp
VERSION=2.9.5
LOWERAPP=${APP,,}
rm -rf out $APP
WD=$(pwd)
export PATH=$PREFIX/bin:$PATH
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
export XDG_DATA_DIRS=$PREFIX/share:$XDG_DATA_DIRS
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
mkdir checkout
cd checkout
if [ x"$UPDATE" = "x1" ]; then
if [ -e babl ]; then
(cd babl; git_pull_rebase_helper)
if [ $? -ne 0 ]; then exit; fi
else
git clone https://github.com/GNOME/babl.git
fi
if [ -e gegl ]; then
(cd gegl; git_pull_rebase_helper)
if [ $? -ne 0 ]; then exit; fi
else
git clone https://github.com/GNOME/gegl.git
fi
if [ -e libmypaint ]; then
(cd libmypaint; git_pull_rebase_helper)
if [ $? -ne 0 ]; then exit; fi
else
git clone git://github.com/mypaint/libmypaint.git
fi
if [ -e mypaint ]; then
(cd mypaint; git_pull_rebase_helper)
if [ $? -ne 0 ]; then exit; fi
else
git clone git://github.com/mypaint/mypaint.git
fi
if [ -e gimp ]; then
(cd gimp; git_pull_rebase_helper)
if [ $? -ne 0 ]; then exit; fi
else
git clone https://github.com/GNOME/gimp.git -b master
fi
if [ -e resynthesizer ]; then
(cd resynthesizer; git_pull_rebase_helper)
if [ $? -ne 0 ]; then exit; fi
else
git clone https://github.com/bootchk/resynthesizer.git
fi
if [ -e liblqr ]; then
(cd liblqr; git_pull_rebase_helper)
else
git clone https://github.com/carlobaldassi/liblqr.git -b master
fi
if [ -e gimp-lqr-plugin ]; then
(cd gimp-lqr-plugin; git_pull_rebase_helper)
else
git clone https://github.com/carlobaldassi/gimp-lqr-plugin.git -b master
fi
if [ -e gmic-git ]; then
(cd gmic-git; git_pull_rebase_helper)
else
git clone https://github.com/dtschump/gmic.git -b master --single-branch gmic-git
fi
if [ ! -e libvips ]; then
# (cd libvips; git_pull_rebase_helper)
# else
wget http://www.vips.ecs.soton.ac.uk/supported/8.4/vips-8.4.1.tar.gz
tar xzvf vips-8.4.1.tar.gz
rm -f libvips
ln -s vips-8.4.1 libvips
#git clone https://github.com/jcupitt/libvips.git libvips
fi
if [ ! -e PhotoFlow ]; then
git clone https://github.com/aferrero2707/PhotoFlow.git --branch stable --single-branch PhotoFlow
if [ $? -ne 0 ]; then exit; fi
else
(cd PhotoFlow; git pull origin stable)
fi
fi
all=1
if [ x"$REBUILD" = "x1" ]; then
if [ $all -eq 1 ]; then
rm -r $PREFIX/*
#cd glib-2.40.2
#./configure --prefix=$PREFIX && make && make install-strip
#if [ $? -ne 0 ]; then exit; fi
#cd ..
#cd gdk-pixbuf-2.30.7
#./configure --prefix=$PREFIX --enable-gio-sniffing=yes && make && make install-strip
#if [ $? -ne 0 ]; then exit; fi
#cd ..
cd lcms2-2.8
./configure --prefix=$PREFIX && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd libpng-1.6.26
./configure --prefix=$PREFIX && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
mkdir -p lensfun-build
cd lensfun-build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX ../lensfun-0.3.2 && make && make install
if [ $? -ne 0 ]; then exit; fi
cd ..
cd babl
./autogen.sh --prefix=$PREFIX --disable-mmx --disable-sse --disable-docs && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd gegl
./autogen.sh --prefix=$PREFIX --disable-docs --enable-gtk-doc=no --enable-gtk-doc-html=no --enable-gtk-doc-pdf=no --enable-workshop --without-libv4l2 --without-libavformat --without-sdl && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd libmypaint
./autogen.sh --prefix=$PREFIX; ./configure --prefix=$PREFIX && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd gimp
sed -i 's/m4_define(\[gdk_pixbuf_required_version\], \[2.30.8\])/m4_define(\[gdk_pixbuf_required_version\], \[2.30.7\])/g' configure.ac
sed -i 's/GDK_PIXBUF_REQUIRED_MICRO 8/GDK_PIXBUF_REQUIRED_MICRO 7/g' app/sanity.c
./autogen.sh --prefix=$PREFIX --disable-gtk-doc --enable-debug=no --with-gimpdir="GIMP-AppImage" && make clean && make && make install-strip
#make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd gutenprint-5.2.11
./configure --prefix=$PREFIX && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
mkdir -p gmic-build
cd gmic-build
make clean
rm -f CMakeCache.txt; cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_MAN=OFF -DBUILD_LIB=OFF -DBUILD_LIB_STATIC=OFF -DBUILD_CLI=OFF -DBUILD_PLUGIN=ON -DCMAKE_INSTALL_PREFIX=/zzz ../gmic-git && make clean && make VERBOSE=1 && make install
if [ $? -ne 0 ]; then exit; fi
cd ..
cd resynthesizer
./autogen.sh --prefix=$PREFIX && make clean && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd liblqr
./configure --prefix=$PREFIX && make clean && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd gimp-lqr-plugin
./configure --prefix=$PREFIX && make clean && make && make install-strip
if [ $? -ne 0 ]; then exit; fi
cd ..
cd libvips
./autogen.sh
FLAGS="-O2 -msse4.2 -ffast-math -ftree-vectorize" CFLAGS="${FLAGS}" CXXFLAGS="${FLAGS} -fpermissive" ./configure --prefix=${PREFIX} --disable-gtk-doc --disable-gtk-doc-html --disable-introspection --enable-debug=no --without-python --without-magick --without-libwebp --enable-pyvips8=no --enable-shared=yes --enable-static=no && make && make install
if [ $? -ne 0 ]; then exit; fi
cd ..
fi
mkdir -p phfbuild
cd phfbuild
cmake -DBABL_FLIPS_DISABLED=OFF -DBUNDLED_LENSFUN=OFF -DBUNDLED_GEXIV2=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX -DINSTALL_PREFIX=$PREFIX $(pwd)/../PhotoFlow && make && make install
if [ $? -ne 0 ]; then exit; fi
cd ..
fi
#exit
cd "$WD"
pwd
mkdir -p $APP/$APP.AppDir
cd $APP/$APP.AppDir
mkdir -p usr
cp -rL $PREFIX/* usr
mv usr/bin/gimp-2.9 usr/bin/$LOWERAPP.bin
rm -r usr/bin/photoflow
rm -r usr/bin/pfbatch
#cp -a ../../$LOWERAPP.launcher usr/bin/$LOWERAPP
cat > usr/bin/$LOWERAPP <<\EOF
#! /bin/bash
pwd
HERE="$(dirname "$(readlink -f "${0}")")"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
export XDG_DATA_DIRS=$HERE/../share-mime:$XDG_DATA_DIRS
echo "XDG_DATA_DIRS=$XDG_DATA_DIRS"
export GTK_PATH=$HERE/../lib/gtk-2.0:$GTK_PATH
echo "GTK_PATH=${GTK_PATH}"
GDK_PIXBUF_MODULEDIR=$HERE/../lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders
GDK_PIXBUF_MODULE_FILE=$HERE/../lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache
echo "GDK_PIXBUF_MODULEDIR: $GDK_PIXBUF_MODULEDIR"
echo "GDK_PIXBUF_MODULE_FILE: $GDK_PIXBUF_MODULE_FILE"
cat $GDK_PIXBUF_MODULE_FILE
export PF_DATA_DIR=$HERE/../share
export GIMP2_PLUGINDIR=$(readlink -f "$HERE/../lib/gimp/2.0")
echo "HERE: $HERE"
echo "GIMP2_PLUGINDIR: $GIMP2_PLUGINDIR"
echo "Input parameters: \"$@\""
echo ""
echo "Input File: $1"
ldd $HERE/LOWERAPP.bin
echo ""
echo "$HERE/LOWERAPP.bin --pdb-compat-mode=on \"$@\""
$HERE/LOWERAPP.bin --pdb-compat-mode=on "$@"
EOF
sed -i -e "s|LOWERAPP|$LOWERAPP|g" usr/bin/$LOWERAPP
chmod u+x usr/bin/$LOWERAPP
rm -f usr/lib/gimp/2.0/plug-ins/file-darktable
if [ x"$FULL_BUNDLING" = "x1" ]; then
mkdir -p usr/share-mime
cp -a /usr/share/mime usr/share-mime
cp -L /usr/lib/x86_64-linux-gnu/libgobject-2.0.so* usr/lib
#cp ./usr/share/applications/$LOWERAPP.desktop .
#sed -i -e "s|gimp-2.9|$LOWERAPP|g" $LOWERAPP.desktop
rm -rf ./usr/share/icons/48x48/apps || true
find ./usr/share/icons -path *256* -name gimp.png -exec cp {} $LOWERAPP.png \; || true
find ./usr/share/icons -path *512* -name gimp.png -exec cp {} $LOWERAPP.png \; || true
mkdir -p lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders
cp -L /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/* lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders
#cp -L /zzz/lib/gdk-pixbuf-2.0/2.10.0/loaders/* lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders
mkdir -p lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0
gdk-pixbuf-query-loaders > lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache
mkdir -p ./usr/lib/gtk-2.0
echo "cp -a $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/* ./usr/lib/gtk-2.0"
cp -a $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/* ./usr/lib/gtk-2.0
#mkdir -p ./usr/lib/gtk-2.0/modules
#echo "cp $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/modules/* ./usr/lib/gtk-2.0/modules"
#cp $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/modules/* ./usr/lib/gtk-2.0/modules
#mkdir -p ./usr/lib/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/engines
#echo "cp $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/engines/libpixmap.so ./usr/lib/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/engines"
#cp $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/engines/libpixmap.so ./usr/lib/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/engines
fi
get_apprun
# The original desktop file is a bit strange, hence we provide our own
cat > $LOWERAPP.desktop <<\EOF
[Desktop Entry]
Version=1.0
Type=Application
Name=GIMP AppImage
GenericName=Image Editor
Comment=Create images and edit photographs
Exec=LOWERAPP %f
TryExec=LOWERAPP
Icon=LOWERAPP
Terminal=false
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
StartupNotify=true
MimeType=image/bmp;image/g3fax;image/gif;image/x-fits;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/x-gimp-gbr;image/x-gimp-pat;image/x-gimp-gih;image/tiff;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-exr;image/svg+xml;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;image/x-3fr;image/x-adobe-dng;image/x-arw;image/x-bay;image/x-canon-cr2;image/x-canon-crw;image/x-cap;image/x-cr2;image/x-crw;image/x-dcr;image/x-dcraw;image/x-dcs;image/x-dng;image/x-drf;image/x-eip;image/x-erf;image/x-fff;image/x-fuji-raf;image/x-iiq;image/x-k25;image/x-kdc;image/x-mef;image/x-minolta-mrw;image/x-mos;image/x-mrw;image/x-nef;image/x-nikon-nef;image/x-nrw;image/x-olympus-orf;image/x-orf;image/x-panasonic-raw;image/x-pef;image/x-pentax-pef;image/x-ptx;image/x-pxn;image/x-r3d;image/x-raf;image/x-raw;image/x-rw2;image/x-rwl;image/x-rwz;image/x-sigma-x3f;image/x-sony-arw;image/x-sony-sr2;image/x-sony-srf;image/x-sr2;image/x-srf;image/x-x3f;
EOF
sed -i -e "s|LOWERAPP|$LOWERAPP|g" $LOWERAPP.desktop
# Copy in the indirect dependencies
copy_deps ; copy_deps ; copy_deps # Three runs to ensure we catch indirect ones
cp -a zzz/lib/* usr/lib
cp -a zzz/lib64/* usr/lib64
rm -rf zzz
move_lib
#delete_blacklisted
move_blacklisted
mkdir -p usr/share/mypaint/brushes
for brush in classic deevad experimental kaerhon_v1 ramon tanda; do
cp -r ../../checkout/mypaint/brushes/$brush usr/share/mypaint/brushes
done
# patch_usr
# Patching only the executable files seems not to be enough for darktable
find usr/ -type f -exec sed -i -e "s|$PREFIX|././|g" {} \;
find usr/ -type f -exec sed -i -e "s|/usr|././|g" {} \;
# patch for using system-supplied python interpreter
cp $PREFIX/lib/gimp/2.0/interpreters/pygimp.interp usr/lib/gimp/2.0/interpreters/pygimp.interp
# Workaround for:
# GLib-GIO-ERROR **: Settings schema 'org.gtk.Settings.FileChooser' is not installed
# when trying to use the file open dialog
# AppRun exports usr/share/glib-2.0/schemas/ which might be hurting us here
( mkdir -p usr/share/glib-2.0/schemas/ ; cd usr/share/glib-2.0/schemas/ ; ln -s /usr/share/glib-2.0/schemas/gschemas.compiled . )
# Workaround for:
# ImportError: /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0: undefined symbol: XRRGetMonitors
cp $(ldconfig -p | grep libgdk-x11-2.0.so.0 | cut -d ">" -f 2 | xargs) ./usr/lib/
cp $(ldconfig -p | grep libgtk-x11-2.0.so.0 | cut -d ">" -f 2 | xargs) ./usr/lib/
#VER1=$(pkg-config --modversion gimp-2.0)-test
VER1=$(pkg-config --modversion gimp-2.0)-$(date +%Y%m%d)
if [ x"$FULL_BUNDLING" = "x1" ]; then
VER1="${VER1}-full"
fi
GLIBC_NEEDED=$(glibc_needed)
VERSION=$VER1.glibc$GLIBC_NEEDED
echo $VERSION
get_desktopintegration $LOWERAPP
cp -a ../../$LOWERAPP.wrapper ./usr/bin/$LOWERAPP.wrapper
#cp -a ../../desktopintegration ./usr/bin/$LOWERAPP.wrapper
#chmod a+x ./usr/bin/$LOWERAPP.wrapper
#sed -i -e "s|Exec=$LOWERAPP|Exec=$LOWERAPP.wrapper|g" $LOWERAPP.desktop
# Go out of AppImage
cd ..
ARCH="x86_64"
generate_appimage
@probonopd

This comment has been minimized.

Show comment
Hide comment
@probonopd

probonopd Aug 31, 2016

Which distribution and version are you building this on?

Which distribution and version are you building this on?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment