Skip to content

Commit 05654ba

Browse files
fiechrFederico Fissore
authored and
Federico Fissore
committed
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.
1 parent 2779b07 commit 05654ba

File tree

7 files changed

+201
-17
lines changed

7 files changed

+201
-17
lines changed

build/build.xml

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@
515515
<target name="linux-checkos" unless="linux">
516516
<echo>
517517
=======================================================
518-
Arduino for Linux can only be built on on unix systems.
518+
Arduino for Linux can only be built on unix systems.
519519

520520
Bye.
521521
=======================================================
@@ -537,6 +537,10 @@
537537
<fileset dir="linux/dist" includes="lib/**" />
538538
</copy>
539539

540+
<copy todir="linux/work/lib">
541+
<fileset dir="shared" includes="icons/**/*.png" />
542+
</copy>
543+
540544
<copy todir="linux/work/lib" flatten="true">
541545
<fileset refid="runtime.jars" />
542546
</copy>
@@ -545,13 +549,17 @@
545549
<param name="target.path" value="linux/work" />
546550
</antcall>
547551

552+
<copy tofile="linux/work/lib/arduino-arduinoide.xml" file="linux/dist/mime.xml" />
553+
<copy todir="linux/work/lib" file="linux/dist/desktop.template" />
554+
548555
<copy todir="linux/work" file="linux/dist/arduino" />
549-
<copy todir="linux/work" file="linux/dist/arduino.desktop" />
550556
<copy todir="linux/work" file="linux/dist/install.sh" />
551-
<chmod perm="755" file="linux/work/arduino" />
557+
<copy todir="linux/work" file="linux/dist/uninstall.sh" />
552558

553-
<copy todir="linux/work" file="linux/dist/arduino" />
554-
<chmod perm="755" file="linux/work/arduino" />
559+
<chmod perm="ugo+x">
560+
<fileset dir="linux/work" includes="arduino" />
561+
<fileset dir="linux/work" includes="**/*.sh" />
562+
</chmod>
555563

556564
<antcall target="unzip">
557565
<param name="archive_file" value="./libastylej-2.05.1.zip" />

build/linux/dist/arduino.desktop renamed to build/linux/dist/desktop.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ Type=Application
33
Name=Arduino IDE
44
GenericName=Arduino IDE
55
Comment=Open-source electronics prototyping platform
6-
Exec=FULL_PATH/arduino
7-
Icon=FULL_PATH/lib/arduino.png
6+
Exec=<BINARY_LOCATION>
7+
Icon=<ICON_NAME>
88
Terminal=false
99
Categories=Development;IDE;Electronics;
1010
MimeType=text/x-arduino

build/linux/dist/install.sh

100644100755
Lines changed: 180 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,187 @@
11
#!/bin/sh
22

3-
CURDIR=`pwd`
4-
APPDIR="$(dirname -- "$(readlink -f -- "${0}")" )"
3+
# This script adds a menu item, icons and mime type for Arduino for the current
4+
# user. If possible, it will use the xdg-utils - or fall back to just creating
5+
# and copying a desktop file to the user's dir.
6+
# If called with the "-u" option, it will undo the changes.
57

6-
cd "$APPDIR"
8+
# Resource name to use (including vendor prefix)
9+
RESOURCE_NAME=arduino-arduinoide
710

8-
# Set arduino.desktop absolute path workaround
9-
mv arduino.desktop arduino.desktop-bak
10-
sed -e "s,FULL_PATH,$PWD,g" arduino.desktop-bak > arduino.desktop
11-
rm arduino.desktop-bak
11+
# Get absolute path from which this script file was executed
12+
# Use "pwd -P" to resolve symlinks to their target
13+
SCRIPT_PATH=$( cd $(dirname $0) ; pwd )
14+
cd "$SCRIPT_PATH"
1215

