Enhanced script for compiling on Debian systems
authorColin Clark <colin.clark@cclark.uk>
Fri, 27 Jul 2018 15:49:58 +0000 (16:49 +0100)
committerColin Clark <colin.clark@cclark.uk>
Fri, 27 Jul 2018 15:49:58 +0000 (16:49 +0100)
README.md
geeqie-install-debian.sh [new symlink]
install-dependencies-debian.sh [deleted file]
web/geeqie-install-debian.sh [new file with mode: 0755]
web/index.html

index b8a433f..f61d860 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
       ###################################################################
       ##                          Geeqie x.x                           ##
       ##                                                               ##
-      ##              Copyright (C) 2008 - 2017 The Geeqie Team        ##
+      ##              Copyright (C) 2008 - 2018 The Geeqie Team        ##
       ##              Copyright (C) 1999 - 2006 John Ellis.            ##
       ##                                                               ##
       ##                      Use at your own risk!                    ##
@@ -102,14 +102,13 @@ Geeqie is a graphics file viewer. Basic features:
 
 Geeqie is available as a package with some distributions.
 
-The source tar of the latest formal release may be downloaded: <http://geeqie.org/geeqie-1.3.tar.xz>
-
 However Geeqie is stable, and you may download the latest version (if you have installed git) from here:
 
 Either: `git clone git://www.geeqie.org/geeqie.git`
 
 Or: `git clone http://www.geeqie.org/git/geeqie.git`
 
