summaryrefslogtreecommitdiffstats
path: root/packaging/win32/macros/AdvUninstLog.nsh
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/win32/macros/AdvUninstLog.nsh')
-rw-r--r--packaging/win32/macros/AdvUninstLog.nsh437
1 files changed, 437 insertions, 0 deletions
diff --git a/packaging/win32/macros/AdvUninstLog.nsh b/packaging/win32/macros/AdvUninstLog.nsh
new file mode 100644
index 0000000..a932aa8
--- /dev/null
+++ b/packaging/win32/macros/AdvUninstLog.nsh
@@ -0,0 +1,437 @@
+ ;_____________________________ HEADER FILE BEGIN ____________________________
+
+ # Advanced Uninstall Log NSIS header
+ # Version 1.0 2007-01-31
+ # By Red Wine (http://nsis.sf.net/User:Red_Wine)
+
+ # Usage: See included examples Uninstall_Log_Default_UI.nsi - Uninstall_Log_Modern_UI.nsi
+
+!verbose push
+ !verbose 3
+
+!ifndef ADVANCED_UNINSTALL.LOG_NSH
+ !define ADVANCED_UNINSTALL.LOG_NSH
+
+!ifndef INSTDIR_REG_ROOT | INSTDIR_REG_KEY
+ !error "You must properly define both INSTDIR_REG_ROOT and INSTDIR_REG_KEY"
+!endif
+
+!ifndef UNINSTALL_LOG
+ !define UNINSTALL_LOG "Uninstall"
+!endif
+
+!ifndef UNINST_LOG_VERBOSE
+ !define UNINST_LOG_VERBOSE "3"
+!endif
+
+!verbose pop
+
+!echo "Advanced Uninstall Log NSIS header v1.0 2007-01-31 by Red Wine (http://nsis.sf.net/User:Red_Wine)"
+
+!verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+!define UNINST_EXE "$INSTDIR\${UNINSTALL_LOG}.exe"
+!define UNINST_DAT "$INSTDIR\${UNINSTALL_LOG}.dat"
+!define UNLOG_PART "$PLUGINSDIR\part."
+!define UNLOG_TEMP "$PLUGINSDIR\unlog.tmp"
+!define EXCLU_LIST "$PLUGINSDIR\exclude.tmp"
+!define UNLOG_HEAD "=========== Uninstaller Log please do not edit this file ==========="
+
+ var unlog_tmp_0
+ var unlog_tmp_1
+ var unlog_tmp_2
+ var unlog_tmp_3
+ var unlog_error
+
+!include FileFunc.nsh
+!include TextFunc.nsh
+
+!insertmacro Locate
+!insertmacro un.Locate
+!insertmacro DirState
+!insertmacro un.DirState
+!insertmacro FileJoin
+!insertmacro TrimNewLines
+!insertmacro un.TrimNewLines
+
+;.............................. Uninstaller Macros ..............................
+
+!macro UNINSTALL.LOG_BEGIN_UNINSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ IfFileExists "${UNINST_DAT}" +3
+ MessageBox MB_ICONSTOP|MB_OK "${UNINST_DAT} not found, unable to perform uninstall." /SD IDOK
+ Quit
+
+ StrCmp "$PLUGINSDIR" "" 0 +2
+ InitPluginsDir
+
+ CopyFiles "${UNINST_DAT}" "${UNLOG_TEMP}"
+ FileOpen $unlog_tmp_2 "${UNLOG_TEMP}" r
+
+ !verbose pop
+!macroend
+
+
+!macro UNINSTALL.LOG_END_UNINSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ FileClose $unlog_tmp_2
+ DeleteRegValue ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}.dat"
+ DeleteRegValue ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory"
+
+ !verbose pop
+!macroend
+
+
+!macro UNINSTALL.LOG_UNINSTALL TargetDir
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ !ifndef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
+ !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
+ !endif
+
+ !ifdef INTERACTIVE_UNINSTALL
+ GetTempFileName $unlog_tmp_5 "$PLUGINSDIR"
+ FileOpen $unlog_tmp_4 "$unlog_tmp_5" a
+ !endif
+
+ ${PerfomUninstall} "${TargetDir}" "${UnLog_Uninstall_CallBackFunc}"
+
+ !ifdef INTERACTIVE_UNINSTALL
+ FileClose $unlog_tmp_4
+ !endif
+
+ !verbose pop
+!macroend
+
+
+!define PerfomUninstall "!insertmacro PERFORMUNINSTALL"
+
+!macro PERFORMUNINSTALL TargetDir UninstCallBackFunc
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ !define ID ${__LINE__}
+
+ ${un.Locate} "${TargetDir}" "/L=F" "${UninstCallBackFunc}"
+
+ loop_${ID}:
+
+ StrCpy $unlog_tmp_1 0
+
+ ${un.Locate} "${TargetDir}" "/L=DE" "${UninstCallBackFunc}"
+ StrCmp $unlog_tmp_1 "0" 0 loop_${ID}
+
+ ${un.DirState} "${TargetDir}" $unlog_tmp_0
+ StrCmp "$unlog_tmp_0" "0" 0 +2
+ RmDir "${TargetDir}"
+
+ IfErrors 0 +2
+ MessageBox MB_ICONEXCLAMATION|MB_OK "${UNINSTALL_LOG} Log error" /SD IDOK
+
+ !undef ID
+
+ !verbose pop
+!macroend
+
+
+!macro INTERACTIVE_UNINSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ !ifdef INTERACTIVE_UNINSTALL
+ !error "INTERACTIVE_UNINSTALL is already defined"
+ !endif
+
+ var unlog_tmp_4
+ var unlog_tmp_5
+
+ !define INTERACTIVE_UNINSTALL
+
+ !ifdef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
+ !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
+ !endif
+
+ !ifdef UnLog_Uninstall_CallBackFunc
+ !undef UnLog_Uninstall_CallBackFunc
+ !endif
+
+ !ifndef UnLog_Uninstall_CallBackFunc
+ !insertmacro UNINSTALL.LOG_UNINSTALL_INTERACTIVE
+ !define UnLog_Uninstall_CallBackFunc "un._LocateCallBack_Function_Interactive"
+ !endif
+
+ !verbose pop
+!macroend
+
+
+!macro UNATTENDED_UNINSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ !ifdef UNATTENDED_UNINSTALL
+ !error "UNATTENDED_UNINSTALL is already defined"
+ !endif
+
+ !define UNATTENDED_UNINSTALL
+
+ !ifdef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
+ !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
+ !endif
+
+ !ifdef UnLog_Uninstall_CallBackFunc
+ !undef UnLog_Uninstall_CallBackFunc
+ !endif
+
+ !ifndef UnLog_Uninstall_CallBackFunc
+ !insertmacro UNINSTALL.LOG_UNINSTALL_UNATTENDED
+ !define UnLog_Uninstall_CallBackFunc "un._LocateCallBack_Function_Unattended"
+ !endif
+
+ !verbose pop
+!macroend
+
+
+!macro UNINSTALL.LOG_UNINSTALL_UNATTENDED
+
+ Function un._LocateCallBack_Function_Unattended
+ start:
+ FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
+ ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
+ StrCmp "$unlog_tmp_3" "$R9" islog
+ IfErrors nolog
+ goto start
+
+ islog:
+ IfFileExists "$R9\*.*" isdir
+
+ isfile:
+ Delete "$R9"
+ goto end
+
+ isdir:
+ RmDir "$R9"
+ IntOp $unlog_tmp_1 $unlog_tmp_1 + 1
+ goto end
+
+ nolog:
+ ClearErrors
+ StrCmp "$R9" "${UNINST_EXE}" isfile
+ StrCmp "$R9" "${UNINST_DAT}" isfile
+
+ end:
+ FileSeek $unlog_tmp_2 0 SET
+ Push $unlog_tmp_0
+ FunctionEnd
+
+!macroend
+
+
+!macro UNINSTALL.LOG_UNINSTALL_INTERACTIVE
+
+ Function un._LocateCallBack_Function_Interactive
+ start:
+ FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
+ ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
+ StrCmp "$unlog_tmp_3" "$R9" islog
+ IfErrors nolog
+ goto start
+
+ islog:
+ IfFileExists "$R9\*.*" isdir
+
+ isfile:
+ Delete "$R9"
+ goto end
+
+ isdir:
+ RmDir "$R9"
+ IntOp $unlog_tmp_1 $unlog_tmp_1 + 1
+ goto end
+
+ nolog:
+ ClearErrors
+ FileSeek $unlog_tmp_4 0 SET
+ read:
+ FileRead $unlog_tmp_4 "$unlog_tmp_3"
+ ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
+ StrCmp "$unlog_tmp_3" "$R9" end
+ IfErrors +2
+ goto read
+ ClearErrors
+ StrCmp "$R9" "${UNINST_EXE}" isfile
+ StrCmp "$R9" "${UNINST_DAT}" isfile
+ IfFileExists "$R9\*.*" msgdir
+
+ MessageBox MB_ICONQUESTION|MB_YESNO \
+ 'Delete File "$R9"?' /SD IDNO IDYES isfile IDNO nodel
+
+ msgdir:
+ MessageBox MB_ICONQUESTION|MB_YESNO \
+ 'Delete Directory "$R9"?' /SD IDNO IDYES isdir IDNO nodel
+
+ nodel:
+ FileSeek $unlog_tmp_4 0 END
+ FileWrite $unlog_tmp_4 "$R9$\r$\n"
+
+ end:
+ FileSeek $unlog_tmp_2 0 SET
+ Push $unlog_tmp_0
+ FunctionEnd
+
+!macroend
+
+;................................. Installer Macros .................................
+
+!macro UNINSTALL.LOG_INSTALL_UNATTENDED
+
+ Function _LocateCallBack_Function_Install
+ loop:
+ FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
+ ${TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
+ IfErrors 0 +4
+ ClearErrors
+ FileSeek $unlog_tmp_2 0 SET
+ goto next
+ StrCmp "$R9" "$unlog_tmp_3" end
+ goto loop
+ next:
+ FileWrite $unlog_tmp_1 "$R9$\r$\n"
+ end:
+ Push $unlog_tmp_0
+ FunctionEnd
+
+!macroend
+
+
+!ifdef UnLog_Install_Func_CallBack
+ !undef UnLog_Install_Func_CallBack
+!endif
+
+!ifndef UnLog_Install_Func_CallBack
+ !insertmacro UNINSTALL.LOG_INSTALL_UNATTENDED
+ !define UnLog_Install_Func_CallBack "_LocateCallBack_Function_Install"
+!endif
+
+
+!macro UNINSTALL.LOG_PREPARE_INSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ Push $0
+ Push $1
+ ClearErrors
+ ReadRegStr "$0" ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory"
+ IfErrors next
+ ${DirState} "$0" $1
+ StrCmp "$1" "-1" next
+ StrCmp "$1" "0" next
+ IfFileExists "$0\${UNINSTALL_LOG}.dat" next
+ MessageBox MB_ICONEXCLAMATION|MB_OK \
+ "Previous installation detected at $0.$\n\
+ Required file ${UNINSTALL_LOG}.dat is missing.$\n$\nIt is highly recommended \
+ to select an empty directory and perform a fresh installation." /SD IDOK
+ StrCpy $unlog_error "error"
+
+ next:
+ ClearErrors
+ StrCmp "$PLUGINSDIR" "" 0 +2
+ InitPluginsDir
+
+ GetTempFileName "$1"
+ FileOpen $0 "$1" w
+ FileWrite $0 "${UNLOG_HEAD}$\r$\n"
+ FileClose $0
+ Rename "$1" "${UNLOG_TEMP}"
+ Pop $1
+ Pop $0
+
+ !verbose pop
+!macroend
+
+
+!macro UNINSTALL.LOG_UPDATE_INSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ Delete "${UNINST_DAT}"
+ Rename "${UNLOG_TEMP}" "${UNINST_DAT}"
+ WriteUninstaller "${UNINST_EXE}"
+ WriteRegStr ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}.dat" "${UNINST_DAT}"
+ WriteRegStr ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory" "$INSTDIR"
+
+ !verbose pop
+!macroend
+
+
+!define uninstall.log_install "!insertmacro UNINSTALL.LOG_INSTALL"
+
+!macro UNINSTALL.LOG_INSTALL FileOpenWrite FileOpenRead TargetDir
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ FileOpen $unlog_tmp_1 "${FileOpenWrite}" w
+ FileOpen $unlog_tmp_2 "${FileOpenRead}" r
+
+ ${Locate} "${TargetDir}" "/L=FD" "${UnLog_Install_Func_CallBack}"
+
+ StrCmp $unlog_error "error" 0 +2
+ ClearErrors
+
+ IfErrors 0 +2
+ MessageBox MB_ICONEXCLAMATION|MB_OK "Error creating ${UNINSTALL_LOG} Log." /SD IDOK
+
+ FileClose $unlog_tmp_1
+ FileClose $unlog_tmp_2
+
+ !verbose pop
+!macroend
+
+
+!define uninstall.log_mergeID "!insertmacro UNINSTALL.LOG_MERGE"
+
+!macro UNINSTALL.LOG_MERGE UnlogPart
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ ${FileJoin} "${UNLOG_TEMP}" "${UnlogPart}" "${UNLOG_TEMP}"
+
+ !verbose pop
+!macroend
+
+
+!macro UNINSTALL.LOG_OPEN_INSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ StrCmp $unlog_error "error" +2
+ ${uninstall.log_install} "${EXCLU_LIST}" "${UNINST_DAT}" "$OUTDIR"
+
+ !verbose pop
+!macroend
+
+
+!macro UNINSTALL.LOG_CLOSE_INSTALL
+ !verbose push
+ !verbose ${UNINST_LOG_VERBOSE}
+
+ !define ID ${__LINE__}
+
+ ${uninstall.log_install} "${UNLOG_PART}${ID}" "${EXCLU_LIST}" "$OUTDIR"
+ ${uninstall.log_mergeID} "${UNLOG_PART}${ID}"
+
+ !undef ID
+
+ !verbose pop
+!macroend
+
+!endif
+
+!verbose pop
+ ;_____________________________ HEADER FILE END ____________________________
+