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 000000000..ee385e39e Binary files /dev/null and b/build/shared/icons/64x64/apps/arduino.png differ diff --git a/build/shared/icons/72x72/apps/arduino.png b/build/shared/icons/72x72/apps/arduino.png new file mode 100644 index 000000000..ac01563da Binary files /dev/null and b/build/shared/icons/72x72/apps/arduino.png differ diff --git a/build/shared/icons/96x96/apps/arduino.png b/build/shared/icons/96x96/apps/arduino.png new file mode 100644 index 000000000..a62383f6b Binary files /dev/null and b/build/shared/icons/96x96/apps/arduino.png differ