From 05654ba0aa7182472ed81ed530569ba22b4d420d Mon Sep 17 00:00:00 2001 From: Christian Fiebig Date: Wed, 20 May 2015 21:58:36 +0200 Subject: [PATCH] Replaced/improved Linux install and uninstall scripts. Install script adds menu item, desktop icon, file association for the current user - even if the Arduino installation was placed outside of the user's home dir (such as in /opt or /usr/local). Added three more icon resolutions (64px, 72px, 96px) - by using the 256px file - maybe there is a better source available for this... Modified build.xml for copying the existing icons and mime.xml file, both scripts and adjusted file permissions (ugo+x) for *.sh files to be executable by others by default. --- build/build.xml | 20 +- .../{arduino.desktop => desktop.template} | 4 +- build/linux/dist/install.sh | 190 +++++++++++++++++- build/linux/dist/uninstall.sh | 6 + build/shared/icons/64x64/apps/arduino.png | Bin 0 -> 5418 bytes build/shared/icons/72x72/apps/arduino.png | Bin 0 -> 6460 bytes build/shared/icons/96x96/apps/arduino.png | Bin 0 -> 10153 bytes 7 files changed, 202 insertions(+), 18 deletions(-) rename build/linux/dist/{arduino.desktop => desktop.template} (83%) mode change 100644 => 100755 build/linux/dist/install.sh create mode 100755 build/linux/dist/uninstall.sh create mode 100644 build/shared/icons/64x64/apps/arduino.png create mode 100644 build/shared/icons/72x72/apps/arduino.png create mode 100644 build/shared/icons/96x96/apps/arduino.png diff --git a/build/build.xml b/build/build.xml index 852b248e8..14714c26a 100644 --- a/build/build.xml +++ b/build/build.xml @@ -515,7 +515,7 @@ ======================================================= - Arduino for Linux can only be built on on unix systems. + Arduino for Linux can only be built on unix systems. Bye. ======================================================= @@ -537,6 +537,10 @@ + + + + @@ -545,13 +549,17 @@ - - - - + + - + + + + + + + diff --git a/build/linux/dist/arduino.desktop b/build/linux/dist/desktop.template similarity index 83% rename from build/linux/dist/arduino.desktop rename to build/linux/dist/desktop.template index 5830d8b18..e761f9f1b 100644 --- a/build/linux/dist/arduino.desktop +++ b/build/linux/dist/desktop.template @@ -3,8 +3,8 @@ Type=Application Name=Arduino IDE GenericName=Arduino IDE Comment=Open-source electronics prototyping platform -Exec=FULL_PATH/arduino -Icon=FULL_PATH/lib/arduino.png +Exec= +Icon= Terminal=false Categories=Development;IDE;Electronics; MimeType=text/x-arduino diff --git a/build/linux/dist/install.sh b/build/linux/dist/install.sh old mode 100644 new mode 100755 index 28bea92ae..378991079 --- a/build/linux/dist/install.sh +++ b/build/linux/dist/install.sh @@ -1,17 +1,187 @@ #!/bin/sh -CURDIR=`pwd` -APPDIR="$(dirname -- "$(readlink -f -- "${0}")" )" +# This script adds a menu item, icons and mime type for Arduino for the current +# user. If possible, it will use the xdg-utils - or fall back to just creating +# and copying a desktop file to the user's dir. +# If called with the "-u" option, it will undo the changes. -cd "$APPDIR" +# Resource name to use (including vendor prefix) +RESOURCE_NAME=arduino-arduinoide -# Set arduino.desktop absolute path workaround -mv arduino.desktop arduino.desktop-bak -sed -e "s,FULL_PATH,$PWD,g" arduino.desktop-bak > arduino.desktop -rm arduino.desktop-bak +# Get absolute path from which this script file was executed +# Use "pwd -P" to resolve symlinks to their target +SCRIPT_PATH=$( cd $(dirname $0) ; pwd ) +cd "$SCRIPT_PATH" -cp arduino.desktop ~/.local/share/applications/arduino.desktop -cp arduino.desktop ~/Desktop/arduino.desktop +# Install using xdg-utils +xdg_install_f() { -echo "Installed Arduino IDE icons on menu and desktop !" + # Create a temp dir accessible by all users + TMP_DIR=`mktemp --directory` + # Create *.desktop file using the existing template file + sed -e "s,,${SCRIPT_PATH}/arduino,g" \ + -e "s,,${RESOURCE_NAME},g" "${SCRIPT_PATH}/lib/desktop.template" > "${TMP_DIR}/${RESOURCE_NAME}.desktop" + + # Install the icon files using name and resolutions + xdg-icon-resource install --context apps --size 16 "${SCRIPT_PATH}/lib/icons/16x16/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 24 "${SCRIPT_PATH}/lib/icons/24x24/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 32 "${SCRIPT_PATH}/lib/icons/32x32/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 48 "${SCRIPT_PATH}/lib/icons/48x48/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 64 "${SCRIPT_PATH}/lib/icons/64x64/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 72 "${SCRIPT_PATH}/lib/icons/72x72/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 96 "${SCRIPT_PATH}/lib/icons/96x96/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 128 "${SCRIPT_PATH}/lib/icons/128x128/apps/arduino.png" $RESOURCE_NAME + xdg-icon-resource install --context apps --size 256 "${SCRIPT_PATH}/lib/icons/256x256/apps/arduino.png" $RESOURCE_NAME + + # Install the created *.desktop file + xdg-desktop-menu install "${TMP_DIR}/${RESOURCE_NAME}.desktop" + + # Create icon on the desktop + xdg-desktop-icon install "${TMP_DIR}/${RESOURCE_NAME}.desktop" + + # Install Arduino mime type + xdg-mime install "${SCRIPT_PATH}/lib/${RESOURCE_NAME}.xml" + + # Install icons for mime type + xdg-icon-resource install --context mimetypes --size 16 "${SCRIPT_PATH}/lib/icons/16x16/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 24 "${SCRIPT_PATH}/lib/icons/24x24/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 32 "${SCRIPT_PATH}/lib/icons/32x32/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 48 "${SCRIPT_PATH}/lib/icons/48x48/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 64 "${SCRIPT_PATH}/lib/icons/64x64/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 72 "${SCRIPT_PATH}/lib/icons/72x72/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 96 "${SCRIPT_PATH}/lib/icons/96x96/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 128 "${SCRIPT_PATH}/lib/icons/128x128/apps/arduino.png" text-x-arduino + xdg-icon-resource install --context mimetypes --size 256 "${SCRIPT_PATH}/lib/icons/256x256/apps/arduino.png" text-x-arduino + + # Make Arduino IDE the default application for *.ino + xdg-mime default ${RESOURCE_NAME}.desktop text/x-arduino + + # Clean up + rm "${TMP_DIR}/${RESOURCE_NAME}.desktop" + rmdir "$TMP_DIR" + +} + +# Install by simply copying desktop file (fallback) +simple_install_f() { + + # Create a temp dir accessible by all users + TMP_DIR=`mktemp --directory` + + # Create *.desktop file using the existing template file + sed -e "s,,${SCRIPT_PATH}/arduino,g" \ + -e "s,,${SCRIPT_PATH}/lib/arduino.png,g" "${SCRIPT_PATH}/lib/desktop.template" > "${TMP_DIR}/${RESOURCE_NAME}.desktop" + + mkdir -p ~/.local/share/applications + cp "${TMP_DIR}/${RESOURCE_NAME}.desktop" ~/.local/share/applications/ + + # Clean up + rm "${TMP_DIR}/${RESOURCE_NAME}.desktop" + rmdir "$TMP_DIR" + +} + +# Uninstall using xdg-utils +xdg_uninstall_f() { + + # Remove *.desktop file + xdg-desktop-menu uninstall ${RESOURCE_NAME}.desktop + + # Remove icon from desktop + xdg-desktop-icon uninstall ${RESOURCE_NAME}.desktop + + # Remove icons + xdg-icon-resource uninstall --size 16 $RESOURCE_NAME + xdg-icon-resource uninstall --size 24 $RESOURCE_NAME + xdg-icon-resource uninstall --size 32 $RESOURCE_NAME + xdg-icon-resource uninstall --size 48 $RESOURCE_NAME + xdg-icon-resource uninstall --size 64 $RESOURCE_NAME + xdg-icon-resource uninstall --size 72 $RESOURCE_NAME + xdg-icon-resource uninstall --size 96 $RESOURCE_NAME + xdg-icon-resource uninstall --size 128 $RESOURCE_NAME + xdg-icon-resource uninstall --size 256 $RESOURCE_NAME + + # Remove MIME type icons + xdg-icon-resource uninstall --size 16 text-x-arduino + xdg-icon-resource uninstall --size 24 text-x-arduino + xdg-icon-resource uninstall --size 32 text-x-arduino + xdg-icon-resource uninstall --size 48 text-x-arduino + xdg-icon-resource uninstall --size 64 text-x-arduino + xdg-icon-resource uninstall --size 72 text-x-arduino + xdg-icon-resource uninstall --size 96 text-x-arduino + xdg-icon-resource uninstall --size 128 text-x-arduino + xdg-icon-resource uninstall --size 256 text-x-arduino + + # Remove Arduino MIME type + xdg-mime uninstall "${SCRIPT_PATH}/lib/${RESOURCE_NAME}.xml" + +} + +# Uninstall by simply removing desktop files (fallback), incl. old one +simple_uninstall_f() { + + if [ -f ~/.local/share/applications/arduino.desktop ]; then + rm ~/.local/share/applications/arduino.desktop + fi + + if [ -f ~/.local/share/applications/${RESOURCE_NAME}.desktop ]; then + rm ~/.local/share/applications/${RESOURCE_NAME}.desktop + fi + +} + +# Update desktop file and mime databases (if possible) +updatedbs_f() { + + if [ -d ~/.local/share/applications ]; then + if command -v update-desktop-database > /dev/null; then + update-desktop-database ~/.local/share/applications + fi + fi + + if [ -d ~/.local/share/mime ]; then + if command -v update-mime-database > /dev/null; then + update-mime-database ~/.local/share/mime + fi + fi + +} + +# Check availability of xdg-utils +xdg_exists_f() { + + if ! command -v xdg-icon-resource > /dev/null; then return 1; fi + if ! command -v xdg-desktop-menu > /dev/null; then return 1; fi + if ! command -v xdg-desktop-icon > /dev/null; then return 1; fi + if ! command -v xdg-mime > /dev/null; then return 1; fi + return 0 + +} + +# If possible, use xdg-utils, if not, use a more basic approach +if xdg_exists_f; then + if [ "$1" = "-u" ]; then + echo "Removing menu item, icons and file association for Arduino IDE..." + xdg_uninstall_f + simple_uninstall_f + else + echo "Adding menu item, icons and file association for Arduino IDE..." + xdg_uninstall_f + simple_uninstall_f + xdg_install_f + fi +else + if [ "$1" = "-u" ]; then + echo "Removing menu item for Arduino IDE..." + simple_uninstall_f + else + echo "Adding menu item for Arduino IDE..." + simple_uninstall_f + simple_install_f + fi +fi +updatedbs_f +echo "...done!" + +exit 0 diff --git a/build/linux/dist/uninstall.sh b/build/linux/dist/uninstall.sh new file mode 100755 index 000000000..d92eeada4 --- /dev/null +++ b/build/linux/dist/uninstall.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +SCRIPT_PATH=$( cd $(dirname $0) ; pwd ) +cd "$SCRIPT_PATH" + +./install.sh -u diff --git a/build/shared/icons/64x64/apps/arduino.png b/build/shared/icons/64x64/apps/arduino.png new file mode 100644 index 0000000000000000000000000000000000000000..ee385e39e26d7e1c16efc9910fb6e70500503775 GIT binary patch literal 5418 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 U@A$b@761SM07*qoM6N<$f-EC<$p8QV literal 0 HcmV?d00001 diff --git a/build/shared/icons/72x72/apps/arduino.png b/build/shared/icons/72x72/apps/arduino.png new file mode 100644 index 0000000000000000000000000000000000000000..ac01563da2712088b3ec9e5a08272ba688d0ce8f GIT binary patch literal 6460 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 z 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