changeset 6396:d5e6775fb3bc release

Add uninstall options to remove local packages and settings (Bug #62352) * src/default-octave.mk, src/release-octave.mk, src/stable-octave.mk: save api version to file * tools/makeinst-script.sh.in: add uninstall options, and on set, remove specified files from appdata/octave (grafted from 8fe292548edfeb8a82e64f0e2b5da1a65e35d835)
author John Donoghue <john.donoghue@ieee.org>
date Wed, 31 Aug 2022 08:09:19 -0400
parents 1dde81c1f186
children 10d35dbdf84b
files src/default-octave.mk src/release-octave.mk src/stable-octave.mk tools/makeinst-script.sh.in
diffstat 4 files changed, 82 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/default-octave.mk	Thu Aug 25 13:27:25 2022 -0400
+++ b/src/default-octave.mk	Wed Aug 31 08:09:19 2022 -0400
@@ -236,4 +236,5 @@
     # create a file with latest installed octave rev in it
     mkdir -p '$(TOP_BUILD_DIR)/octave'
     echo "$($(PKG)_VERSION)" > $(TOP_BUILD_DIR)/octave/octave-version
+    $(SED) -n 's,.*"api-v\([^"]*\)".*,\1,p' $(3)$(HOST_INCDIR)/octave-$($(PKG)_VERSION)/octave/version.h > $(TOP_BUILD_DIR)/octave/octave-api
 endef
--- a/src/release-octave.mk	Thu Aug 25 13:27:25 2022 -0400
+++ b/src/release-octave.mk	Wed Aug 31 08:09:19 2022 -0400
@@ -257,4 +257,5 @@
     # create a file with latest installed octave rev in it
     mkdir -p '$(TOP_BUILD_DIR)/octave'
     echo "$($(PKG)_VERSION)" > $(TOP_BUILD_DIR)/octave/octave-version
+    $(SED) -n 's,.*"api-v\([^"]*\)".*,\1,p' $(3)$(HOST_INCDIR)/octave-$($(PKG)_VERSION)/octave/version.h > $(TOP_BUILD_DIR)/octave/octave-api
 endef
--- a/src/stable-octave.mk	Thu Aug 25 13:27:25 2022 -0400
+++ b/src/stable-octave.mk	Wed Aug 31 08:09:19 2022 -0400
@@ -236,4 +236,5 @@
     # create a file with latest installed octave rev in it
     mkdir -p '$(TOP_BUILD_DIR)/octave'
     echo "$($(PKG)_VERSION)" > $(TOP_BUILD_DIR)/octave/octave-version
+    $(SED) -n 's,.*"api-v\([^"]*\)".*,\1,p' $(3)$(HOST_INCDIR)/octave-$($(PKG)_VERSION)/octave/version.h > $(TOP_BUILD_DIR)/octave/octave-api
 endef
--- a/tools/makeinst-script.sh.in	Thu Aug 25 13:27:25 2022 -0400
+++ b/tools/makeinst-script.sh.in	Wed Aug 31 08:09:19 2022 -0400
@@ -50,6 +50,7 @@
 # extract version number
 OCTAVE_VERSION=`head -1 $MXEDIR/octave/octave-version`
 VERSION=`echo $OCTAVE_VERSION | sed -n 's,\([0-9\.]*\).*,\1,p'`
+OCTAVE_API_VERSION=`head -1 $MXEDIR/octave/octave-api`
 if [ `echo $VERSION | grep -o '\.' | wc -l` -le 2 ]; then
   INSTALLER_VERSION="$VERSION.0"
 else
@@ -171,6 +172,8 @@
 ; uninstaller
 !insertmacro MUI_UNPAGE_CONFIRM
 
+UninstPage custom un.octaveOptionsPage un.octaveOptionsLeave
+
 !insertmacro MUI_UNPAGE_INSTFILES
 
 !insertmacro MUI_UNPAGE_FINISH
@@ -342,6 +345,41 @@
 FunctionEnd
 
 ######################################################################
+; custom uninstall options page functions
+
+Var UninstallLocalPackages
+Var UninstallLocalPackagesCtrl
+Var UninstallUserSettings
+Var UninstallUserSettingsCtrl
+
+Function un.octaveOptionsPage 
+
+  nsDialogs::Create 1018
+  Pop \$0
+
+  \${If} \$0 == error
+    Abort
+  \${EndIf} 
+
+  \${NSD_CreateCheckBox} 0 0 100% 12u "Uninstall Local Packages"
+  Pop \$UninstallLocalPackagesCtrl
+  \${NSD_SetState} \$UninstallLocalPackagesCtrl \$UninstallLocalPackages
+
+  \${NSD_CreateCheckBox} 0 20u 100% 12u "Remove user settings"
+  Pop \$UninstallUserSettingsCtrl
+  \${NSD_SetState} \$UninstallUserSettingsCtrl \$UninstallUserSettings
+
+  !insertmacro MUI_HEADER_TEXT "Uninstall Options" "Choose additional options for uninstalling"
+  nsDialogs::Show  
+  Pop \$0
+FunctionEnd
+
+Function un.octaveOptionsLeave
+  \${NSD_GetState} \$UninstallLocalPackagesCtrl \$UninstallLocalPackages
+  \${NSD_GetState} \$UninstallUserSettingsCtrl \$UninstallUserSettings
+FunctionEnd
+
+######################################################################
 Function un.onInit
   !insertmacro MULTIUSER_UNINIT
 
@@ -385,6 +423,29 @@
 \${EndIf}
 
   Pop \$R0
+
+  ; set default uninstall options
+  StrCpy \$UninstallUserSettings \${BST_UNCHECKED}
+  StrCpy \$UninstallLocalPackages \${BST_CHECKED}
+
+  ; process command line options
+  \${GetParameters} \$R0
+  ClearErrors
+  \${GetOptions} "\$R0" "/UNINSTALL_LOCALPACKAGES=" \$0
+  IfErrors un_no_local_packages_opt
+  \${If} \$0 == 0
+     StrCpy \$UninstallLocalPackages  \${BST_UNCHECKED}
+  \${EndIf}
+un_no_local_packages_opt:
+  ClearErrors
+  \${GetOptions} "\$R0" "/UNINSTALL_USERSETTINGS=" \$0
+  IfErrors un_no_user_settings_opt
+  \${If} \$0 == 1
+     StrCpy \$UninstallUserSettings \${BST_CHECKED}
+  \${EndIf}
+un_no_user_settings_opt:
+  ClearErrors
+
 FunctionEnd
 
 Function .onInit
@@ -625,6 +686,24 @@
 
 Section "Uninstall"
 
+  ; remove user uninstall stuff if options chosen
+  \${If} \$UninstallLocalPackages == 1
+    \${If} \${FileExists} "\$APPDATA\\octave\\api-v$OCTAVE_API_VERSION"
+      RMDir /r "\$APPDATA\\octave\\api-v$OCTAVE_API_VERSION"
+    \${EndIf}
+    ClearErrors
+  \${EndIf}
+
+  \${If} \$UninstallUserSettings == 1
+    \${If} \${FileExists} "\$APPDATA\\octave"
+      Delete "\$APPDATA\\octave\\octave-gui.ini"
+      Delete "\$APPDATA\\octave\\octave-doc-bookmarks.xbel"
+      Delete "\$APPDATA\\octave\\history"
+      RMDir "\$APPDATA\\octave"
+    \${EndIf}
+    ClearErrors
+  \${EndIf}
+
   ReadRegDWORD \$0  \${PRODUCT_UNINST_ROOT_KEY} "\$MultiUser.UninstallKey" "RegisteredFileType"
   IfErrors not_registered_file