diff --git a/build/build.xml b/build/build.xml index 526f091e20c..e019ef40783 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 80% rename from build/linux/dist/arduino.desktop rename to build/linux/dist/desktop.template index 8b271e49393..4f51de39535 100644 --- a/build/linux/dist/arduino.desktop +++ b/build/linux/dist/desktop.template @@ -3,9 +3,10 @@ Type=Application Name=Arduino IDE GenericName=Integrated Development Environment Comment=An IDE for Arduino-compatible electronics prototyping platforms -Exec=FULL_PATH/arduino -Icon=FULL_PATH/lib/arduino.png +Exec= +Icon= Terminal=false Categories=Development;IDE;Electronics; MimeType=text/x-arduino Keywords=embedded electronics;electronics;avr;microcontroller; +StartupWMClass=processing-app-Base diff --git a/build/linux/dist/install.sh b/build/linux/dist/install.sh old mode 100644 new mode 100755 index 28bea92ae96..c7808186909 --- a/build/linux/dist/install.sh +++ b/build/linux/dist/install.sh @@ -1,17 +1,243 @@ #!/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 +# (Could be changed to "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 +# Default mode is to install. +UNINSTALL=false -echo "Installed Arduino IDE icons on menu and desktop !" +# If possible, get location of the desktop folder. Default to ~/Desktop +XDG_DESKTOP_DIR="${HOME}/Desktop" +if [ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/user-dirs.dirs" ]; then + . "${XDG_CONFIG_HOME:-${HOME}/.config}/user-dirs.dirs" +fi +# Install using xdg-utils +xdg_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,,${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 "${HOME}/.local/share/applications" + cp "${TMP_DIR}/${RESOURCE_NAME}.desktop" "${HOME}/.local/share/applications/" + + # Copy desktop icon if desktop dir exists (was found) + if [ -d "${XDG_DESKTOP_DIR}" ]; then + cp "${TMP_DIR}/${RESOURCE_NAME}.desktop" "${XDG_DESKTOP_DIR}/" + # Altering file permissions to avoid "Untrusted Application Launcher" error on Ubuntu + chmod u+x "${XDG_DESKTOP_DIR}/${RESOURCE_NAME}.desktop" + fi + + # Clean up temp dir + 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 "${HOME}/.local/share/applications/arduino.desktop" ]; then + rm "${HOME}/.local/share/applications/arduino.desktop" + fi + + if [ -f "${HOME}/.local/share/applications/${RESOURCE_NAME}.desktop" ]; then + rm "${HOME}/.local/share/applications/${RESOURCE_NAME}.desktop" + fi + + if [ -f "${XDG_DESKTOP_DIR}/arduino.desktop" ]; then + rm "${XDG_DESKTOP_DIR}/arduino.desktop" + fi + + if [ -f "${XDG_DESKTOP_DIR}/${RESOURCE_NAME}.desktop" ]; then + rm "${XDG_DESKTOP_DIR}/${RESOURCE_NAME}.desktop" + fi + +} + +# Update desktop file and mime databases (if possible) +updatedbs_f() { + + if [ -d "${HOME}/.local/share/applications" ]; then + if command -v update-desktop-database > /dev/null; then + update-desktop-database "${HOME}/.local/share/applications" + fi + fi + + if [ -d "${HOME}/.local/share/mime" ]; then + if command -v update-mime-database > /dev/null; then + update-mime-database "${HOME}/.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 + +} + +# Shows a description of the available options +display_help_f() { + printf "\nThis script will add a Arduino IDE desktop shortcut, menu item,\n" + printf "icons and file associations for the current user.\n" + if ! xdg_exists_f; then + printf "\nxdg-utils are recommended to be installed, so this script can use them.\n" + fi + printf "\nOptional arguments are:\n\n" + printf "\t-u, --uninstall\t\tRemoves shortcut, menu item and icons.\n\n" + printf "\t-h, --help\t\tShows this help again.\n\n" +} + +# Check for provided arguments +while [ $# -gt 0 ] ; do + ARG="${1}" + case $ARG in + -u|--uninstall) + UNINSTALL=true + shift + ;; + -h|--help) + display_help_f + exit 0 + ;; + *) + printf "\nInvalid option -- '${ARG}'\n" + display_help_f + exit 1 + ;; + esac +done + +# If possible, use xdg-utils, if not, use a more basic approach +if xdg_exists_f; then + if [ ${UNINSTALL} = true ]; then + printf "Removing desktop shortcut and menu item for Arduino IDE..." + xdg_uninstall_f + simple_uninstall_f + else + printf "Adding desktop shortcut, menu item and file associations for Arduino IDE..." + xdg_uninstall_f + simple_uninstall_f + xdg_install_f + fi +else + if [ ${UNINSTALL} = true ]; then + printf "Removing desktop shortcut and menu item for Arduino IDE..." + simple_uninstall_f + else + printf "Adding desktop shortcut and menu item for Arduino IDE..." + simple_uninstall_f + simple_install_f + fi +fi +updatedbs_f +printf " done!\n" + +exit 0 diff --git a/build/linux/dist/uninstall.sh b/build/linux/dist/uninstall.sh new file mode 100755 index 00000000000..d92eeada488 --- /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 00000000000..ee385e39e26 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 00000000000..ac01563da27 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 00000000000..a62383f6b6b Binary files /dev/null and b/build/shared/icons/96x96/apps/arduino.png differ