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 Checkout and compile commit ident
15 -t --tag Checkout and compile tag (e.g. v1.4 or v1.3)
18 # Essential for compiling
27 # Optional for both GTK2 and GTK3
29 "LCMS (for color management)"
31 "exiv2 (for exif handling)"
33 "lua (for --remote commands)"
35 "libffmpegthumbnailer (for mpeg thumbnails)"
36 "libffmpegthumbnailer-dev"
37 "libtiff (for tiff support)"
39 "libjpeg (for jpeg support"
41 "librsvg2 (for viewing .svg images"
43 "libwmf (for viewing .wmf images)"
45 "exiftran (for image rotation)"
47 "imagemagick (for image rotation)"
49 "ufraw (for RAW file handling)"
51 "markdown (for generating README help file)"
55 # Optional for GTK3 only
57 "libchamplain gtk (for GPS maps)"
58 "libchamplain-gtk-0.12-dev"
59 "libchamplain (for GPS maps)"
60 "libchamplain-0.12-dev"
61 "libpoppler (for pdf file preview)"
65 # Optional pixbuf loaders
66 optional_loaders_array=(
69 ".psd Photoshop images"
77 arraylength=${#essential_array[@]}
78 for (( i=0; i<${arraylength}; i=i+1 ));
80 res=$(dpkg-query --show --showformat='${Status}' ${essential_array[$i]} 2>&1)
81 if [[ $res != "install ok installed"* ]]
83 sudo apt-get --assume-yes install ${essential_array[$i]}
89 res=$(dpkg-query --show --showformat='${Status}' "libgtk-3-dev" 2>&1)
90 if [[ $res != "install ok installed"* ]]
92 sudo apt-get --assume-yes install libgtk-3-dev
95 res=$(dpkg-query --show --showformat='${Status}' "libgtk2.0-dev" 2>&1)
96 if [[ $res != "install ok installed"* ]]
98 sudo apt-get --assume-yes install libgtk2.0-dev
112 sudo apt-get --assume-yes install $1
122 rm -rf webp-pixbuf-loader-master
123 sudo apt-get --assume-yes install libglib2.0-dev libgdk-pixbuf2.0-dev libwebp-dev
124 wget https://github.com/aruiz/webp-pixbuf-loader/archive/master.zip
126 cd webp-pixbuf-loader-master
130 sudo gdk-pixbuf-query-loaders --update-cache
132 rm -rf webp-pixbuf-loader-master
138 rm -rf gdk-pixbuf-psd
139 git clone https://github.com/and-rom/gdk-pixbuf-psd.git
144 sudo gdk-pixbuf-query-loaders --update-cache
146 rm -rf gdk-pixbuf-psd
151 rm -rf xcf-pixbuf-loader
152 git clone https://github.com/StephaneDelcroix/xcf-pixbuf-loader.git
157 # There must be a better way...
158 loader_locn=$(gdk-pixbuf-query-loaders | grep "LoaderDir" | tr -d '#[:space:]')
167 sudo cp .libs/libioxcf.so $2
168 sudo gdk-pixbuf-query-loaders --update-cache
171 rm -rf xcf-pixbuf-loader
174 install_extra_loaders()
176 if [ -n "$extra_loaders" ]
204 current_dir=$(basename $PWD)
205 if [[ $current_dir == "geeqie" ]]
208 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
216 zenity --title="Uninstall Geeqie" --width=370 --text="This is not a geeqie installation folder!\n\n$PWD" --warning 2>/dev/null
223 # Parse the comand line
224 OPTS=$(getopt -o vhc:t: --long version,help,commit:,tag: -- "$@")
253 # If a Geeqie folder already exists here, warn the user
256 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
261 # If it looks like a Geeqie download folder, assume an update
262 if [ -d ".git" ] && [ -d "src" ] && [ -f "geeqie.1" ]
266 # If it looks like something else is already installed here, warn the user
267 if [ -d ".git" ] || [ -d "src" ]
269 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
277 if [[ $mode == "install" ]]
279 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."
281 title="Install Geeqie and dependencies"
283 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."
285 title="Update Geeqie and re-install"
288 # Ask whether to install GTK2 or GTK3 or uninstall
290 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)
297 if [[ $gtk_version == "Uninstall" ]]
303 sleep 100 | zenity --title="$title" --text="Checking for installed files" --width=370 --progress --pulsate 2>/dev/null &
306 # Get the standard options that are not yet installed
307 arraylength=${#optional_array[@]}
308 for (( i=0; i<${arraylength}; i=i+2 ));
310 res=$(dpkg-query --show --showformat='${Status}' ${optional_array[$i+1]} 2>&1)
311 if [[ $res != "install ok installed"* ]]
313 if [ -z "$option_string" ]
315 option_string=$'TRUE\n'"${optional_array[$i]}"$'\n'"${optional_array[$i+1]}"
317 option_string="$option_string"$'\nTRUE\n'"${optional_array[$i]}"$'\n'"${optional_array[$i+1]}"
322 # If GTK3 required, get the GTK3 options not yet installed
323 if [[ "$gtk_version" == "GTK3"* ]]
325 arraylength=${#optional_gtk3_array[@]}
326 for (( i=0; i<${arraylength}; i=i+2 ));
328 res=$(dpkg-query --show --showformat='${Status}' ${optional_gtk3_array[$i+1]} 2>&1)
329 if [[ $res != "install ok installed"* ]]
331 if [ -z "$option_string" ]
333 option_string=$'TRUE\n'"${optional_gtk3_array[$i]}"$'\n'"${optional_gtk3_array[$i+1]}"
335 option_string="$option_string"$'\nTRUE\n'"${optional_gtk3_array[$i]}"$'\n'"${optional_gtk3_array[$i+1]}"
341 # Get the optional loaders not yet installed
343 gdk-pixbuf-query-loaders | grep WebP >/dev/null
346 if [ -z "$loaders_string" ]
348 loaders_string=$'nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
350 loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
355 gdk-pixbuf-query-loaders | grep psd >/dev/null
358 if [ -z "$loaders_string" ]
360 loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
362 loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
367 gdk-pixbuf-query-loaders | grep xcf >/dev/null
370 if [ -z "$loaders_string" ]
372 loaders_string=$'FALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
374 loaders_string="$loaders_string"$'\nFALSE\n'"${optional_loaders_array[$i]}"$'\n'"${optional_loaders_array[$i+1]}"
378 kill $zen_pid 2>/dev/null
380 # Ask the user which options to install
381 if [ -n "$option_string" ]
383 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)
391 # Ask the user which extra loaders to install
392 if [ -n "$loaders_string" ]
394 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)
402 install_essential $gtk_version
404 install_extra_loaders
406 if [[ $mode == "install" ]]
408 ret=$(git clone git://www.geeqie.org/geeqie.git)
420 if [[ $mode == "install" ]]
425 sudo make maintainer-clean
430 git checkout "$COMMIT"
437 if [[ $gtk_version == "GTK3"* ]]
441 ./autogen.sh --disable-gtk3