Source code

Revision control

Copy as Markdown

Other Tools

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
################################################################################
# Modified versions of macros provided by NSIS
!ifndef OVERRIDES_INCLUDED
!define OVERRIDES_INCLUDED
!ifndef ___X64__NSH___
!include x64.nsh
!endif
; When including a file check if its verbose macro is defined to prevent
; loading the file a second time.
!ifmacrondef TEXTFUNC_VERBOSE
!include TextFunc.nsh
!endif
!ifmacrondef FILEFUNC_VERBOSE
!include FileFunc.nsh
!endif
; This was added to NSIS 3.0.4 and is needed for Windows ARM64 support
!ifmacrondef GetNativeMachineArchitecture
!define GetNativeMachineArchitecture "!insertmacro GetNativeMachineArchitecture "
!macro GetNativeMachineArchitecture outvar
!define GetNativeMachineArchitecture_lbl lbl_GNMA_${__COUNTER__}
System::Call kernel32::GetCurrentProcess()p.s
System::Call kernel32::IsWow64Process2(ps,*i,*i0s)
Pop ${outvar}
IntCmp ${outvar} 0 "" ${GetNativeMachineArchitecture_lbl}_done ${GetNativeMachineArchitecture_lbl}_done
!if "${NSIS_PTR_SIZE}" <= 4
!if "${NSIS_CHAR_SIZE}" <= 1
System::Call 'USER32::CharNextW(w"")p.s'
Pop ${outvar}
IntPtrCmpU ${outvar} 0 "" ${GetNativeMachineArchitecture_lbl}_oldnt ${GetNativeMachineArchitecture_lbl}_oldnt
StrCpy ${outvar} 332 ; Always IMAGE_FILE_MACHINE_I386 on Win9x
Goto ${GetNativeMachineArchitecture_lbl}_done
${GetNativeMachineArchitecture_lbl}_oldnt:
!endif
!endif
System::Call '*0x7FFE002E(&i2.s)'
Pop ${outvar}
${GetNativeMachineArchitecture_lbl}_done:
!undef GetNativeMachineArchitecture_lbl
!macroend
!macro _IsNativeMachineArchitecture _ignore _arc _t _f
!insertmacro _LOGICLIB_TEMP
${GetNativeMachineArchitecture} $_LOGICLIB_TEMP
!insertmacro _= $_LOGICLIB_TEMP ${_arc} `${_t}` `${_f}`
!macroend
!define IsNativeMachineArchitecture `"" IsNativeMachineArchitecture `
!define IsNativeIA32 '${IsNativeMachineArchitecture} 332' ; Intel x86
!define IsNativeAMD64 '${IsNativeMachineArchitecture} 34404' ; x86-64/x64
!define IsNativeARM64 '${IsNativeMachineArchitecture} 43620'
!endif
!verbose push
!verbose 3
!ifndef _OVERRIDE_VERBOSE
!define _OVERRIDE_VERBOSE 3
!endif
!verbose ${_OVERRIDE_VERBOSE}
!define OVERRIDE_VERBOSE `!insertmacro OVERRIDE_VERBOSE`
!define _OVERRIDE_UN
!define _OVERRIDE_S
!verbose pop
!macro OVERRIDE_VERBOSE _VERBOSE
!verbose push
!verbose 3
!undef _OVERRIDE_VERBOSE
!define _OVERRIDE_VERBOSE ${_VERBOSE}
!verbose pop
!macroend
; Modified version of Locate from the NSIS File Functions Header v3.4 (it has
; the same version in earlier versions of NSIS even though it has changed) that
; is distributed with NSIS v2.46-Unicode. This version has the calls to
; SetDetailsPrint commented out.
; See <NSIS v2.46-Unicode App Dir>/include/FileFunc.nsh for more information.
!macro LocateNoDetailsCall _PATH _OPTIONS _FUNC
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
Push $0
Push `${_PATH}`
Push `${_OPTIONS}`
GetFunctionAddress $0 `${_FUNC}`
Push `$0`
Call LocateNoDetails
Pop $0
!verbose pop
!macroend
!macro LocateNoDetails
!ifndef ${_OVERRIDE_UN}LocateNoDetails
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
!define ${_OVERRIDE_UN}LocateNoDetails `!insertmacro ${_OVERRIDE_UN}LocateNoDetailsCall`
Function ${_OVERRIDE_UN}LocateNoDetails
Exch $2
Exch
Exch $1
Exch
Exch 2
Exch $0
Exch 2
Push $3
Push $4
Push $5
Push $6
Push $7
Push $8
Push $9
Push $R6
Push $R7
Push $R8
Push $R9
ClearErrors
StrCpy $3 ''
StrCpy $4 ''
StrCpy $5 ''
StrCpy $6 ''
StrCpy $7 ''
StrCpy $8 0
StrCpy $R7 ''
StrCpy $R9 $0 1 -1
StrCmp $R9 '\' 0 +3
StrCpy $0 $0 -1
goto -3
IfFileExists '$0\*.*' 0 error
option:
StrCpy $R9 $1 1
StrCpy $1 $1 '' 1
StrCmp $R9 ' ' -2
StrCmp $R9 '' sizeset
StrCmp $R9 '/' 0 -4
StrCpy $9 -1
IntOp $9 $9 + 1
StrCpy $R9 $1 1 $9
StrCmp $R9 '' +2
StrCmp $R9 '/' 0 -3
StrCpy $R8 $1 $9
StrCpy $R8 $R8 '' 2
StrCpy $R9 $R8 '' -1
StrCmp $R9 ' ' 0 +3
StrCpy $R8 $R8 -1
goto -3
StrCpy $R9 $1 2
StrCpy $1 $1 '' $9
StrCmp $R9 'L=' 0 mask
StrCpy $3 $R8
StrCmp $3 '' +6
StrCmp $3 'FD' +5
StrCmp $3 'F' +4
StrCmp $3 'D' +3
StrCmp $3 'DE' +2
StrCmp $3 'FDE' 0 error
goto option
mask:
StrCmp $R9 'M=' 0 size
StrCpy $4 $R8
goto option
size:
StrCmp $R9 'S=' 0 gotosubdir
StrCpy $6 $R8
goto option
gotosubdir:
StrCmp $R9 'G=' 0 banner
StrCpy $7 $R8
StrCmp $7 '' +3
StrCmp $7 '1' +2
StrCmp $7 '0' 0 error
goto option
banner:
StrCmp $R9 'B=' 0 error
StrCpy $R7 $R8
StrCmp $R7 '' +3
StrCmp $R7 '1' +2
StrCmp $R7 '0' 0 error
goto option
sizeset:
StrCmp $6 '' default
StrCpy $9 0
StrCpy $R9 $6 1 $9
StrCmp $R9 '' +4
StrCmp $R9 ':' +3
IntOp $9 $9 + 1
goto -4
StrCpy $5 $6 $9
IntOp $9 $9 + 1
StrCpy $1 $6 1 -1
StrCpy $6 $6 -1 $9
StrCmp $5 '' +2
IntOp $5 $5 + 0
StrCmp $6 '' +2
IntOp $6 $6 + 0
StrCmp $1 'B' 0 +3
StrCpy $1 1
goto default
StrCmp $1 'K' 0 +3
StrCpy $1 1024
goto default
StrCmp $1 'M' 0 +3
StrCpy $1 1048576
goto default
StrCmp $1 'G' 0 error
StrCpy $1 1073741824
default:
StrCmp $3 '' 0 +2
StrCpy $3 'FD'
StrCmp $4 '' 0 +2
StrCpy $4 '*.*'
StrCmp $7 '' 0 +2
StrCpy $7 '1'
StrCmp $R7 '' 0 +2
StrCpy $R7 '0'
StrCpy $7 'G$7B$R7'
StrCpy $8 1
Push $0
; SetDetailsPrint textonly
nextdir:
IntOp $8 $8 - 1
Pop $R8
StrCpy $9 $7 2 2
StrCmp $9 'B0' +3
GetLabelAddress $9 findfirst
goto call
; DetailPrint 'Search in: $R8'
findfirst:
FindFirst $0 $R7 '$R8\$4'
IfErrors subdir
StrCmp $R7 '.' 0 dir
FindNext $0 $R7
StrCmp $R7 '..' 0 dir
FindNext $0 $R7
IfErrors 0 dir
FindClose $0
goto subdir
dir:
IfFileExists '$R8\$R7\*.*' 0 file
StrCpy $R6 ''
StrCmp $3 'DE' +4
StrCmp $3 'FDE' +3
StrCmp $3 'FD' precall
StrCmp $3 'F' findnext precall
FindFirst $9 $R9 '$R8\$R7\*.*'
StrCmp $R9 '.' 0 +4
FindNext $9 $R9
StrCmp $R9 '..' 0 +2
FindNext $9 $R9
FindClose $9
IfErrors precall findnext
file:
StrCmp $3 'FDE' +3
StrCmp $3 'FD' +2
StrCmp $3 'F' 0 findnext
StrCpy $R6 0
StrCmp $5$6 '' precall
FileOpen $9 '$R8\$R7' r
IfErrors +3
FileSeek $9 0 END $R6
FileClose $9
System::Int64Op $R6 / $1
Pop $R6
StrCmp $5 '' +2
IntCmp $R6 $5 0 findnext
StrCmp $6 '' +2
IntCmp $R6 $6 0 0 findnext
precall:
StrCpy $9 0
StrCpy $R9 '$R8\$R7'
call:
Push $0
Push $1
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
Push $8
Push $9
Push $R7
Push $R8
StrCmp $9 0 +4
StrCpy $R6 ''
StrCpy $R7 ''
StrCpy $R9 ''
Call $2
Pop $R9
Pop $R8
Pop $R7
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
IfErrors 0 +3
FindClose $0
goto error
StrCmp $R9 'StopLocateNoDetails' 0 +3
FindClose $0
goto clearstack
goto $9
findnext:
FindNext $0 $R7
IfErrors 0 dir
FindClose $0
subdir:
StrCpy $9 $7 2
StrCmp $9 'G0' end
FindFirst $0 $R7 '$R8\*.*'
StrCmp $R7 '.' 0 pushdir
FindNext $0 $R7
StrCmp $R7 '..' 0 pushdir
FindNext $0 $R7
IfErrors 0 pushdir
FindClose $0
StrCmp $8 0 end nextdir
pushdir:
IfFileExists '$R8\$R7\*.*' 0 +3
Push '$R8\$R7'
IntOp $8 $8 + 1
FindNext $0 $R7
IfErrors 0 pushdir
FindClose $0
StrCmp $8 0 end nextdir
error:
SetErrors
clearstack:
StrCmp $8 0 end
IntOp $8 $8 - 1
Pop $R8
goto clearstack
end:
; SetDetailsPrint both
Pop $R9
Pop $R8
Pop $R7
Pop $R6
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
FunctionEnd
!verbose pop
!endif
!macroend
!macro un.LocateNoDetailsCall _PATH _OPTIONS _FUNC
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
Push $0
Push `${_PATH}`
Push `${_OPTIONS}`
GetFunctionAddress $0 `${_FUNC}`
Push `$0`
Call un.LocateNoDetails
Pop $0
!verbose pop
!macroend
!macro un.LocateNoDetails
!ifndef un.LocateNoDetails
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
!undef _OVERRIDE_UN
!define _OVERRIDE_UN `un.`
!insertmacro LocateNoDetails
!undef _OVERRIDE_UN
!define _OVERRIDE_UN
!verbose pop
!endif
!macroend
; Modified version of TextCompare from the NSIS Text Functions Header v2.4 (it
; has the same version in earlier versions of NSIS even though it has changed)
; that is distributed with NSIS v2.46-Unicode. This version has the calls to
; SetDetailsPrint commented out.
; See <NSIS v2.46-Unicode App Dir>/include/TextFunc.nsh for more information.
!macro TextCompareNoDetailsCall _FILE1 _FILE2 _OPTION _FUNC
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
Push $0
Push `${_FILE1}`
Push `${_FILE2}`
Push `${_OPTION}`
GetFunctionAddress $0 `${_FUNC}`
Push `$0`
${CallArtificialFunction} TextCompareNoDetails_
Pop $0
!verbose pop
!macroend
!macro TextCompareNoDetailsSCall _FILE1 _FILE2 _OPTION _FUNC
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
Push $0
Push `${_FILE1}`
Push `${_FILE2}`
Push `${_OPTION}`
GetFunctionAddress $0 `${_FUNC}`
Push `$0`
${CallArtificialFunction} TextCompareNoDetailsS_
Pop $0
!verbose pop
!macroend
!macro TextCompareNoDetailsBody _OVERRIDE_S
Exch $3
Exch
Exch $2
Exch
Exch 2
Exch $1
Exch 2
Exch 3
Exch $0
Exch 3
Push $4
Push $5
Push $6
Push $7
Push $8
Push $9
ClearErrors
IfFileExists $0 0 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_error
IfFileExists $1 0 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_error
StrCmp $2 'FastDiff' +5
StrCmp $2 'FastEqual' +4
StrCmp $2 'SlowDiff' +3
StrCmp $2 'SlowEqual' +2
goto TextFunc_TextCompareNoDetails${_OVERRIDE_S}_error
FileOpen $4 $0 r
IfErrors TextFunc_TextCompareNoDetails${_OVERRIDE_S}_error
FileOpen $5 $1 r
IfErrors TextFunc_TextCompareNoDetails${_OVERRIDE_S}_error
; SetDetailsPrint textonly
StrCpy $6 0
StrCpy $8 0
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_nextline:
StrCmp${_OVERRIDE_S} $4 '' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_fast
IntOp $8 $8 + 1
FileRead $4 $9
IfErrors 0 +4
FileClose $4
StrCpy $4 ''
StrCmp${_OVERRIDE_S} $5 '' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_end
StrCmp $2 'FastDiff' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_fast
StrCmp $2 'FastEqual' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_fast TextFunc_TextCompareNoDetails${_OVERRIDE_S}_slow
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_fast:
StrCmp${_OVERRIDE_S} $5 '' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_call
IntOp $6 $6 + 1
FileRead $5 $7
IfErrors 0 +5
FileClose $5
StrCpy $5 ''
StrCmp${_OVERRIDE_S} $4 '' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_end
StrCmp $2 'FastDiff' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_call TextFunc_TextCompareNoDetails${_OVERRIDE_S}_close
StrCmp $2 'FastDiff' 0 +2
StrCmp${_OVERRIDE_S} $7 $9 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_nextline TextFunc_TextCompareNoDetails${_OVERRIDE_S}_call
StrCmp${_OVERRIDE_S} $7 $9 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_call TextFunc_TextCompareNoDetails${_OVERRIDE_S}_nextline
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_slow:
StrCmp${_OVERRIDE_S} $4 '' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_close
StrCpy $6 ''
; DetailPrint '$8. $9'
FileSeek $5 0
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_slownext:
FileRead $5 $7
IfErrors 0 +2
StrCmp $2 'SlowDiff' TextFunc_TextCompareNoDetails${_OVERRIDE_S}_call TextFunc_TextCompareNoDetails${_OVERRIDE_S}_nextline
StrCmp $2 'SlowDiff' 0 +2
StrCmp${_OVERRIDE_S} $7 $9 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_nextline TextFunc_TextCompareNoDetails${_OVERRIDE_S}_slownext
IntOp $6 $6 + 1
StrCmp${_OVERRIDE_S} $7 $9 0 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_slownext
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_call:
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
Push $8
Push $9
Call $3
Pop $0
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
StrCmp $0 'StopTextCompareNoDetails' 0 TextFunc_TextCompareNoDetails${_OVERRIDE_S}_nextline
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_close:
FileClose $4
FileClose $5
goto TextFunc_TextCompareNoDetails${_OVERRIDE_S}_end
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_error:
SetErrors
TextFunc_TextCompareNoDetails${_OVERRIDE_S}_end:
; SetDetailsPrint both
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
!macroend
!define TextCompareNoDetails `!insertmacro TextCompareNoDetailsCall`
!define un.TextCompareNoDetails `!insertmacro TextCompareNoDetailsCall`
!macro TextCompareNoDetails
!macroend
!macro un.TextCompareNoDetails
!macroend
!macro TextCompareNoDetails_
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
!insertmacro TextCompareNoDetailsBody ''
!verbose pop
!macroend
!define TextCompareNoDetailsS `!insertmacro TextCompareNoDetailsSCall`
!define un.TextCompareNoDetailsS `!insertmacro TextCompareNoDetailsSCall`
!macro TextCompareNoDetailsS
!macroend
!macro un.TextCompareNoDetailsS
!macroend
!macro TextCompareNoDetailsS_
!verbose push
!verbose ${_OVERRIDE_VERBOSE}
!insertmacro TextCompareNoDetailsBody 'S'
!verbose pop
!macroend
!endif