From eb548c5aeecf84fdbc0cb713ac512576ef1b55e5 Mon Sep 17 00:00:00 2001 From: blackflux Date: Sat, 6 Apr 2019 19:32:43 -0700 Subject: [PATCH] feat: added linux installation script --- pack.xml | 7 + static/install.sh | 195 ++++++++++++++++++ .../com.blackflux.voxelshop.desktop | 11 + static/share/pixmaps/icon-48x48.png | Bin 0 -> 5164 bytes static/uninstall.sh | 79 +++++++ 5 files changed, 292 insertions(+) create mode 100644 static/install.sh create mode 100644 static/share/applications/com.blackflux.voxelshop.desktop create mode 100644 static/share/pixmaps/icon-48x48.png create mode 100644 static/uninstall.sh diff --git a/pack.xml b/pack.xml index db9139f4..323a95b7 100644 --- a/pack.xml +++ b/pack.xml @@ -15,6 +15,13 @@ LICENSE.txt + + ${project.basedir}/static + voxelshop/ + + **/* + + ${project.build.directory} voxelshop/ diff --git a/static/install.sh b/static/install.sh new file mode 100644 index 00000000..48e94c57 --- /dev/null +++ b/static/install.sh @@ -0,0 +1,195 @@ +#!/bin/sh +# by Poikilos (Jake Gustafson) +me=`basename $0` +echo "Installing VoxelShop..." + +customDie() { + echo + echo "ERROR:" + echo " $1" + echo + echo + ret=1 + if [ ! -z $2 ]; then ret=$2; fi + exit $ret +} + +# region environment checks + +if [ -z "$REFRESH_WM" ]; then + REFRESH_WM=true + echo "REFRESH_WM not set, so using: '$REFRESH_WM'" +elif [ "@$REFRESH_WM" = "@TRUE" ]; then + REFRESH_WM=true +elif [ "@$REFRESH_WM" = "@1" ]; then + REFRESH_WM=true +elif [ "@$REFRESH_WM" = "@yes" ]; then + REFRESH_WM=true +elif [ "@$REFRESH_WM" = "@on" ]; then + REFRESH_WM=true +fi +if [ -z "$PREFIX" ]; then + if [[ $EUID = 0 ]]; then + PREFIX=/usr/local + echo "PREFIX not set, so using '$PREFIX'" + else + PREFIX=$HOME/.local + echo "PREFIX not set, and you're not root, so using '$PREFIX'" + fi +else + echo "Installing to specified PREFIX '$PREFIX'..." +fi + +if [ ! -d "$PREFIX" ]; then + echo "WARNING: PREFIX $PREFIX not a directory; continuing anyway..." + echo "Press Ctrl+C to cancel..." + sleep 1 + echo "3..." + sleep 1 + echo "2..." + sleep 1 + echo "1..." + sleep 1 +fi + +# endregion environment checks + +# region hardcoded settings + +bin_name=voxelshop +dest_dir_name=voxelshop +dest_dir_path=$PREFIX/lib/$dest_dir_name +install_src=`pwd` +lib_jar_name=voxelshop-start.jar +lib_jar_path=$install_src/$lib_jar_name + +if [ ! -f "$lib_jar_path" ]; then + customDie "You must run $me in same path as built $lib_jar_name." +fi +icon_img_name=voxelshop.png +icon_img_path=$install_src/share/pixmaps/icon-48x48.png +shortcut_name=com.blackflux.voxelshop.desktop +shortcut_path=$install_src/share/applications/$shortcut_name + +# endregion hardcoded settings + +if [ ! -d $PREFIX/lib ]; then + mkdir -p $PREFIX/lib || customDie "Cannot create $PREFIX/lib" +fi + +if [ ! -d $PREFIX/bin ]; then + mkdir -p $PREFIX/bin || customDie "Cannot create $PREFIX/bin" +fi + +if [ ! -d "$dest_dir_path/lib" ]; then + msg="Cannot create '$dest_dir_path/lib'" + mkdir -p $dest_dir_path/lib || customDie "$msg" +fi + +if [ ! -d "$dest_dir_path/share/applications" ]; then + msg="Cannot create '$dest_dir_path/share/applications'" + mkdir -p $dest_dir_path/share/applications || customDie "$msg" +fi +install_log_name=install.log +install_log=$dest_dir_path/$install_log_name +if [ -f "$install_log" ]; then + # stopping in this case avoids creating a faulty install_log that + # may contain files the user added to the directory. + customDie "The program is already installed. Run uninstall.sh or delete $dest_dir_path before trying to reinstall." +fi +cp -f $install_src/* $dest_dir_path/ +find $dest_dir_path | grep -v "$install_log_name" > $install_log +if [ ! -f "$install_log" ]; then + customDie "Cancelling install since cannot create $install_log." +fi +cp -f $install_src/lib/* $dest_dir_path/lib/ +find $dest_dir_path | grep -v "$install_log_name" >> $install_log +echo +if [ -f "$bin_name" ]; then + echo "Rewriting $bin_name..." +else + echo "Writing $bin_name..." +fi +echo '#!/bin/sh' > $PREFIX/bin/$bin_name +echo "java -jar $dest_dir_path/$lib_jar_name" >> $PREFIX/bin/$bin_name +echo "$PREFIX/bin/$bin_name" >> $install_log +chmod +x $PREFIX/bin/$bin_name +if [ -f $shortcut_path ]; then + #tmp_shortcut=/tmp/$USER$shortcut_name + tmp_shortcut=$dest_dir_path/share/applications/$shortcut_name + if [ -f $tmp_shortcut ]; then + rm $tmp_shortcut || customDie "Cannot remove old $tmp_shortcut" + fi + cat $shortcut_path | grep -v "Icon=" | grep -v "Exec=" | grep -v "Path=" > $tmp_shortcut + echo "$tmp_shortcut" >> $install_log + if [ ! -f $tmp_shortcut ]; then + customDie "Cannot rewrite $tmp_shortcut." + fi + echo Exec=$PREFIX/bin/$bin_name >> $tmp_shortcut + if [ -f $icon_img_path ]; then + if [ ! -d $PREFIX/share/pixmaps ]; then + mkdir -p $PREFIX/share/pixmaps || customDie "Cannot create $PREFIX/share/pixmaps" + fi + if [ ! -d $PREFIX/share/pixmaps ]; then + echo "ERROR: cannot create $PREFIX/share/pixmaps, so not installing graphic for icon" + else + cp -f $icon_img_path $PREFIX/share/pixmaps/ + echo Icon=$PREFIX/share/pixmaps/$icon_img_name >> $tmp_shortcut + fi + if [ ! -d $PREFIX/share/applications ]; then + mkdir -p "$PREFIX/share/applications" || customDie "Cannot create $PREFIX/share/applications." + fi + if [ -f $PREFIX/share/applications/$shortcut_name ]; then + rm -f $PREFIX/share/applications/$shortcut_name || customDie "Cannot remove old $PREFIX/share/applications/$shortcut_name." + fi + if [ -d $PREFIX/share/applications/$shortcut_name ]; then + rm -f $PREFIX/share/applications/$shortcut_name || customDie "Cannot remove bogus folder (should be file): $PREFIX/share/applications/$shortcut_name" + fi + cp $tmp_shortcut $PREFIX/share/applications/$shortcut_name + echo "$PREFIX/share/applications/$shortcut_name" >> $install_log + echo "Writing shortcut '$PREFIX/share/applications/$shortcut_name' is complete." + if [ "@$REFRESH_WM" = "@true" ]; then + if [[ $EUID -ne 0 ]]; then + if [ -f "`command -v gnome-shell`" ]; then + echo "* refreshing Gnome icons..." + gnome-shell --replace & disown + sleep 10 + fi + if [ -f "$HOME/.cache/icon-cache.kcache" ]; then + echo "* clearing $HOME/.cache/icon-cache.kcache..." + rm $HOME/.cache/icon-cache.kcache + fi + if [ -f "`command -v kquitapp5`" ]; then + echo "* refreshing KDE icons..." + if [ "`command -v kstart5`" ]; then + kquitapp5 plasmashell && kstart5 plasmashell && sleep 15 || echo " - skipping plasmashell icon refresh (session not loaded)" + else + kquitapp5 plasmashell && kstart plasmashell && sleep 15 || echo " - skipping plasmashell icon refresh (session not loaded)" + fi + fi + if [ -f "`command -v xfce4-panel`" ]; then + echo "* refreshing Xfce icons..." + xfce4-panel -r && xfwm4 --replace + sleep 5 + fi + if [ -f "`command -v lxpanelctl`" ]; then + echo "* refreshing LXDE icons..." + lxpanelctl restart && openbox --restart + sleep 5 + fi + if [ -f "`command -v lxqt-panel`" ]; then + echo "* refreshing LXQt icons..." + killall lxqt-panel && lxqt-panel & + fi + else + echo "Since running as root, this script will not update application menus for any currently logged in user(s)." + fi + fi + else + echo "WARNING: cannot add graphical icon to shortcut since missing $install_src/$icon_img_name." + fi +else + echo "WARNING: cannot add shortcut since missing $shortcut_path." +fi + +echo "Install is complete." diff --git a/static/share/applications/com.blackflux.voxelshop.desktop b/static/share/applications/com.blackflux.voxelshop.desktop new file mode 100644 index 00000000..7a2ba5e0 --- /dev/null +++ b/static/share/applications/com.blackflux.voxelshop.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=VoxelShop +GenericName=VoxelShop 3D Voxel-based Painting Software +Comment=3D voxel modeling, rendering and export +Keywords=3d;cg;modeling;painting;sculpting;texturing;voxel,rendering;game design; +Exec=voxelshop %f +Icon=/usr/local/share/pixmaps/voxelshop.png +Terminal=false +Type=Application +Categories=Graphics;3DGraphics; +MimeType=application/x-voxelshop; diff --git a/static/share/pixmaps/icon-48x48.png b/static/share/pixmaps/icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9f388b14b6b823ff9c64a4014d65ed29e354eb GIT binary patch literal 5164 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 a_}2jGNBBABNjhc#0000