123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 |
- Unicode true
- !ifdef _DEBUG
- SetCompress off
- FileBufSize 64
- SetDatablockOptimize off
- !else
- SetDatablockOptimize on
- !ifdef lzma
- SetCompressor /SOLID lzma
- SetCompressorDictSize 16
- FileBufSize 64
- !else
- SetCompressor /SOLID bzip2 ; actually doesnt seem to help :(
- !endif
- !endif
- ReserveFile /plugin "LangDLL.dll"
- ReserveFile /plugin "nsDialogs.dll"
- ReserveFile /plugin "System.dll"
- ; temp hack 2022 (hard-coded to 32-bit release build - might need e.g. a Winamp_x64_Release version later)
- !ifndef FILES_PATH
- !define FILES_PATH ..\..\..\Build\Winamp_x86_Release
- ; change to this when copied to Winamp-Desktop\Src\Build\Winamp_x86_Release\installer\winamp
- ; !define FILES_PATH ..\..\..\Winamp_x86_Release
- !endif
- !define MUI_LANGDLL_REGISTRY_ROOT HKLM
- !define MUI_LANGDLL_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${WINAMP}"
- !define MUI_LANGDLL_REGISTRY_VALUENAME "LangId"
- !define MUI_LANGDLL_WINDOWTITLE $(LANGUAGE_DLL_TITLE)
- !define MUI_LANGDLL_INFO $(LANGUAGE_DLL_INFO)
- !addincludedir "..\shared\scripts"
- !include "MUI2.nsh"
- !include "WordFunc.nsh"
- !include "WinMessages.nsh"
- !include "LogicLib.nsh"
- !include ".\parameters.nsh"
- !include ".\branding.nsh"
- !include "verInfo.nsh"
- !include "WinVer.nsh"
- Var SETTINGSDIR
- Var INSTINI
- Var WINAMPINI
- Var WINAMPM3U
- Var M3UBASEDIR
- Var PREVINSTINI
- Var RESTARTAGENT
- Var FIRSTINSTALL
- Var needplaystart
- Var IDX_INSTTYPE_STANDARD
- Var IDX_INSTTYPE_PREVIOUS
- Var IDX_INSTTYPE_FULL
- Var /GLOBAL VERSION_REGISTRY
- Var /GLOBAL VERSION_MINIMUM
- !include ".\utils\wafuncs.nsh"
- !ifndef _DEBUG
- ; BrandingText "Winamp ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MINOR_SECOND} ${InstallType} -- $(BuiltOn) ${__DATE__} $(at) ${__TIME__}"
- BrandingText "Winamp ${VERSION_MAJOR}.${VERSION_MINOR} ${InstallType} -- $(BuiltOn) ${__DATE__} $(at) ${__TIME__}"
- !else
- BrandingText "Winamp Debug -- internal use only"
- !endif
- RequestExecutionLevel admin
- Caption $(IDS_CAPTION)
- Name "${WINAMP}"
- InstallDir "$PROGRAMFILES\${WINAMPFOLDER}"
- InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${WINAMP}" "UninstallString"
- XPStyle on
- !define OVERWRITEMODE on
- !ifdef _DEBUG
- ShowInstDetails show
- AutoCloseWindow false
- !else
- ShowInstDetails nevershow
- AutoCloseWindow true
- !endif
- SetDateSave on
- !define SECTIONIN_FULL "SectionIn 1"
- !ifdef FULL
- !define SECTIONIN_STD "SectionIn 1 2"
- !define SECTIONIN_LITE "SectionIn 1 2 3"
- !else
- !define SECTIONIN_STD "SectionIn 1"
- !define SECTIONIN_LITE "SectionIn 1"
- !endif
- !ifndef INSTALL_NAME
- !define INSTALL_NAME "winamp${VERSION_MAJOR}${VERSION_MINOR}${VERSION_MINOR_SECOND}"
- !endif
- !ifdef _DEBUG
- OutFile "wasetup_dbg${LANG_FILESPEC}.exe"
- !else
- !ifdef LITE
- OutFile "$%INSTALL_NAME%_lite${LANG_FILESPEC}.exe"
- !else ifdef full
- OutFile "$%INSTALL_NAME%_full${LANG_FILESPEC}.exe"
- !else
- OutFile 'winamp_unknown${LANG_FILESPEC}.exe'
- !endif
- !endif
- !include ".\ui.nsh"
- !include ".\sectionsHelper.nsh"
- !include ".\wasections.nsh"
- !include ".\uninstall\uninstall.nsh"
- !include ".\languages.nsh"
- Section -LastSection IDX_SECTION_LAST ; keep last section after languages
- SectionEnd
- !include ".\uiEvents.nsh"
- !include ".\descriptionTable.nsh"
- Function .onInit
- !ifdef WINAMP64
- ReadEnvStr $0 PROGRAMW6432
- StrCpy $INSTDIR "$0\${WINAMPFOLDER}"
- !endif
- InitPluginsDir
- System::Call "User32::SetProcessDPIAware()"
- StrCpy $PREVINSTINI ""
- StrCpy $INSTINI "$PLUGINSDIR\install.ini"
- !ifdef LANGID
- WriteRegStr "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" ${LANGID}
- !endif ; LANGID
- !insertmacro MUI_LANGDLL_DISPLAY
- ; check Windows version
- ; this will need testing...
- ${If} ${AtMostWin7}
- ${If} ${IsWin7}
- ${AndIf} ${AtLeastServicePack} 1
- ${Else}
- MessageBox MB_OK|MB_ICONEXCLAMATION "$(IDS_MSG_WINDOWS_TOO_OLD)" /SD IDOK
- Quit
- ${EndIf}
- ${EndIf}
- ; VC142 runtime required for all installations - pt.1: external
- /* ReadRegStr $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" "Version"
- ${If} $0 == "v14.29.30139.00"
- ${OrIf} $0 == "v14.30.30423.00"
- ${OrIf} $0 == "v14.30.30528.00"
- ${OrIf} $0 == "v14.30.30704.00"
- ${OrIf} $0 == "v14.30.*"
- ${OrIf} $0 == "v14.31.30818.00"
- ${OrIf} $0 == "v14.31.30919.00"
- ${OrIf} $0 == "v14.31.31005.00"
- ${OrIf} $0 == "v14.31.31103.00"
- ${OrIf} $0 == "v14.31.*"
- ${OrIf} $0 == "v14.32.31302.00"
- ${OrIf} $0 == "v14.32.31326.00"
- ${OrIf} $0 == "v14.32.31332.00"
- ${OrIf} $0 == "v14.32.*"
- ${OrIf} $0 == "v14.33.31424.00"
- ${OrIf} $0 == "v14.33.*"
- ${OrIf} $0 == "v14.34.*"
- Goto continue
- */
- ; Get Visual Studio Version
- DetailPrint "Getting Visual Studio Version string from registry..."
- ReadRegStr $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" "Version"
- DetailPrint "Visual Studio Version String: $0"
- DetailPrint "Done!"
- DetailPrint ""
- ; Replace v in Version String
- DetailPrint "Replacing v substring in version string..."
- ${WordReplace} "$0" "v" "" "+" $0
- DetailPrint "Visual Studio Version: $0"
- DetailPrint "Done!"
- DetailPrint ""
- ; Compare Versions
- DetailPrint "Comparing Visual Studio Registry and Minimal Versions..."
- ; ${VersionCompare} "[Version1]" "[Version2]" $var
- ; "[Version1]" ; REGISTRY VERSION
- ; "[Version2]" ; MINIMUM VERSION
- ; $var ; Result:
- ; $var=0 Versions are equal
- ; $var=1 Version1 is newer
- ; $var=2 Version2 is newer
- ; Visual Studio Registry Version
- StrCpy $VERSION_REGISTRY $0
- DetailPrint " Registry Version: $VERSION_REGISTRY"
- ; Visual Studio Minimal Version
- StrCpy $VERSION_MINIMUM "14.29.30139.00" ; MINIMUM VERSION!!!
- ; ===========================================================
- ; --- DEBUG ---
- ;StrCpy $VERSION_MINIMUM "14.29.30139.00" ; REGISTRY > MINIMUM
- ;StrCpy $VERSION_MINIMUM "14.32.31332.00" ; REGISTRY = MINIMUM
- ;StrCpy $VERSION_MINIMUM "14.33.31424.00" ; REGISTRY < MINIMUM -> INSTALLATION REQUIRED!
- ; --- DEBUG ---
- ; ===========================================================
- DetailPrint " Minimum Version: $VERSION_MINIMUM"
- ${VersionCompare} "$VERSION_REGISTRY" "$VERSION_MINIMUM" $R0
- DetailPrint "Version Compare Result: $R0"
- ${If} $R0 == 0
- ${OrIf} $R0 == 1
- ; Visual C++ Redistributable for Visual Studio 2015 Installation NOT Required!
- ${If} $R0 == 0
- DetailPrint "VERSIONS ARE EQUAL ($VERSION_REGISTRY = $VERSION_MINIMUM)"
- DetailPrint "Visual C++ Redistributable for Visual Studio 2015 Installation NOT Required!"
- ${Else}
- DetailPrint "REGISTRY VERSION ($VERSION_REGISTRY) > MINIMUM VERSION ($VERSION_MINIMUM)"
- DetailPrint "Visual C++ Redistributable for Visual Studio 2015 Installation NOT Required!"
- ${EndIf}
- ${Else}
- ; Visual C++ Redistributable for Visual Studio 2015 Installation Required!
- DetailPrint "REGISTRY VERSION ($VERSION_REGISTRY) < MINIMUM VERSION ($VERSION_MINIMUM)"
- DetailPrint "Visual C++ Redistributable for Visual Studio 2015 Installation Required!"
-
- ; Code for Download and Install vc_redist.x86.exe...
- MessageBox MB_YESNO|MB_ICONQUESTION "$(IDS_MSG_VC_REDIST_LINK_TO_MSDOWNLOAD)$\r$\n$\r$\n$(IDS_VC_REDIST_MSDOWNLOAD_URL)$\r$\n$\r$\n$(IDS_VC_DOWNLOAD)$\r$\n$(IDS_VC_DOWNLOAD_OR_ABORT)" /SD IDYES IDYES download IDNO abortInstaller
- download:
- SetOutPath "$TEMP"
- NSISdl::download "https://aka.ms/vs/16/release/vc_redist.x86.exe" "$TEMP\vc_redist.x86.exe"
- ExecWait "$TEMP\vc_redist.x86.exe"
- Delete "$TEMP\vc_redist.x86.exe"
- Goto continue
- abortInstaller:
- Quit
- continue:
- ${EndIf}
- ${FrenchRadio_OnInit}
- ${If} ${AtLeastWin7}
- ${ExpressMode_Initialize}
- ${EndIf}
- FunctionEnd
- Function .onInstSuccess
- Delete $PREVINSTINI
- Call SaveSelection
- DeleteINISec "$INSTINI" "Bundle"
- CopyFiles /SILENT "$INSTINI" "$INSTDIR\install.ini"
- FunctionEnd
- Function un.onInit
- !insertmacro MUI_UNGETLANGUAGE
- StrCpy $winamp.uninstall.checkFolder "false"
- FunctionEnd
- ${InitializeGetSectionName}
- Function GetLastInstTypeIndex
- Push $R0
- Push $R1
- StrCpy $R0 0
- loop:
- InstTypeGetText $R0 $R1
- StrCmp $R1 '' +3
- IntOp $R0 $R0 + 1
- goto loop
- Pop $R1
- IntOp $R0 $R0 - 1
- Exch $R0
- FunctionEnd
- Function ReadSections
- Push $R0
- Push $R1
- Push $R2
- Push $R3
- Push $R4
- Push $R5
- Push $R6
- Push $R7
- Push $R8
- StrCpy $R1 ${IDX_SECTION_LAST}
- Call GetLastInstTypeIndex
- Pop $R5
- StrCpy $R0 1
- IntOp $R6 $R0 << $R5
- IntOp $R6 $R6 ~
- StrCpy $R0 0
-
- ReadINIStr $R8 "$INSTINI" "installer" "sectionsVer"
-
- loop:
-
- !ifdef IDX_SEC_ML
- StrCmp $R0 ${IDX_SEC_ML} skipRead
- !endif
-
- !ifdef IDX_SEC_ML_PMP
- StrCmp $R0 ${IDX_SEC_ML_PMP} skipRead
- !endif
-
- ${If} $R8 >= 2
- ${GetSectionName} $R0 $R2
- ${Else}
- SectionGetText $R0 $R2
- ${EndIf}
-
- StrCmp $R2 "-" skipRead
- StrCmp $R2 "" skipRead
- SectionGetFlags $R0 $R3
- IntOp $R3 $R3 & 0x00000017
- IntCmp $R3 1 gotoRead gotoRead
- IntOp $R7 $R3 & 0x00000002 ; check if it is section
- IntCmp $R7 0 +2
- StrCpy $R7 $R0 ;remember section index (we can use it later to make it bold)
- goto skipRead ; skip sections, section end and readonly
- gotoRead:
- ReadINIStr $R4 "$INSTINI" "sections" $R2
- ; MessageBox MB_OK "$R2 - $R4"
- StrCmp $R4 "" 0 normalRead ;new feature or not?
- IntOp $R4 0x00000000 | 0x0000009 ; new feature make it selected and bold
- SectionGetFlags $R7 $0
- IntOp $0 $0 | 0x0000008
- SectionSetFlags $R7 $0
- normalRead:
- IntOp $R3 $R3 & 0xfffffffe
- IntOp $R3 $R3 | $R4
- SectionSetFlags $R0 $R3
- SectionGetInstTypes $R0 $R3
- IntOp $R3 $R3 & $R6
- IntOp $R4 $R4 << $R5
- IntOp $R3 $R3 | $R4
- SectionSetInstTypes $R0 $R3
- skipRead:
- IntOp $R0 $R0 + 1
- IntCmp $R0 $R1 "" loop
- Pop $R8
- Pop $R7
- Pop $R6
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
- FunctionEnd
- Function SaveSelection
- Push $R0
- Push $R1
- Push $R2
- Push $R3
- StrCpy $R1 ${IDX_SECTION_LAST}
- StrCpy $R0 0
-
- WriteINIStr "$INSTINI" "installer" "sectionsVer" "2"
- DeleteINISec "$INSTINI" "sections"
- loop:
- !ifdef FULL
- StrCmp $R0 ${IDX_SEC_ML} 0 ignore_1
- StrCmp $R0 ${IDX_SEC_ML_PMP} 0 ignore_1
- !endif ; FULL
- ${GetSectionName} $R0 $R2
- SectionGetFlags $R0 $R3
- IntOp $R3 $R3 & 0x0001
- goto force_write
- !ifdef FULL
- ignore_1:
- !endif ; FULL
- ${GetSectionName} $R0 $R2
- StrCmp $R2 "-" skipWrite
- StrCmp $R2 "" skipWrite
-
- SectionGetFlags $R0 $R3
- IntOp $R3 $R3 & 0x00000017
- IntCmp $R3 1 0 0 skipWrite ; skip sections, section end and readonly
- force_write:
- WriteINIStr "$INSTINI" "sections" $R2 $R3
- skipWrite:
- IntOp $R0 $R0 + 1
- IntCmp $R0 $R1 "" loop
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
- FunctionEnd
- !ifdef FULL
- Function UpdateAutoSelectSection
- Exch $1 ; section id
- Exch
- Exch $0 ; group id
- Exch
- Push $2
- Push $3
- Push $4
- Push $5
- StrCpy $2 "1" ; - nesting counter
- StrCpy $3 "0" ; - sel counter
- IntOp $0 $0 + 1
- ${Do}
- SectionGetFlags $0 $4
- IntOp $5 $4 & 0x0002 ; test if group start
- ${If} $5 <> 0
- IntOp $2 $2 + 1
- ${EndIf}
-
- IntOp $5 $4 & 0x0004 ; test if group end
- ${If} $5 <> 0
- IntOp $2 $2 - 1
- ${If} $2 == 0
- ${ExitDo}
- ${EndIf}
- ${Else}
- IntOp $5 $4 & 0x0041 ; test if selected or partial selected
- ${If} $5 <> 0
- ${AndIf} $0 <> $1
- StrCpy $3 "1"
- ${ExitDo}
- ${EndIf}
- ${EndIf}
- IntOp $0 $0 + 1
- ${Loop}
-
- SectionGetFlags $1 $4
- IntOp $4 $4 & 0xFFEF
- ${If} $3 <> 0
- IntOp $4 $4 | 0x0011
- ${EndIf}
- SectionSetFlags $1 $4
- Pop $5
- Pop $4
- Pop $3
- Exch $2
- Exch
- Exch $1
- Exch 2
- Exch $0
- FunctionEnd
- !macro UpdateAutoSelectSection __groupId __sectionId
- Push ${__groupId}
- Push ${__sectionId}
- Call UpdateAutoSelectSection
- !macroend
- !define UpdateAutoSelectSection "!insertmacro 'UpdateAutoSelectSection'"
- !endif
- Function .onSelChange
- !ifdef FULL
- ${UpdateAutoSelectSection} ${IDX_GRP_WALIB_PORTABLE} ${IDX_SEC_ML_PMP}
- ${UpdateAutoSelectSection} ${IDX_GRP_WALIB} ${IDX_SEC_ML}
- !endif
- FunctionEnd
|