13-
cp arduino.desktop ~/.local/share/applications/arduino.desktop
14-
cp arduino.desktop ~/Desktop/arduino.desktop
16+
# Install using xdg-utils
17+
xdg_install_f() {
1518

16-
echo "Installed Arduino IDE icons on menu and desktop !"
19+
# Create a temp dir accessible by all users
20+
TMP_DIR=`mktemp --directory`
1721

22+
# Create *.desktop file using the existing template file
23+
sed -e "s,<BINARY_LOCATION>,${SCRIPT_PATH}/arduino,g" \
24+
-e "s,<ICON_NAME>,${RESOURCE_NAME},g" "${SCRIPT_PATH}/lib/desktop.template" > "${TMP_DIR}/${RESOURCE_NAME}.desktop"
25+
26+
# Install the icon files using name and resolutions
27+
xdg-icon-resource install --context apps --size 16 "${SCRIPT_PATH}/lib/icons/16x16/apps/arduino.png" $RESOURCE_NAME
28+
xdg-icon-resource install --context apps --size 24 "${SCRIPT_PATH}/lib/icons/24x24/apps/arduino.png" $RESOURCE_NAME
29+
xdg-icon-resource install --context apps --size 32 "${SCRIPT_PATH}/lib/icons/32x32/apps/arduino.png" $RESOURCE_NAME
30+
xdg-icon-resource install --context apps --size 48 "${SCRIPT_PATH}/lib/icons/48x48/apps/arduino.png" $RESOURCE_NAME
31+
xdg-icon-resource install --context apps --size 64 "${SCRIPT_PATH}/lib/icons/64x64/apps/arduino.png" $RESOURCE_NAME
32+
xdg-icon-resource install --context apps --size 72 "${SCRIPT_PATH}/lib/icons/72x72/apps/arduino.png" $RESOURCE_NAME
33+
xdg-icon-resource install --context apps --size 96 "${SCRIPT_PATH}/lib/icons/96x96/apps/arduino.png" $RESOURCE_NAME
34+
xdg-icon-resource install --context apps --size 128 "${SCRIPT_PATH}/lib/icons/128x128/apps/arduino.png" $RESOURCE_NAME
35+
xdg-icon-resource install --context apps --size 256 "${SCRIPT_PATH}/lib/icons/256x256/apps/arduino.png" $RESOURCE_NAME
36+
37+
# Install the created *.desktop file
38+
xdg-desktop-menu install "${TMP_DIR}/${RESOURCE_NAME}.desktop"
39+
40+
# Create icon on the desktop
41+
xdg-desktop-icon install "${TMP_DIR}/${RESOURCE_NAME}.desktop"
42+
43+
# Install Arduino mime type
44+
xdg-mime install "${SCRIPT_PATH}/lib/${RESOURCE_NAME}.xml"
45+
46+
# Install icons for mime type
47+
xdg-icon-resource install --context mimetypes --size 16 "${SCRIPT_PATH}/lib/icons/16x16/apps/arduino.png" text-x-arduino
48+
xdg-icon-resource install --context mimetypes --size 24 "${SCRIPT_PATH}/lib/icons/24x24/apps/arduino.png" text-x-arduino
49+
xdg-icon-resource install --context mimetypes --size 32 "${SCRIPT_PATH}/lib/icons/32x32/apps/arduino.png" text-x-arduino
50+
xdg-icon-resource install --context mimetypes --size 48 "${SCRIPT_PATH}/lib/icons/48x48/apps/arduino.png" text-x-arduino
51+
xdg-icon-resource install --context mimetypes --size 64 "${SCRIPT_PATH}/lib/icons/64x64/apps/arduino.png" text-x-arduino
52+
xdg-icon-resource install --context mimetypes --size 72 "${SCRIPT_PATH}/lib/icons/72x72/apps/arduino.png" text-x-arduino
53+
xdg-icon-resource install --context mimetypes --size 96 "${SCRIPT_PATH}/lib/icons/96x96/apps/arduino.png" text-x-arduino
54+
xdg-icon-resource install --context mimetypes --size 128 "${SCRIPT_PATH}/lib/icons/128x128/apps/arduino.png" text-x-arduino
55+
xdg-icon-resource install --context mimetypes --size 256 "${SCRIPT_PATH}/lib/icons/256x256/apps/arduino.png" text-x-arduino
56+
57+
# Make Arduino IDE the default application for *.ino
58+
xdg-mime default ${RESOURCE_NAME}.desktop text/x-arduino
59+
60+
# Clean up
61+
rm "${TMP_DIR}/${RESOURCE_NAME}.desktop"
62+
rmdir "$TMP_DIR"
63+
64+
}
65+
66+
# Install by simply copying desktop file (fallback)
67+
simple_install_f() {
68+
69+
# Create a temp dir accessible by all users
70+
TMP_DIR=`mktemp --directory`
71+
72+
# Create *.desktop file using the existing template file
73+
sed -e "s,<BINARY_LOCATION>,${SCRIPT_PATH}/arduino,g" \
74+
-e "s,<ICON_NAME>,${SCRIPT_PATH}/lib/arduino.png,g" "${SCRIPT_PATH}/lib/desktop.template" > "${TMP_DIR}/${RESOURCE_NAME}.desktop"
75+
76+
mkdir -p ~/.local/share/applications
77+
cp "${TMP_DIR}/${RESOURCE_NAME}.desktop" ~/.local/share/applications/
78+
79+
# Clean up
80+
rm "${TMP_DIR}/${RESOURCE_NAME}.desktop"
81+
rmdir "$TMP_DIR"
82+
83+
}
84+
85+
# Uninstall using xdg-utils
86+
xdg_uninstall_f() {
87+
88+
# Remove *.desktop file
89+
xdg-desktop-menu uninstall ${RESOURCE_NAME}.desktop
90+
91+
# Remove icon from desktop
92+
xdg-desktop-icon uninstall ${RESOURCE_NAME}.desktop
93+
94+
# Remove icons
95+
xdg-icon-resource uninstall --size 16 $RESOURCE_NAME
96+
xdg-icon-resource uninstall --size 24 $RESOURCE_NAME
97+
xdg-icon-resource uninstall --size 32 $RESOURCE_NAME
98+
xdg-icon-resource uninstall --size 48 $RESOURCE_NAME
99+
xdg-icon-resource uninstall --size 64 $RESOURCE_NAME
100+
xdg-icon-resource uninstall --size 72 $RESOURCE_NAME
101+
xdg-icon-resource uninstall --size 96 $RESOURCE_NAME
102+
xdg-icon-resource uninstall --size 128 $RESOURCE_NAME
103+
xdg-icon-resource uninstall --size 256 $RESOURCE_NAME
104+
105+
# Remove MIME type icons
106+
xdg-icon-resource uninstall --size 16 text-x-arduino
107+
xdg-icon-resource uninstall --size 24 text-x-arduino
108+
xdg-icon-resource uninstall --size 32 text-x-arduino
109+
xdg-icon-resource uninstall --size 48 text-x-arduino
110+
xdg-icon-resource uninstall --size 64 text-x-arduino
111+
xdg-icon-resource uninstall --size 72 text-x-arduino
112+
xdg-icon-resource uninstall --size 96 text-x-arduino
113+
xdg-icon-resource uninstall --size 128 text-x-arduino
114+
xdg-icon-resource uninstall --size 256 text-x-arduino
115+
116+
# Remove Arduino MIME type
117+
xdg-mime uninstall "${SCRIPT_PATH}/lib/${RESOURCE_NAME}.xml"
118+
119+
}
120+
121+
# Uninstall by simply removing desktop files (fallback), incl. old one
122+
simple_uninstall_f() {
123+
124+
if [ -f ~/.local/share/applications/arduino.desktop ]; then
125+
rm ~/.local/share/applications/arduino.desktop
126+
fi
127+
128+
if [ -f ~/.local/share/applications/${RESOURCE_NAME}.desktop ]; then
129+
rm ~/.local/share/applications/${RESOURCE_NAME}.desktop
130+
fi
131+
132+
}
133+
134+
# Update desktop file and mime databases (if possible)
135+
updatedbs_f() {
136+
137+
if [ -d ~/.local/share/applications ]; then
138+
if command -v update-desktop-database > /dev/null; then
139+
update-desktop-database ~/.local/share/applications
140+
fi
141+
fi
142+
143+
if [ -d ~/.local/share/mime ]; then
144+
if command -v update-mime-database > /dev/null; then
145+
update-mime-database ~/.local/share/mime
146+
fi
147+
fi
148+
149+
}
150+
151+
# Check availability of xdg-utils
152+
xdg_exists_f() {
153+
154+
if ! command -v xdg-icon-resource > /dev/null; then return 1; fi
155+
if ! command -v xdg-desktop-menu > /dev/null; then return 1; fi
156+
if ! command -v xdg-desktop-icon > /dev/null; then return 1; fi
157+
if ! command -v xdg-mime > /dev/null; then return 1; fi
158+
return 0
159+
160+
}
161+
162+
# If possible, use xdg-utils, if not, use a more basic approach
163+
if xdg_exists_f; then
164+
if [ "$1" = "-u" ]; then
165+
echo "Removing menu item, icons and file association for Arduino IDE..."
166+
xdg_uninstall_f
167+
simple_uninstall_f
168+
else
169+
echo "Adding menu item, icons and file association for Arduino IDE..."
170+
xdg_uninstall_f
171+
simple_uninstall_f
172+
xdg_install_f
173+
fi
174+
else
175+
if [ "$1" = "-u" ]; then
176+
echo "Removing menu item for Arduino IDE..."
177+
simple_uninstall_f
178+
else
179+
echo "Adding menu item for Arduino IDE..."
180+
simple_uninstall_f
181+
simple_install_f
182+
fi
183+
fi
184+
updatedbs_f
185+
echo "...done!"
186+
187+
exit 0

build/linux/dist/uninstall.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/sh
2+
3+
SCRIPT_PATH=$( cd $(dirname $0) ; pwd )
4+
cd "$SCRIPT_PATH"
5+
6+
./install.sh -u
5.29 KB
Loading
6.31 KB
Loading
9.92 KB
Loading

0 commit comments

Comments
 (0)