qtcommon.nsh
来自「奇趣公司比较新的qt/emd版本」· NSH 代码 · 共 566 行
NSH
566 行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright (C) 2007-2007 Trolltech ASA. All rights reserved.;;;; This file is part of the Windows installer of the Qt Toolkit.;;;; This file may be used under the terms of the GNU General Public;; License version 2.0 as published by the Free Software Foundation;; and appearing in the file LICENSE.GPL included in the packaging of;; this file. Please review the following information to ensure GNU;; General Public Licensing requirements will be met:;; http://trolltech.com/products/qt/licenses/licensing/opensource/;;;; If you are unsure which license is appropriate for your use, please;; review the following information:;; http://trolltech.com/products/qt/licenses/licensing/licensingoverview;; or contact the sales department at sales@trolltech.com.;;;; In addition, as a special exception, Trolltech gives you certain;; additional rights. These rights are described in the Trolltech GPL;; Exception version 1.0, which can be found at;; http://www.trolltech.com/products/qt/gplexception/ and in the file;; GPL_EXCEPTION.txt in this package.;;;; In addition, as a special exception, Trolltech, as the sole copyright;; holder for Qt Designer, grants users of the Qt/Eclipse Integration;; plug-in the right for the Qt/Eclipse Integration to link to;; functionality provided by Qt Designer and its related libraries.;;;; Trolltech reserves all rights not expressly granted herein.;;;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!ifndef QTCOMMON_INCLUDE!define QTCOMMON_INCLUDE!macro MakeQtDirectory UNFunction ${UN}MakeQtDirectory exch $0 push $0 push " " #replace push "-" #with call ${UN}ReplaceString pop $0 push $0 push "(" #replace push "" #with call ${UN}ReplaceString pop $0 push $0 push ")" #replace push "" #with call ${UN}ReplaceString pop $0 exch $0FunctionEnd!macroend!insertmacro MakeQtDirectory ""!insertmacro MakeQtDirectory "un."Function DeleteFloatingLicenseProgram exch $1 push $0 StrCmp $LICENSE_KEY "" end ClearErrors !ifndef OPENSOURCE_BUILD qtnsisext::IsFloatingLicense $LICENSE_KEY !endif IfErrors end pop $0 StrCmp $0 "1" end IfFileExists "$1\bin\qtusagereporter.exe" 0 end Delete "$1\bin\qtusagereporter.exe" end: pop $0 pop $1FunctionEndFunction AddStartmenuApplication exch $0 IfFileExists "$0\assistant.exe" 0 +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Assistant.lnk" "$0\assistant.exe" IfFileExists "$0\designer.exe" 0 +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Designer.lnk" "$0\designer.exe" IfFileExists "$0\linguist.exe" 0 +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Linguist.lnk" "$0\linguist.exe" IfFileExists "$0\qtdemo.exe" 0 +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Examples and Demos.lnk" "$0\qtdemo.exe" IfFileExists "$0\..\README" 0 ReadMeShortCutFinished IfFileExists "$WINDIR\notepad.exe" +3 CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Qt Readme.lnk" "$SYSDIR\notepad.exe" "$0\..\README" goto ReadMeShortCutFinished CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Qt Readme.lnk" "$WINDIR\notepad.exe" "$0\..\README" ReadMeShortCutFinished: pop $0FunctionEndFunction un.RemoveStartmenuApplication Delete "$SMPROGRAMS\$STARTMENU_STRING\Assistant.lnk" Delete "$SMPROGRAMS\$STARTMENU_STRING\Designer.lnk" Delete "$SMPROGRAMS\$STARTMENU_STRING\Linguist.lnk" Delete "$SMPROGRAMS\$STARTMENU_STRING\Examples and Demos.lnk" Delete "$SMPROGRAMS\$STARTMENU_STRING\Qt Readme.lnk"FunctionEnd#patch the licence informationFunction PatchLicenseInformation exch $0 push $1 push $2 DetailPrint "Patching license information..." IfFileExists "$0\src\corelib\global\qconfig.h" 0 +3 strcpy $2 "$0\src\corelib\global\qconfig.h" goto PatchLicensee IfFileExists "$0\include\Qt\qconfig.h" 0 PatchConfigPriFile strcpy $2 "$0\include\Qt\qconfig.h" PatchLicensee: push $2 push '#define QT_PRODUCT_LICENSEE "' push '#define QT_PRODUCT_LICENSEE "$LICENSEE"$\r$\n' call PatchLine push $2 push '#define QT_PRODUCT_LICENSE "' push '#define QT_PRODUCT_LICENSE "$LICENSE_PRODUCT"$\r$\n' call PatchLine push $2 ${StrCase} $1 "$LICENSE_PRODUCT" "U" push '# define QT_EDITION QT_EDITION_' push '# define QT_EDITION QT_EDITION_$1$\r$\n' call PatchLine PatchConfigPriFile: IfFileExists "$0\mkspecs\qconfig.pri" 0 PatchLicenseProductDone push "$0\mkspecs\qconfig.pri" push "QT_EDITION = " push "QT_EDITION = $LICENSE_PRODUCT$\r$\n" call PatchLine PatchLicenseProductDone: pop $2 pop $1 pop $0FunctionEndFunction PatchCommonBinaryFiles exch $2 push $0 push $1 IfFileExists "$2\bin\qmake.exe" 0 +5 DetailPrint "Patching paths in qmake..." push $2 push "$2\bin\qmake.exe" call PatchBinaryPaths DetailPrint "Patching paths in core..." FindFirst $0 $1 "$2\bin\QtCore*.dll" StrCmp $1 "" ErrorPatching push $2 push "$2\bin\$1" call PatchBinaryPaths FindNext $0 $1 StrCmp $1 "" ErrorPatching push $2 push "$2\bin\$1" call PatchBinaryPaths ErrorPatching: pop $1 pop $0 pop $2FunctionEndFunction PatchBinaryPaths exch $0 exch exch $2 push $1!ifndef OPENSOURCE_BUILD qtnsisext::PatchBinary /NOUNLOAD $0 "qt_prfxpath=" "qt_prfxpath=$2" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_docspath=" "qt_docspath=$2\doc" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_hdrspath=" "qt_hdrspath=$2\include" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_libspath=" "qt_libspath=$2\lib" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_binspath=" "qt_binspath=$2\bin" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_plugpath=" "qt_plugpath=$2\plugins" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_datapath=" "qt_datapath=$2" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_trnspath=" "qt_trnspath=$2\translations" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_xmplpath=" "qt_xmplpath=$2\examples"!ifdef MODULE_LICENSECHECK qtnsisext::PatchBinary /NOUNLOAD $0 "qt_lcnsuser=" "qt_lcnsuser=$LICENSEE" qtnsisext::PatchBinary /NOUNLOAD $0 "qt_lcnsprod=" "qt_lcnsprod=$LICENSE_PRODUCT"!endif qtnsisext::PatchBinary $0 "qt_demopath=" "qt_demopath=$2\demos"!endif pop $1 pop $2 pop $0FunctionEnd#patching the prl filesFunction PatchPrlFiles exch $2 exch exch $3 ;buildDir push $0 push $1 FindFirst $0 $1 "$2\lib\*.prl" loop: StrCmp $1 "" done DetailPrint "Patching $1..." push "$2\lib\$1" push $3 push $2 call PatchPath FindNext $0 $1 Goto loop done: pop $1 pop $0 pop $3 pop $2FunctionEnd## patch line in text files# push "qtcore4.prl" #Filename# push "#define ..." #START WITH# push "c:\qt" #REPLACE WITH# call PatchLine#Function PatchLine exch $2 ;replacement line exch 2 exch $1 ;Filename exch exch $0 ;start with push $3 ; tmp filename push $4 ; handle (tmp) push $5 ; handle (org) push $6 ; string ClearErrors GetTempFileName $3 IfErrors done FileOpen $4 $3 w IfErrors done FileOpen $5 $1 r IfErrors donenextline: FileRead $5 $6 IfErrors renameFile push $6 push $0 push $2 call ReplaceLine pop $6 FileWrite $4 $6 goto nextlinerenameFile: FileClose $4 FileClose $5 SetDetailsPrint none Delete $1 Rename $3 $1 SetDetailsPrint both done: pop $6 pop $5 pop $4 pop $3 pop $0 pop $1 pop $2FunctionEnd## replaces a string that starts with something, with another string# push string# push "#define ..." #START WITH# push "c:\qt" #REPLACE WITH# call ReplaceLine# pop $0 #new string#Function ReplaceLine exch $2 ;new line exch 2 exch $1 ;string exch exch $0 ;start with push $3 ; tmp string push $4 ; counter push $5 ; strlen StrCpy $4 "-1" StrLen $5 $1 loop: IntOp $4 $4 + 1 ;increase counter StrCpy $3 $1 $4 ;get substring IntCmp $4 $5 copystring ; check for end StrCmp $3 $0 done ;start with found goto loop copystring: StrCpy $2 $1 goto done done: pop $5 pop $4 pop $3 pop $0 pop $1 exch $2FunctionEnd## patch paths in text files# push "qtcore4.prl" #Filename# push "c:\compile" #OLD_QTDIR# push "c:\qt" #QTDIR# call PatchPath#Function PatchPath exch $2 ;NEW exch 2 exch $1 ;Filename exch exch $0 ;OLD push $3 ;readline push $4 ;file 1 push $5 ;file 2 push $6 ;tmpfilename push $7 ;forward slash NEW push $8 ;forward slash OLD push $2 push "\" push "/" call ReplaceString pop $7 push $0 push "\" push "/" call ReplaceString pop $8 ClearErrors GetTempFileName $6 IfErrors done FileOpen $5 $6 w IfErrors done FileOpen $4 $1 r IfErrors donenextline: FileRead $4 $3 IfErrors renameFile push $3 push $0 push $2 call ReplaceString ;replace backward slash path push $8 push $7 call ReplaceString ;replace forward slash path pop $3 FileWrite $5 $3 goto nextlinerenameFile: FileClose $5 FileClose $4 SetDetailsPrint none Delete $1 Rename $6 $1 SetDetailsPrint bothdone: pop $8 pop $7 pop $6 pop $5 pop $4 pop $3 pop $0 pop $1 pop $2FunctionEnd## replaces a string with another string# push string# push "c:\qt" #replace# push "c:\compile" #with# call ReplaceString# pop $0 #new string#!macro ReplaceString UNFunction ${UN}ReplaceString exch $2 ;NEW exch 2 exch $1 ;string exch exch $0 ;OLD push $3 ; tmp string push $4 ; counter push $5 ; result push $6 ; old strlen StrCpy $4 "-1" StrCpy $5 "" StrLen $6 $0 loop: IntOp $4 $4 + 1 ;increase counter StrCpy $3 $1 $6 $4 ;get substring StrCmp $3 "" done ; check for end StrCmp $3 $0 replace ;replace if old StrCpy $3 $1 "1" $4 StrCpy $5 $5$3 ;append character to result goto loop replace: StrCpy $5 $5$2 ;insert new qtdir IntOp $4 $4 + $6 ;increase offset IntOp $4 $4 - 1 ;decrease offset one more goto loop done: StrCpy $2 $5 pop $6 pop $5 pop $4 pop $3 pop $0 pop $1 exch $2FunctionEnd!macroend!insertmacro ReplaceString ""!insertmacro ReplaceString "un."Function CommonCheckDirectory exch $4 exch exch $5 push $0 push $1 push $2 push $3 ; check if qt is already installed IfFileExists "$4\bin\qmake.exe" 0 +2 IfFileExists "$4\uninst.exe" qtExistsError ; check if directory is empty FindFirst $0 $1 "$4\*" CommonCheckDirectory_FileSearchLoop: StrCmp $1 "" CommonCheckDirectory_DirDoesNotExist StrCmp $1 "." CommonCheckDirectory_ContinueSearchLoop StrCmp $1 ".." CommonCheckDirectory_ContinueSearchLoop goto CommonCheckDirectory_FoundFile CommonCheckDirectory_ContinueSearchLoop: FindNext $0 $1 goto CommonCheckDirectory_FileSearchLoopCommonCheckDirectory_FoundFile: FindClose $0 MessageBox MB_YESNO|MB_ICONEXCLAMATION "This directory already has contents. Are you sure you want to use this directory?" IDYES CommonCheckDirectory_DirDoesNotExist Goto errorInDirectoryCommonCheckDirectory_DirDoesNotExist: FindClose $0 GetInstDirError $0 IntCmp 0 $0 0 instDirError StrLen $0 $4!ifdef USE_NODIRLENGTHCHECK StrCpy $1 "400"!else StrLen $1 $5!endif IntCmp $1 $0 0 directoryToLong ;check for spaces StrCpy $2 "-1" StrCpy $3 "" loop: IntOp $2 $2 + 1 ;increase counter StrCpy $3 $4 "1" $2 ;get char StrCmp $3 "" directoryOk ; check for end StrCmp $3 " " spaceInDirectory ;check for space goto loopqtExistsError: MessageBox MB_OK|MB_ICONEXCLAMATION "Qt is already installed in this directory. Please uninstall the previous version and try again." Goto errorInDirectoryinstDirError: MessageBox MB_OK|MB_ICONEXCLAMATION "This is not a valid installation directory." Goto errorInDirectoryspaceInDirectory: MessageBox MB_OK|MB_ICONEXCLAMATION "The installation path can't contain spaces." Goto errorInDirectorydirectoryToLong: MessageBox MB_OK|MB_ICONEXCLAMATION "The installation directory is to long." Goto errorInDirectoryerrorInDirectory: pop $3 pop $2 pop $1 pop $0 pop $5 pop $4 Abort goto donedirectoryOk: pop $3 pop $2 pop $1 pop $0 pop $5 pop $4done:FunctionEnd!endif ;QTCOMMON_INCLUDE
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?