+For Ubuntu and other Debian-based systems, [this script](http://www.geeqie.org/web/geeqie-install-debian.sh) will download Geeqie sources, all dependencies, and compile and install Geeqie. You may also select which optional libraries to install.
 
 ## Installation
 
diff --git a/geeqie-install-debian.sh b/geeqie-install-debian.sh
new file mode 120000 (symlink)
index 0000000..30997a9
--- /dev/null
@@ -0,0 +1 @@
+web/geeqie-install-debian.sh
\ No newline at end of file
diff --git a/install-dependencies-debian.sh b/install-dependencies-debian.sh
deleted file mode 100755 (executable)
index c840788..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# This script will aid compiling Geeqie on Debian style systems.
-# You should edit this script to install only those libraries you need.
-
-#!/bin/bash
-zenity --question --title="Install Geeqie dependencies" --width=300 --text="This script will aid compiling Geeqie from sources on Debian style systems\n\nYou should first edit this script to install only those libraries you need." --ok-label="Cancel" --cancel-label="Run script"
-
-if [ $? -eq 0 ]
-then
-  exit
-fi
-
-# For cloning the repository
-sudo apt install git
-
-# For compiling
-sudo apt-get install build-essential
-sudo apt-get install autoconf
-sudo apt-get install libglib2.0
-sudo apt-get install intltool
-# For the GTK2 version of Geeqie
-sudo apt-get install libgtk2.0-dev
-# For the GTK3 version of Geeqie
-sudo apt-get install libgtk-3-dev
-
-# For Little CMS
-sudo apt-get install liblcms2-2
-sudo apt-get install liblcms2-dev
-
-# For exiv2
-sudo apt-get install libgexiv2-2
-sudo apt-get install libgexiv2-dev
-
-# For lua
-sudo apt-get install lua5.1
-sudo apt-get install liblua5.1-0
-sudo apt-get install liblua5.1-dev
-
-# For the mpeg thumbnails
-sudo apt-get install libffmpegthumbnailer4v5
-sudo apt-get install libffmpegthumbnailer-dev
-
-# For the GPS map feature
-sudo apt-get install libchamplain-gtk-0.12-0
-sudo apt-get install libchamplain-gtk-0.12-dev
-sudo apt-get install libchamplain-0.12-0
-sudo apt-get install libchamplain-0.12-dev
-
-# For the preview of pdf files
-sudo apt-get install libpoppler-glib-dev
-
-# For the display of .svg images
-sudo apt-get install librsvg2-common
-
-# For the display of .wmf images
-sudo apt-get install libwmf0.2-7-gtk
-
-
-# Other programs which help when using Geeqie
-
-# For image rotation
-sudo apt-get install exiftran
-sudo apt-get install imagemagick
-
-# For RAW file handling
-sudo apt-get install ufraw
-
-# For generating some documentation files
-sudo apt-get install markdown
-
-
-# To install, create a folder in which to compile Geeqie:
-# mkdir <folder>
-# cd <folder>
-# git clone git://www.geeqie.org/geeqie.git
-# cd geeqie
-# For GTK3 (including GPS maps):
-# ./autogen.sh
-# For GTK2:
-# ./autogen.sh --disable-gtk3
-# make -j
-# sudo make install
-
-# Uninstall:
-#sudo make uninstall
-
diff --git a/web/geeqie-install-debian.sh b/web/geeqie-install-debian.sh
new file mode 100755 (executable)
index 0000000..e0d9efb
--- /dev/null
@@ -0,0 +1,449 @@
+#!/bin/bash
+version="2018-07-26"
+description=$'
+Geeqie is an image viewer.
+This script will download, compile, and install Geeqie on Debian-based systems.
+If run from a folder that already contains the Geeqie sources, the source
+code will be updated from the repository.
+Dialogs allow the user to install additional features, including
+additional pixbuf loaders.
+
+Command line options are:
+-v --version The version of this file
+-h --help Output this text
+-c --commit Checkout and compile commit ident
+-t --tag Checkout and compile tag (e.g. v1.4 or v1.3)
+'
+
+# Essential for compiling
+essential_array=(
+"git"
+"build-essential"
+"autoconf"
+"libglib2.0-0"
+"intltool"
+)
+
+# Optional for both GTK2 and GTK3
+optional_array=(
+"LCMS (for color management)"
+"liblcms2-dev"
+"exiv2 (for exif handling)"
+"libgexiv2-dev"
+"lua (for --remote commands)"
+"liblua5.1-0-dev"
+"libffmpegthumbnailer (for mpeg thumbnails)"
+"libffmpegthumbnailer-dev"
+"libtiff (for tiff support)"
+"libtiff-dev"
+"libjpeg (for jpeg support"
+"libjpeg-dev"
+"librsvg2 (for viewing .svg images"
+"librsvg2-common"
+"libwmf (for viewing .wmf images)"
+"libwmf0.2-7-gtk"
+"exiftran (for image rotation)"
+"exiftran"
+"imagemagick (for image rotation)"
+"imagemagick"
+"ufraw (for RAW file handling)"
+"ufraw"
+"markdown (for generating README help file)"
+"markdown"
+)
+
+# Optional for GTK3 only
+optional_gtk3_array=(
+"libchamplain gtk (for GPS maps)"
+"libchamplain-gtk-0.12-dev"
+"libchamplain (for GPS maps)"
+"libchamplain-0.12-dev"
+"libpoppler (for pdf file preview)"
+"libpoppler-glib-dev"
+)
+
+# Optional pixbuf loaders
+optional_loaders_array=(
+".webp WebP images"
+"webp"
+".psd Photoshop images"
+"psd"
+".xcf Gimp files"
+"xcf"
+)
+
+install_essential()
+{
+arraylength=${#essential_array[@]}
+for (( i=0; i<${arraylength}; i=i+1 ));
+do
+       res=$(dpkg-query --show --showformat='${Status}' ${essential_array[$i]} 2>&1)
+       if [[ $res != "install ok installed"* ]]
+       then
+               sudo apt-get --assume-yes install ${essential_array[$i]}
+       fi
+done
+
+if [[ $1 == "GTK3" ]]
+then
+       res=$(dpkg-query --show --showformat='${Status}' "libgtk-3-dev" 2>&1)
+       if [[ $res != "install ok installed"* ]]
+       then
+               sudo apt-get --assume-yes install libgtk-3-dev
+       fi
+else
+       res=$(dpkg-query --show --showformat='${Status}' "libgtk2.0-dev" 2>&1)
+       if [[ $res != "install ok installed"* ]]
+       then
+               sudo apt-get --assume-yes install libgtk2.0-dev
+       fi
+fi
+}
+
+install_options()
+{
+if [ -n "$options" ]
+then
+       OLDIFS=$IFS
+       IFS='|'
+       set $options
+       while [ $# -gt 0 ];
+       do
+               sudo apt-get --assume-yes install $1
+               shift
+       done
+       IFS=$OLDIFS
+fi
+return
+}
+
+install_webp()
+{
+rm -rf webp-pixbuf-loader-master
+sudo apt-get --assume-yes install libglib2.0-dev libgdk-pixbuf2.0-dev libwebp-dev
+wget https://github.com/aruiz/webp-pixbuf-loader/archive/master.zip
+unzip master.zip
+cd webp-pixbuf-loader-master
+./waf configure
+./waf build
+sudo ./waf install
+sudo gdk-pixbuf-query-loaders --update-cache
+cd -
+rm -rf webp-pixbuf-loader-master
+rm master.zip
+}
+
+install_psd()
+{
+rm -rf gdk-pixbuf-psd
+git clone https://github.com/and-rom/gdk-pixbuf-psd.git
+cd gdk-pixbuf-psd
+./autogen.sh
+make
+sudo make install
+sudo gdk-pixbuf-query-loaders --update-cache
+cd -
+rm -rf gdk-pixbuf-psd
+}
+
+install_xcf()
+{
+rm -rf xcf-pixbuf-loader
+git clone https://github.com/StephaneDelcroix/xcf-pixbuf-loader.git
+cd xcf-pixbuf-loader
+./autogen.sh
+make
+
+# There must be a better way...
+loader_locn=$(gdk-pixbuf-query-loaders | grep "LoaderDir"  | tr -d '#[:space:]')
+
+OLDIFS=$IFS
+IFS='='
+set $loader_locn
+OLDIFS=$IFS
+
+if [ -d $2 ]
+then
+       sudo cp .libs/libioxcf.so $2
+       sudo gdk-pixbuf-query-loaders --update-cache
+fi
+cd -
+rm -rf  xcf-pixbuf-loader
+}
+
+install_extra_loaders()
+{
+if [ -n "$extra_loaders" ]
+then
+       OLDIFS=$IFS
+       IFS='|'
+       set $extra_loaders
+       while [ $# -gt 0 ];
+       do
+               case $1 in
+               "webp" )
+                       install_webp
+               ;;
+               "psd" )
+                       install_psd
+               ;;
+               "xcf" )
+                       install_xcf
+               ;;
+               esac
+
+               shift
+       done
+       IFS=$OLDIFS
+fi
+return
+}
+
+uninstall()
+{
+current_dir=$(basename $PWD)
+if [[ $current_dir == "geeqie" ]]
+then
+       sudo make uninstall
+       zenity --title="Uninstall Geeqie" --width=370 --text="WARNING.\nThis will delete folder:\n\n$PWD\n\nand all sub-folders!" --question --ok-label="Cancel" --cancel-label="OK"  2>/dev/null
+
+       if [[ $? == 1 ]]
+       then
+               cd ..
+               sudo rm -rf geeqie
+       fi
+else
+       zenity --title="Uninstall Geeqie" --width=370 --text="This is not a geeqie installation folder!\n\n$PWD" --warning  2>/dev/null
+fi
+exit
+}
+
+
+# Entry point
+# Parse the comand line
+OPTS=$(getopt -o vhc:t: --long version,help,commit:,tag: -- "$@")
+eval set -- "$OPTS"
+
+while true;
+do
+       case "$1" in
+       -v | --version )
+               echo "$version"
+               exit
+               ;;
+       -h | --help )
+               echo "$description"
+               exit
+               ;;
+       -c | --commit )
+               COMMIT="$2"
+               shift
+               shift
+               ;;
+       -t | --tag )
+               TAG="$2"
+               shift;
+               shift
+               ;;
+       * ) break
+               ;;
+       esac
+done
+
+# If a Geeqie folder already exists here, warn the user
+if [ -d "geeqie" ]
+then
+       zenity --info --title="Install Geeqie and dependencies" --width=370 --text="This script is for use on Ubuntu and other\nDebian-based installations.\nIt will download, compile, and install Geeqie source\ncode and its dependencies.\n\nA sub-folder named \"geeqie\" will be created in the\nfolder this script is run from, and the source code\nwill be downloaded to that sub-folder.\n\nA sub-folder of that name already exists.\nPlease try another folder." 2>/dev/null
+
+       exit
+fi
+
+# If it looks like a Geeqie download folder, assume an update
+if [ -d ".git" ] && [ -d "src" ] && [ -f "geeqie.1" ]
+then
+       mode="update"
+else
+       # If it looks like something else is already installed here, warn the user
+       if [ -d ".git" ] || [ -d "src" ]
+       then
+               zenity --info --title="Install Geeqie and dependencies" --width=370 --text="This script is for use on Ubuntu and other\nDebian-based installations.\nIt will download, compile, and install Geeqie source\ncode and its dependencies.\n\nIt looks like you are running this script from a folder which already has software installed.\n\nPlease try another folder." 2>/dev/null
+
+               exit
+       else
+               mode="install"
+       fi
+fi
+
+if [[ $mode == "install" ]]
+then
+       message="This script is for use on Ubuntu and other\nDebian-based installations.\nIt will download, compile, and install Geeqie source\ncode and its dependencies.\n\nA sub-folder named \"geeqie\" will be created in the\nfolder this script is run from, and the source code\nwill be downloaded to that sub-folder.\n\nIn this dialog you must select whether to compile\nfor GTK2 or GTK3.\nIf you want to use GPS maps or pdf preview,\nyou must choose GTK3.\nThe GTK2 version has a slightly different\nlook-and-feel compared to the GTK3 version,\nbut otherwise has the same features.\nYou may easily switch between the two after\ninstallation.\n\nIn subsequent dialogs you may choose which\noptional features to install."
+
+       title="Install Geeqie and dependencies"
+else
+       message="This script is for use on Ubuntu and other\nDebian-based installations.\nIt will update the Geeqie source code and its\ndependencies, and will compile and install Geeqie.\n\nYou may also switch the installed version from\nGTK2 to GTK3 and vice versa.\n\nIn this dialog you must select whether to compile\nfor GTK2 or GTK3.\nIf you want to use GPS maps or pdf preview,\nyou must choose GTK3.\nThe GTK2 version has a slightly different\nlook-and-feel compared to the GTK3 version,\nbut otherwise has the same features.\n\nIn subsequent dialogs you may choose which\noptional features to install."
+
+       title="Update Geeqie and re-install"
+fi
+
+# Ask whether to install GTK2 or GTK3 or uninstall
+
+gtk_version=$(zenity --title="$title" --width=370 --text="$message" --list --radiolist --column "" --column "" TRUE "GTK3 (required for GPS maps and pdf preview)" FALSE "GTK2" FALSE "Uninstall" --cancel-label="Cancel" --ok-label="OK" --hide-header 2>/dev/null)
+
+if [[ $? == 1 ]]
+then
+       exit
+fi
+
+if [[ $gtk_version == "Uninstall" ]]
+then
+       uninstall
+       exit
+fi
+
+sleep 100 | zenity --title="$title" --text="Checking for installed files" --width=370 --progress --pulsate 2>/dev/null &
+zen_pid=$!
+
+# Get the standard options that are not yet installed
+arraylength=${#optional_array[@]}
+for (( i=0; i<${arraylength}; i=i+2 ));
+do
+       res=$(dpkg-query --show --showformat='${Status}' ${optional_array[$i+1]}  2>&1)
+       if [[ $res != "install ok installed"* ]]
+       then
+               if [ -z "$option_string" ]
+               then
+                       option_string=$'TRUE\n'"${optional_array[$i]}"$'\n'"${optional_array[$i+1]}"
+               else
+                       option_string="$option_string"$'\nTRUE\n'"${optional_array[$i]}"$'\n'"${optional_array[$i+1]}"
+               fi
+       fi
+done
+
+# If GTK3 required, get the GTK3 options not yet installed
+if [[ "$gtk_version" == "GTK3"* ]]
+then
+       arraylength=${#optional_gtk3_array[@]}
+       for (( i=0; i<${arraylength}; i=i+2 ));
+       do
+               res=$(dpkg-query --show --showformat='${Status}' ${optional_gtk3_array[$i+1]}  2>&1)
+               if [[ $res != "install ok installed"* ]]
+               then
+                       if [ -z "$option_string" ]
+                       then
+                               option_string=$'TRUE\n'"${optional_gtk3_array[$i]}"$'\n'"${optional_gtk3_array[$i+1]}"
+                       else
+                               option_string="$option_string"$'\nTRUE\n'"${optional_gtk3_array[$i]}"$'\n'"${optional_gtk3_array[$i+1]}"
+                       fi
+               fi
+       done
+fi
+
+# Get the optional loaders not yet installed
+((i=0))
+gdk-pixbuf-query-loaders | grep WebP >/dev/null
+if [[ $? == 1 ]]
+then
+       if [ -z "$loaders_string" ]
+       then
+               loaders_string=$'nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
+       else
+               loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
+       fi
+fi
+
+((i=i+2))
+gdk-pixbuf-query-loaders | grep psd >/dev/null
+if [[ $? == 1 ]]
+then
+       if [ -z "$loaders_string" ]
+       then
+               loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
+       else
+               loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
+       fi
+fi
+
+((i=i+2))
+gdk-pixbuf-query-loaders | grep xcf >/dev/null
+if [[ $? == 1 ]]
+then
+       if [ -z "$loaders_string" ]
+       then
+               loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
+       else
+               loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
+       fi
+fi
+
+kill $zen_pid 2>/dev/null
+
+# Ask the user which options to install
+if [ -n "$option_string" ]
+then
+       options=$(echo "$option_string" | zenity --title="$title" --width=370 --height=400 --list --checklist --text 'Select which library files to install:' --column='Select' --column='Library files' --column='Library' --hide-column=3 --print-column=3 2>/dev/null)
+
+       if [[ $? == 1 ]]
+       then
+               exit
+       fi
+fi
+
+# Ask the user which extra loaders to install
+if [ -n "$loaders_string" ]
+then
+       extra_loaders=$(echo "$loaders_string" | zenity --title="$title" --width=370 --height=400 --list --checklist --text 'These loaders are not part of the main repository,\nbut are known to work to some extent.' --column='Select' --column='Library files' --column='Library' --hide-column=3 --print-column=3 2>/dev/null)
+
+       if [[ $? == 1 ]]
+       then
+               exit
+       fi
+fi
+
+install_essential $gtk_version
+install_options
+install_extra_loaders
+
+if [[ $mode == "install" ]]
+then
+       ret=$(git clone git://www.geeqie.org/geeqie.git)
+else
+       git checkout master
+       ret=$(git pull)
+fi
+
+if [[ $? != 0 ]]
+then
+       echo "$ret"
+       exit
+fi
+
+if [[ $mode == "install" ]]
+then
+       cd geeqie
+else
+       sudo make uninstall
+       sudo make maintainer-clean
+fi
+
+if [[ "$COMMIT" ]]
+then
+       git checkout "$COMMIT"
+fi
+if [[ "TAG" ]]
+then
+       git checkout "$TAG"
+fi
+
+if [[ $gtk_version == "GTK3"* ]]
+then
+       ./autogen.sh
+else
+       ./autogen.sh --disable-gtk3
+fi
+
+make -j
+sudo make install
+
+exit
+
+
index ce9e6ff..17986e6 100644 (file)
         <a href="http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git">Geeqie repository.</a></p>Geeqie is stable, there
         are frequent updates, and compiling is a quick and painless task. The instructions for <a href=
         "installing.html">downloading and installing</a> are easy to follow.
+        <p>For Ubuntu and other Debian-based systems, <a href="http://www.geeqie.org/web/geeqie-install-debian.sh"> this script</a> will download Geeqie sources, all dependencies, and compile and install Geeqie. You may also select which optional libraries to install.</p>
         <h4>Support</h4>
        <p>If you need help or have questions about Geeqie, just <a href="mailto:geeqie@freelists.org">send a message</a> to the <a href="https://www.freelists.org/list/geeqie">mailing list</a>.
        <form action="https://www.freelists.org/cgi-bin/subscription.cgi" method="post">
-          Although it is not mandatory, we encourage you to subscribe: <input type="text" name="email">
-          <input type="hidden" name="list" value="YOURLISTNAMEHERE">
+          Although it is not mandatory, we encourage you to subscribe -<br/>Your email address: <input type="text" name="email">
+          <input type="hidden" name="list" value="geeqie">
           <input type="hidden" name="url_or_message" value="You are registred to geeqie mailing list now.">
           <input type="hidden" name="action" value="subscribe">
           <input type="submit" value="Go!">