summaryrefslogtreecommitdiffstats
path: root/util/scripts/win-binary/nsis/modules/msvc.nsh
diff options
context:
space:
mode:
Diffstat (limited to 'util/scripts/win-binary/nsis/modules/msvc.nsh')
-rw-r--r--util/scripts/win-binary/nsis/modules/msvc.nsh439
1 files changed, 439 insertions, 0 deletions
diff --git a/util/scripts/win-binary/nsis/modules/msvc.nsh b/util/scripts/win-binary/nsis/modules/msvc.nsh
new file mode 100644
index 0000000..5c52ec4
--- /dev/null
+++ b/util/scripts/win-binary/nsis/modules/msvc.nsh
@@ -0,0 +1,439 @@
+!ifdef MODULE_MSVC
+
+!include "includes\system.nsh"
+
+!macro MSVC_INITIALIZE
+!include "includes\qtcommon.nsh"
+!ifndef MODULE_MSVC_NAME
+ !define MODULE_MSVC_NAME "Qt"
+!endif
+!ifndef MODULE_MSVC_VERSION
+ !define MODULE_MSVC_VERSION "${PRODUCT_VERSION}"
+!endif
+!ifndef MODULE_MSVC_BUILDDIR
+ !error "MODULE_MSVC_BUILDDIR not defined!"
+!endif
+var MSVC_QtDesktopInstallBuildTree
+!include "includes\qtenv.nsh"
+!macroend
+
+!macro MSVC_PATCH_QT_INSTALLATION QtBuildTree QtInstallBuildTree QtSourceTree QtInstallSourceTree DLLPDBDirName
+ Push "${QtInstallBuildTree}"
+ Call DeleteFloatingLicenseProgram
+
+ Push "${QtInstallBuildTree}\bin"
+ Call AddStartmenuApplication
+
+ Push "${QtBuildTree}"
+ Push "${QtInstallBuildTree}"
+ Call PatchPrlFiles
+
+ ${If} ${FileExists} "${QtInstallBuildTree}\.qmake.cache"
+ Push "${QtInstallBuildTree}\.qmake.cache"
+ Push "${QtBuildTree}"
+ Push "${QtInstallBuildTree}"
+ Call PatchPath
+ ${If} "${QtInstallBuildTree}" != "${QtInstallSourceTree}"
+ Push "${QtInstallBuildTree}\.qmake.cache"
+ Push "${QtSourceTree}"
+ Push "${QtInstallSourceTree}"
+ Call PatchPath
+ ${EndIf}
+ ${EndIf}
+
+ ${If} ${FileExists} "${QtInstallBuildTree}\mkspecs\default\qmake.conf"
+ Push "${QtInstallBuildTree}\mkspecs\default\qmake.conf"
+ Push "${QtSourceTree}"
+ Push "${QtInstallSourceTree}"
+ Call PatchPath
+ ${EndIf}
+
+ Push "${DLLPDBDirName}"
+ Push "${QtInstallBuildTree}"
+ Call PatchCommonBinaryFiles
+
+!ifndef MODULE_MSVC_SKIPPATCHLICENSEINFORMATION
+ Push "${QtInstallBuildTree}"
+ Call PatchLicenseInformation
+!endif
+
+ Push "${DLLPDBDirName}"
+ Push "${QtBuildTree}"
+ Push "${QtInstallBuildTree}"
+ Call PatchMSVCBinaryFiles
+ ${If} "${QtInstallBuildTree}" != "${QtInstallSourceTree}"
+ Push "${DLLPDBDirName}"
+ Push "${QtSourceTree}"
+ Push "${QtInstallSourceTree}"
+ Call PatchMSVCBinaryFiles
+ ${EndIf}
+!macroend ;MSVC_PATCH_QT_INSTALLATION
+
+!macro MSVC_POST_WIN32_INSTALLFILES QtBuildTree QtInstallBuildTree QtSourceTree QtInstallSourceTree VersionName
+ !insertmacro MSVC_PATCH_QT_INSTALLATION \
+ "${QtBuildTree}" \
+ "${QtInstallBuildTree}" \
+ "${QtSourceTree}" \
+ "${QtInstallSourceTree}" \
+ "bin"
+
+ Push "${VersionName}"
+ Push "${QtInstallBuildTree}"
+ Call MSVC_AddQtVersionToRegistry
+
+ Push "${INSTALL_COMPILER}"
+ Push "${QtInstallBuildTree}"
+ Push ""
+ Push "${VersionName}"
+ Call MSVC_CreateQtVarsBatAndShortcut
+
+ StrCpy $MSVC_QtDesktopInstallBuildTree "${QtInstallBuildTree}"
+!macroend ;MSVC_POST_WIN32_INSTALLFILES
+
+!macro MSVC_POST_WINCE_INSTALLFILES QtBuildTree QtInstallBuildTree QtSourceTree QtInstallSourceTree VersionName WinCESDK
+ !insertmacro MSVC_PATCH_QT_INSTALLATION \
+ "${QtBuildTree}" \
+ "${QtInstallBuildTree}" \
+ "${QtSourceTree}" \
+ "${QtInstallSourceTree}" \
+ "lib"
+
+ Push "${VersionName}"
+ Push "${QtInstallBuildTree}"
+ Call MSVC_AddQtVersionToRegistry
+
+ Push "${INSTALL_COMPILER}ce"
+ Push "${QtInstallBuildTree}"
+ Push "${WinCESDK}"
+ Push "${VersionName}"
+ Call MSVC_CreateQtVarsBatAndShortcut
+!macroend ;MSVC_POST_WINCE_INSTALLFILES
+
+!macro MSVC_PATCH_MSVC_BINARY_FILE BinaryFile QtBuildDir QtInstallDir
+ ${If} ${FileExists} "${BinaryFile}"
+ DetailPrint "Patching ${BinaryFile} (${QtInstallDir})..."
+!ifdef MODULE_MSVC_VC60
+ qtnsisext::PatchVC6Binary "${BinaryFile}" "${QtBuildDir}" "${QtInstallDir}"
+!else
+ qtnsisext::PatchVC7Binary "${BinaryFile}" "${QtBuildDir}" "${QtInstallDir}"
+!endif
+ ${EndIf}
+!macroend
+
+!macro MSVC_SECTIONS
+Section "${MODULE_MSVC_NAME} ${MODULE_MSVC_VERSION}" MSVC_SEC01
+ ${If} "$MSVC_INSTDIR" == ""
+ StrCpy $MSVC_INSTDIR "$INSTDIR\${MODULE_MSVC_NAME} ${MODULE_MSVC_VERSION}"
+ Push $MSVC_INSTDIR
+ Call MakeQtDirectory
+ Pop $MSVC_INSTDIR
+ ${EndIf}
+
+ WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MSVCInstalled" 1
+
+ SetOutPath "$MSVC_INSTDIR"
+ SetOverwrite ifnewer
+ !insertmacro MODULE_MSVC_INSTALLFILES
+
+!ifdef MODULE_MSVC_WIN32BUILDTREE & MODULE_MSVC_WIN32BUILDINSTALLDIRNAME & MODULE_MSVC_QTSOURCETREE & MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_WIN32_INSTALLFILES \
+ "${MODULE_MSVC_WIN32BUILDTREE}" /* QtBuildTree */ \
+ "$MSVC_INSTDIR\${MODULE_MSVC_WIN32BUILDINSTALLDIRNAME}" /* QtInstallBuildTree */ \
+ "${MODULE_MSVC_QTSOURCETREE}" /* QtSourceTree */ \
+ "$MSVC_INSTDIR\${MODULE_MSVC_QTSOURCEINSTALLDIRNAME}" /* QtInstallSourceTree */ \
+ "${MODULE_MSVC_VERSION} Desktop" /* VersionName */
+!endif
+!ifdef MODULE_MSVC_WM50BUILDTREE & MODULE_MSVC_WM50BUILDINSTALLDIRNAME & MODULE_MSVC_QTSOURCETREE & MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_WINCE_INSTALLFILES \
+ "${MODULE_MSVC_WM50BUILDTREE}" /* QtBuildTree */ \
+ "$MSVC_INSTDIR\${MODULE_MSVC_WM50BUILDINSTALLDIRNAME}" /* QtInstallBuildTree */ \
+ "${MODULE_MSVC_QTSOURCETREE}" /* QtSourceTree */ \
+ "$MSVC_INSTDIR\${MODULE_MSVC_QTSOURCEINSTALLDIRNAME}" /* QtInstallSourceTree */ \
+ "${MODULE_MSVC_VERSION} ${MODULE_MSVC_WM50VERSIONPRETTY}" /* VersionName */ \
+ ${MODULE_MSVC_WM50SDK} /* WinCESDK */
+!endif
+!ifdef MODULE_MSVC_SSDK50X86BUILDTREE & MODULE_MSVC_SSDK50X86BUILDINSTALLDIRNAME & MODULE_MSVC_QTSOURCETREE & MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_WINCE_INSTALLFILES \
+ "${MODULE_MSVC_SSDK50X86BUILDTREE}" /* QtBuildTree */ \
+ "$MSVC_INSTDIR\${MODULE_MSVC_SSDK50X86BUILDINSTALLDIRNAME}" /* QtInstallBuildTree */ \
+ "${MODULE_MSVC_QTSOURCETREE}" /* QtSourceTree */ \
+ "$MSVC_INSTDIR\${MODULE_MSVC_QTSOURCEINSTALLDIRNAME}" /* QtInstallSourceTree */ \
+ "${MODULE_MSVC_VERSION} ${MODULE_MSVC_SSDK50X86VERSIONPRETTY}" /* VersionName */ \
+ ${MODULE_MSVC_SSDK50X86SDK} /* WinCESDK */
+!endif
+!ifndef MODULE_MSVC_WIN32BUILDTREE | MODULE_MSVC_WM50BUILDTREE | MODULE_MSVC_QTSOURCETREE | MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_WIN32_INSTALLFILES \
+ "${MODULE_MSVC_BUILDDIR}" /* QtBuildTree */ \
+ "$MSVC_INSTDIR" /* QtInstallBuildTree */ \
+ "${MODULE_MSVC_BUILDDIR}" /* QtSourceTree */ \
+ "$MSVC_INSTDIR" /* QtInstallSourceTree */ \
+ "${MODULE_MSVC_VERSION}" /* VersionName */
+!endif
+
+!ifdef MODULE_LICENSECHECK
+ WriteRegStr SHCTX "SOFTWARE\Trolltech\Common\${MODULE_MSVC_VERSION}\$LICENSE_PRODUCT" "Key" "$LICENSE_KEY"
+ call MSVC_UpdateExistingVsipLicenseKeys
+!endif
+
+SectionEnd
+
+Function PatchMSVCBinaryFiles
+ Exch $0 ; Absolute path to where Qt is installed
+ Exch
+ Exch $1 ; Absolute path to where Qt was built
+ Exch
+ Exch 2
+ Exch $2 ; Name of directory containing PDBs
+ Exch 2
+ Push $3 ; FindFirst/FindNext handle
+ Push $4 ; Found .pdb file name
+
+ FindFirst $3 $4 "$0\$2\*.pdb"
+ ${DoWhile} $4 != ""
+ !insertmacro MSVC_PATCH_MSVC_BINARY_FILE "$0\$2\$4" "$1" "$0"
+ FindNext $3 $4
+ ${Loop}
+
+ !insertmacro MSVC_PATCH_MSVC_BINARY_FILE "$0\lib\qtmaind.lib" "$1" "$0"
+
+ Pop $4
+ Pop $3
+ Pop $0
+ Pop $1
+ Pop $2
+FunctionEnd
+
+Function MSVC_AddQtVersionToRegistry
+ Exch $0 ; VersionDir
+ Exch
+ Exch $1 ; VersionName
+ Exch
+ Push $2
+
+ WriteRegStr HKCU "${QT_VERSION_KEY_NAME}\$1\" "InstallDir" "$0"
+ ${If} "$RUNNING_AS_ADMIN" == true
+ WriteRegStr HKLM "${QT_VERSION_KEY_NAME}\$1\" "InstallDir" "$0"
+ ${EndIf}
+
+ ReadRegStr $2 HKCU "${QT_VERSION_KEY_NAME}" "DefaultQtVersion"
+ ${If} $2 == ""
+ WriteRegStr HKCU "${QT_VERSION_KEY_NAME}" "DefaultQtVersion" "$1"
+ ${EndIf}
+
+ Pop $2
+ Pop $0
+ Pop $1
+FunctionEnd ;MSVC_AddQtVersionToRegistry
+
+Function MSVC_CreateQtVarsBatAndShortcut
+ Exch $0 ; VersionName
+ Exch
+ Exch $1 ; WinCESDK
+ Exch
+ Exch 2
+ Exch $2 ; QtBuildTree
+ Exch 2
+ Exch 3
+ Exch $3 ; Compiler
+ Exch 3
+ Push $4 ; Found substring "command.com"
+ Push $5 ; Expanded %COMSPEC%
+
+ ${If} ${FileExists} "$2\bin\qmake.exe"
+ !insertmacro MAKE_QTVARS_FILE "$3" "$2" "$1"
+ !insertmacro CreateConditionalShortCutWithParameters "$SMPROGRAMS\$STARTMENU_STRING\Visual Studio with ${MODULE_MSVC_NAME} $0.lnk" "$2\bin\qtvars.bat" "vsstart"
+
+ ExpandEnvStrings $5 "%COMSPEC%"
+ ${StrStr} $4 "$5" "command.com"
+ ${If} "$4" == ""
+ !insertmacro CreateConditionalShortCutWithParameters "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MSVC_NAME} $0 Command Prompt.lnk" "%COMSPEC%" "/k $\"$2\bin\qtvars.bat vsvars$\""
+ ${Else}
+ !insertmacro CreateConditionalShortCutWithParameters "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MSVC_NAME} $0 Command Prompt.lnk" "%COMSPEC%" "/e:4096 /k $\"$2\bin\qtvars.bat vsvars$\""
+ ${EndIf}
+ ${EndIf}
+
+ Pop $5
+ Pop $4
+ Pop $0
+ Pop $1
+ Pop $2
+ Pop $3
+FunctionEnd ;MSVC_CreateQtVarsBatAndShortcut
+
+Function MSVC_ValidateDirectoryFunc
+ push "${MODULE_MSVC_BUILDDIR}"
+ push $MSVC_INSTDIR
+ call CommonCheckDirectory
+FunctionEnd
+
+Function MSVC_UpdateExistingVsipLicenseKeys
+ Push $0 ; EnumRegKey loop index
+ Push $1 ; Reg key
+ Push $2 ; StrStr result
+
+ StrCpy $0 0
+ loop:
+ EnumRegKey $1 SHCTX SOFTWARE\Trolltech $0
+ StrCmp $1 "" no_reg_key_found
+ ${StrStr} $2 $1 "Qt4VS"
+ StrCmp $2 $1 0 +1
+ WriteRegStr SHCTX "SOFTWARE\Trolltech\$2" "LicenseKey" "$LICENSE_KEY"
+ IntOp $0 $0 + 1
+ goto loop
+ no_reg_key_found:
+
+ Pop $2
+ Pop $1
+ Pop $0
+FunctionEnd
+!macroend
+
+!macro MSVC_DESCRIPTION
+ !insertmacro MUI_DESCRIPTION_TEXT ${MSVC_SEC01} "This installs ${MODULE_MSVC_NAME} version ${MODULE_MSVC_VERSION} on your system."
+!macroend
+
+!macro MSVC_STARTUP
+ !ifdef MODULE_MSVC_VS2005
+ Call IsVS2005SP1Installed
+ Pop $1
+ ${If} $1 == 0
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Service Pack 1 for Visual Studio 2005 is not installed.$\n${PRODUCT_NAME} for VS 2005 will not work properly without it."
+ Abort
+ ${EndIf}
+ !endif
+
+ !ifndef MODULE_MSVC_NODEFAULT
+ SectionSetFlags ${MSVC_SEC01} 17
+ !endif
+ strcpy $MSVC_INSTDIR "C:\Qt\${MODULE_MSVC_VERSION}"
+ push $MSVC_INSTDIR
+ call MakeQtDirectory
+ pop $MSVC_INSTDIR
+!macroend
+
+!macro MSVC_FINISH
+!macroend
+
+!macro MSVC_RUN_FUNCTION
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MSVCInstalled"
+ ${If} $0 == 1
+ ${If} ${FileExists} "$MSVC_QtDesktopInstallBuildTree\bin\qtdemo.exe"
+ Exec '$MSVC_QtDesktopInstallBuildTree\bin\qtdemo.exe'
+ ${EndIf}
+ Goto DoneRunFunction ;don't run more applications
+ ${EndIf}
+!macroend
+
+!macro MSVC_README_FUNCTION
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MSVCInstalled"
+ ${If} $0 == 1
+ ${If} ${FileExists} "$MSVC_QtDesktopInstallBuildTree\bin\assistant.exe"
+!ifndef README_STARTPAGE
+ Exec "$MSVC_QtDesktopInstallBuildTree\bin\assistant.exe"
+!else
+ Exec "$MSVC_QtDesktopInstallBuildTree\bin\assistant.exe -showurl $\"${README_STARTPAGE}$\""
+!endif
+ ${EndIf}
+ Goto DoneReadmeFunction ;don't run more applications
+ ${EndIf}
+!macroend
+
+!macro MSVC_UNSTARTUP
+ ${If} "$MSVC_INSTDIR" == ""
+ StrCpy $MSVC_INSTDIR "$INSTDIR\${MODULE_MSVC_NAME} ${MODULE_MSVC_VERSION}"
+ Push $MSVC_INSTDIR
+ Call un.MakeQtDirectory
+ Pop $MSVC_INSTDIR
+ ${EndIf}
+
+ !insertmacro ConfirmOnRemove "MSVCInstalled" "- ${MODULE_MSVC_NAME} ${MODULE_MSVC_VERSION} in $MSVC_INSTDIR"
+!macroend
+
+!macro MSVC_POST_UNINSTALLFILES QtInstallBuildTree VersionName
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\Visual Studio with ${MODULE_MSVC_NAME} ${VersionName}.lnk"
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MSVC_NAME} ${VersionName} Command Prompt.lnk"
+ Delete "${QtInstallBuildTree}\bin\qtvars.bat"
+
+ Push "${VersionName}"
+ Push "${QtInstallBuildTree}"
+ Call un.MSVC_RemoveQtVersionFromRegistry
+!macroend ;MSVC_POST_UNINSTALLFILES
+
+!macro MSVC_UNINSTALL
+Section un."${MODULE_MSVC_NAME} ${MODULE_MSVC_VERSION}"
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MSVCInstalled"
+ ${If} $0 == 1
+ DetailPrint "Removing start menu shortcuts and registry entries"
+ Call un.RemoveStartmenuApplication
+!ifdef MODULE_MSVC_WIN32BUILDTREE & MODULE_MSVC_WIN32BUILDINSTALLDIRNAME & MODULE_MSVC_QTSOURCETREE & MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_UNINSTALLFILES \
+ "$MSVC_INSTDIR\${MODULE_MSVC_WIN32BUILDINSTALLDIRNAME}" \
+ "${MODULE_MSVC_VERSION} Desktop"
+!endif
+!ifdef MODULE_MSVC_WM50BUILDTREE & MODULE_MSVC_WM50BUILDINSTALLDIRNAME & MODULE_MSVC_QTSOURCETREE & MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_UNINSTALLFILES \
+ "$MSVC_INSTDIR\${MODULE_MSVC_WM50BUILDINSTALLDIRNAME}" \
+ "${MODULE_MSVC_VERSION} ${MODULE_MSVC_WM50VERSIONPRETTY}"
+!endif
+!ifdef MODULE_MSVC_SSDK50X86BUILDTREE & MODULE_MSVC_SSDK50X86BUILDINSTALLDIRNAME & MODULE_MSVC_QTSOURCETREE & MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_UNINSTALLFILES \
+ "$MSVC_INSTDIR\${MODULE_MSVC_SSDK50X86BUILDINSTALLDIRNAME}" \
+ "${MODULE_MSVC_VERSION} ${MODULE_MSVC_SSDK50X86VERSIONPRETTY}"
+!endif
+!ifndef MODULE_MSVC_WIN32BUILDTREE | MODULE_MSVC_WM50BUILDTREE | MODULE_MSVC_QTSOURCETREE | MODULE_MSVC_QTSOURCEINSTALLDIRNAME
+ !insertmacro MSVC_POST_UNINSTALLFILES \
+ "$MSVC_INSTDIR" \
+ "${MODULE_MSVC_VERSION}"
+!endif
+ !insertmacro MODULE_MSVC_REMOVE "$MSVC_INSTDIR"
+ RMDir $MSVC_INSTDIR ;removes it if empty
+ ${EndIf}
+SectionEnd
+
+Function un.MSVC_RemoveQtVersionFromRegistry
+ Exch $0 ; QtInstallBuildTree
+ Exch
+ Exch $1 ; VersionName
+ Exch
+ Push $2 ; Temp
+
+ ReadRegStr $2 HKCU "${QT_VERSION_KEY_NAME}\$1" "InstallDir"
+ ${If} "$2" == "$0"
+ DeleteRegKey HKCU "${QT_VERSION_KEY_NAME}\$1"
+ ${EndIf}
+
+ ReadRegStr $2 HKLM "${QT_VERSION_KEY_NAME}\$1" "InstallDir"
+ ${If} "$2" == "$0"
+ DeleteRegKey HKLM "${QT_VERSION_KEY_NAME}\$1"
+ ${EndIf}
+
+ Pop $2
+ Pop $0
+ Pop $1
+FunctionEnd
+!macroend
+!macro MSVC_UNFINISH
+!macroend
+!else ;MODULE_MSVC
+!macro MSVC_INITIALIZE
+!macroend
+!macro MSVC_SECTIONS
+!macroend
+!macro MSVC_DESCRIPTION
+!macroend
+!macro MSVC_STARTUP
+!macroend
+!macro MSVC_FINISH
+!macroend
+!macro MSVC_README_FUNCTION
+!macroend
+!macro MSVC_RUN_FUNCTION
+!macroend
+!macro MSVC_UNSTARTUP
+!macroend
+!macro MSVC_UNINSTALL
+!macroend
+!macro MSVC_UNFINISH
+!macroend
+!endif ;MODULE_MSVC
+