4 Geeqie is an image viewer.
5 This script will download, compile, and install Geeqie on Debian-based systems.
6 If run from a folder that already contains the Geeqie sources, the source
7 code will be updated from the repository.
8 Dialogs allow the user to install additional features, including
9 additional pixbuf loaders.
11 Command line options are:
12 -v --version The version of this file
13 -h --help Output this text
14 -c --commit=ID Checkout and compile commit ID
15 -t --tag=TAG Checkout and compile TAG (e.g. v1.4 or v1.3)
16 -b --back=N Checkout commit -N (e.g. "-b 1" for last-but-one commit)
19 # Essential for compiling
28 # Optional for both GTK2 and GTK3
30 "LCMS (for color management)"
32 "exiv2 (for exif handling)"
34 "lua (for --remote commands)"
36 "libffmpegthumbnailer (for mpeg thumbnails)"
37 "libffmpegthumbnailer-dev"
38 "libtiff (for tiff support)"
40 "libjpeg (for jpeg support"
42 "librsvg2 (for viewing .svg images"
44 "libwmf (for viewing .wmf images)"
46 "exiftran (for image rotation)"
48 "imagemagick (for image rotation)"
50 "ufraw (for RAW file handling)"
52 "markdown (for generating README help file)"
56 # Optional for GTK3 only
58 "libchamplain gtk (for GPS maps)"
59 "libchamplain-gtk-0.12-dev"
60 "libchamplain (for GPS maps)"
61 "libchamplain-0.12-dev"
62 "libpoppler (for pdf file preview)"
66 # Optional pixbuf loaders
67 optional_loaders_array=(
70 ".psd Photoshop images"
76 ####################################################################
78 # Derived from: https://github.com/coto/server-easy-install (GPL)
79 ####################################################################
82 echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
87 OS=`lowercase \`uname\``
91 if [ "${OS}" == "windowsnt" ]
94 elif [ "${OS}" == "darwin" ]
99 if [ "${OS}" = "SunOS" ]
103 OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
104 elif [ "${OS}" = "AIX" ]
106 OSSTR="${OS} `oslevel` (`oslevel -r`)"
107 elif [ "${OS}" = "Linux" ]
109 if [ -f /etc/redhat-release ]
111 DistroBasedOn='RedHat'
112 DIST=`cat /etc/redhat-release |sed s/\ release.*//`
113 PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
114 REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
115 elif [ -f /etc/SuSE-release ]
118 PSUEDONAME=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
119 REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
120 elif [ -f /etc/mandrake-release ]
122 DistroBasedOn='Mandrake'
123 PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
124 REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
125 elif [ -f /etc/debian_version ]
127 DistroBasedOn='Debian'
128 if [ -f /etc/lsb-release ]
130 DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'`
131 PSUEDONAME=`cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }'`
132 REV=`cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }'`
135 if [ -f /etc/UnitedLinux-release ]
137 DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
140 DistroBasedOn=`lowercase $DistroBasedOn`
143 readonly DistroBasedOn
154 arraylength=${#essential_array[@]}
155 for (( i=0; i<${arraylength}; i=i+1 ));
157 package_query ${essential_array[$i]}
160 package_install ${essential_array[$i]}
164 if [[ $1 == "GTK3" ]]
166 package_query "libgtk-3-dev"
169 package_install libgtk-3-dev
172 package_query "libgtk2.0-dev"
175 package_install libgtk2.0-dev
198 rm -rf webp-pixbuf-loader-master
199 package_install libglib2.0-dev libgdk-pixbuf2.0-dev libwebp-dev python-minimal
200 wget https://github.com/aruiz/webp-pixbuf-loader/archive/master.zip
202 cd webp-pixbuf-loader-master
206 sudo gdk-pixbuf-query-loaders --update-cache
208 rm -rf webp-pixbuf-loader-master
214 rm -rf gdk-pixbuf-psd
215 git clone https://github.com/and-rom/gdk-pixbuf-psd.git
220 sudo gdk-pixbuf-query-loaders --update-cache
222 rm -rf gdk-pixbuf-psd
227 rm -rf xcf-pixbuf-loader
228 package_install libbz2-dev
229 git clone https://github.com/StephaneDelcroix/xcf-pixbuf-loader.git
234 # There must be a better way...
235 loader_locn=$(gdk-pixbuf-query-loaders | grep "LoaderDir" | tr -d '#[:space:]')
244 sudo cp .libs/libioxcf.so $2
245 sudo gdk-pixbuf-query-loaders --update-cache
248 rm -rf xcf-pixbuf-loader
251 install_extra_loaders()
253 if [ -n "$extra_loaders" ]
281 current_dir=$(basename $PWD)
282 if [[ $current_dir == "geeqie" ]]
285 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
293 zenity --title="Uninstall Geeqie" --width=370 --text="This is not a geeqie installation folder!\n\n$PWD" --warning 2>/dev/null
300 if [[ $DistroBasedOn == "debian" ]]
302 res=$(dpkg-query --show --showformat='${Status}' $1 2>&1)
303 if [[ "$res" == "install ok installed"* ]]
315 if [[ $DistroBasedOn == "debian" ]]
317 sudo apt-get --assume-yes install $@
325 if [[ $DistroBasedOn != "debian" ]]
327 zenity --error --title="Install Geeqie and dependencies" --width=370 --text="Unknown operating system:\n
328 Operating System: $OS
330 Psuedoname: $PSUEDONAME
332 DistroBasedOn: $DistroBasedOn
334 Machine: $MACH" 2>/dev/null
339 # Parse the comand line
340 OPTS=$(getopt -o vhc:t:b: --long version,help,commit:,tag:,back: -- "$@")
374 # If a Geeqie folder already exists here, warn the user
377 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
382 # If it looks like a Geeqie download folder, assume an update
383 if [ -d ".git" ] && [ -d "src" ] && [ -f "geeqie.1" ]
387 # If it looks like something else is already installed here, warn the user
388 if [ -d ".git" ] || [ -d "src" ]
390 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
398 # Use GTK3 as default
402 if [[ $mode == "install" ]]
404 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."
406 title="Install Geeqie and dependencies"
409 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."
411 title="Update Geeqie and re-install"
414 # When updating, use previous installation as default
415 if [[ -f config.log ]]
417 grep gtk-2.0 config.log >/dev/null
429 # Ask whether to install GTK2 or GTK3 or uninstall
431 gtk_version=$(zenity --title="$title" --width=370 --text="$message" --list --radiolist --column "" --column "" "$gtk3_installed" "GTK3 (required for GPS maps and pdf preview)" "$gtk2_installed" "GTK2" FALSE "Uninstall" --cancel-label="Cancel" --ok-label="OK" --hide-header 2>/dev/null)
438 if [[ $gtk_version == "Uninstall" ]]
444 sleep 100 | zenity --title="$title" --text="Checking for installed files" --width=370 --progress --pulsate 2>/dev/null &
447 # Get the standard options that are not yet installed
448 arraylength=${#optional_array[@]}
449 for (( i=0; i<${arraylength}; i=i+2 ));
451 package_query ${optional_array[$i+1]}
454 if [ -z "$option_string" ]
456 option_string="$install_option"$'\n'"${optional_array[$i]}"$'\n'"${optional_array[$i+1]}"
458 option_string="$option_string"$'\n'"$install_option"$'\n'"${optional_array[$i]}"$'\n'"${optional_array[$i+1]}"
463 # If GTK3 required, get the GTK3 options not yet installed
464 if [[ "$gtk_version" == "GTK3"* ]]
466 arraylength=${#optional_gtk3_array[@]}
467 for (( i=0; i<${arraylength}; i=i+2 ));
469 package_query ${optional_gtk3_array[$i+1]}
472 if [ -z "$option_string" ]
474 option_string="$install_option"$'\n'"${optional_gtk3_array[$i]}"$'\n'"${optional_gtk3_array[$i+1]}"
476 option_string="$option_string"$'\n'"$install_option"$'\n'"${optional_gtk3_array[$i]}"$'\n'"${optional_gtk3_array[$i+1]}"
482 # Get the optional loaders not yet installed
484 gdk-pixbuf-query-loaders | grep WebP >/dev/null
487 if [ -z "$loaders_string" ]
489 loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
491 loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
497 gdk-pixbuf-query-loaders | grep psd >/dev/null
500 if [ -z "$loaders_string" ]
502 loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
504 loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
509 gdk-pixbuf-query-loaders | grep xcf >/dev/null
512 if [ -z "$loaders_string" ]
514 loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
516 loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
520 kill $zen_pid 2>/dev/null
522 # Ask the user which options to install
523 if [ -n "$option_string" ]
525 options=$(echo "$option_string" | zenity --title="$title" --width=400 --height=500 --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)
533 # Ask the user which extra loaders to install
534 if [ -n "$loaders_string" ]
536 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)
544 install_essential $gtk_version
546 install_extra_loaders
548 if [[ $mode == "install" ]]
550 ret=$(git clone git://www.geeqie.org/geeqie.git 2>&1 >/dev/null)
555 zenity --title="$title" --width=370 --height=400 --error --text="Git checkout master error" 2>/dev/null
558 ret=$(git pull 2>&1 >/dev/null)
563 zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
567 if [[ $mode == "install" ]]
572 sudo make maintainer-clean
577 ret=$(git checkout master~"$BACK" 2>&1 >/dev/null)
580 zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
585 ret=$(git checkout "$COMMIT" 2>&1 >/dev/null)
588 zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
593 ret=$(git checkout "$TAG" 2>&1 >/dev/null)
596 zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
601 if [[ $gtk_version == "GTK3"* ]]
605 ./autogen.sh --disable-gtk3