From f9d58b39b42f5a1f475be9962b0a18d9f378215f Mon Sep 17 00:00:00 2001
From: "Silas S. Brown" <ssb22@cam.ac.uk>
Date: Tue, 4 Mar 2025 08:36:48 +0000
Subject: [PATCH] GNU/Linux install script for multiuser + desktop menu entry

---
 INSTALL.txt | 49 ----------------------------------------
 Makefile    |  3 ++-
 install.sh  | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+), 50 deletions(-)
 delete mode 100644 INSTALL.txt
 create mode 100644 install.sh

diff --git a/INSTALL.txt b/INSTALL.txt
deleted file mode 100644
index bad4f89..0000000
--- a/INSTALL.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-Installing Gradint on GNU/Linux systems
----------------------------------------
-
-Gradint does not need to be installed, it can
-just run from the current directory.
-
-If you do want to make a system-wide installation
-(for example if you want to make a package for a
-GNU/Linux distribution), I suggest doing the
-following as root:
-
-mkdir /usr/share/gradint
-cp gradint.py /usr/share/gradint/
-cd samples/utils
-for F in *.py *.sh; do
-  DestFile=/usr/bin/gradint-$(echo $F|sed -e 's/\..*//')
-  cp $F $DestFile
-  chmod +x $DestFile
-done
-cd ../.. ; rm -rf samples/utils
-tar -zcf /usr/share/gradint/new-user.tgz \
-  advanced.txt settings.txt vocab.txt samples
-cat > /usr/bin/gradint <<EOF
-#!/bin/bash
-if ! [ -e "$HOME/gradint" ]; then
-  echo "You will need some prompts and samples in your home directory."
-  echo "Is it OK to unpack an example into $HOME/gradint ?"
-  echo "Ctrl-C to quit or Enter to continue"
-  read
-  echo -n "Unpacking... "
-  mkdir "$HOME/gradint"
-  cd "$HOME/gradint"
-  tar -zxf /usr/share/gradint/new-user.tgz
-  echo "done."
-  echo "Please check the contents of $HOME/gradint"
-  echo "especially the README files."
-  echo "Then you can run gradint again."
-  exit
-fi
-cd "$HOME/gradint"
-python /usr/share/gradint/gradint.py $@
-EOF
-chmod +x /usr/bin/gradint
-
-For a distribution you might also have to write
-man pages and tidy up the help text etc.
-
-Depends: python + a sound player (e.g. alsa-utils)
-Recommends: python-tk python-tksnack sox libsox-fmt-all madplay
diff --git a/Makefile b/Makefile
index 9d79987..d110152 100644
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@ EData := $(shell for N in $(Extra_Data); do if [ -e $$N ]; then echo $$N; fi; do
 Common_Files=vocab.txt settings.txt advanced.txt samples $(EData)
 Most_Mac_Files=$(Common_Files) gradint.py
 Mac_Files=$(Most_Mac_Files) mac/start-gradint.app
-Linux_Files=$(Common_Files) gradint.py INSTALL.txt
+Linux_Files=$(Common_Files) gradint.py install.sh
 Riscos_Files=$(Common_Files) gradint.py
 
 CODE=src/lessonplan.py src/sequence.py src/loop.py src/booktime.py src/play.py src/synth.py src/makeevent.py src/filescan.py src/recording.py src/users.py
@@ -207,6 +207,7 @@ gradint.dmg: gradint-installer.command
 gradint.bgz: $(Linux_Files)
 	mkdir gradint
 	cp -r $(Linux_Files) gradint
+	chmod +x gradint/install.sh
 	tar -c gradint/ | bzip2 -9 > gradint.bgz
 	rm -rf gradint
 
diff --git a/install.sh b/install.sh
new file mode 100644
index 0000000..ec61bf2
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+# Installing Gradint on GNU/Linux systems
+# ---------------------------------------
+
+# Gradint does not need to be installed, it can
+# just run from the current directory.
+
+# If you do want to make a system-wide installation
+# (for example if you want to make a package for a
+# GNU/Linux distribution), I suggest running as root
+# the commands below.
+
+# For a distribution you might also have to write
+# man pages and tidy up the help text etc.
+
+# Depends: python + a sound player (e.g. alsa-utils)
+# Recommends: python-tk python-tksnack sox libsox-fmt-all madplay
+
+# ---------------------------------------
+
+set -e
+PREFIX=/usr/local # or /usr
+if which python; then PYTHON=python; else PYTHON=python3; fi
+
+mkdir -p "$PREFIX/share/gradint"
+mv gradint.py "$PREFIX/share/gradint/"
+cd samples/utils
+for F in *.py *.sh; do
+  DestFile="$PREFIX/bin/gradint-$(echo $F|sed -e 's/\..*//')"
+  mv "$F" "$DestFile"
+  chmod +x "$DestFile"
+done
+cd ../.. ; rm -rf samples/utils
+tar -zcf "$PREFIX/share/gradint/new-user.tgz" \
+  advanced.txt settings.txt vocab.txt samples
+
+cat > "$PREFIX/bin/gradint" <<'EOF'
+#!/bin/bash
+if ! [ -e "$HOME/gradint" ]; then
+  echo -n "Unpacking new user Gradint configuration... "
+  mkdir "$HOME/gradint"
+  cd "$HOME/gradint"
+EOF
+echo "  tar -zxf \"$PREFIX/share/gradint/new-user.tgz\"" >> "$PREFIX/bin/gradint"
+cat >> "$PREFIX/bin/gradint" <<'EOF'
+  echo "done."
+fi
+cd "$HOME/gradint"
+EOF
+echo "$PYTHON \"$PREFIX/share/gradint/gradint.py\" "'$@' >> "$PREFIX/bin/gradint"
+chmod +x "$PREFIX/bin/gradint"
+
+mkdir -p "$PREFIX/share/applications"
+cat > "$PREFIX/share/applications/gradint.desktop" <<EOF
+[Desktop Entry]
+Type=Application
+Name=Gradint
+Comment=Graduated-interval recall
+Exec=$PREFIX/bin/gradint
+Categories=Education;Languages
+EOF
+
+echo; echo "Installation complete."
+echo "To uninstall: sudo rm -rf \"$PREFIX/bin/gradint\" \"$PREFIX/share/gradint\""
-- 
GitLab