;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
;; All rights reserved.
;; Contact: Nokia Corporation (qt-info@nokia.com)
;;
;; This file is part of the tools applications of the Qt Toolkit.
;;
;; $QT_BEGIN_LICENSE:LGPL$
;; No Commercial Usage
;; This file contains pre-release code and may not be distributed.
;; You may use this file in accordance with the terms and conditions
;; contained in the Technology Preview License Agreement accompanying
;; this package.
;;
;; GNU Lesser General Public License Usage
;; Alternatively, this file may be used under the terms of the GNU Lesser
;; General Public License version 2.1 as published by the Free Software
;; Foundation and appearing in the file LICENSE.LGPL included in the
;; packaging of this file. Please review the following information to
;; ensure the GNU Lesser General Public License version 2.1 requirements
;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
;;
;; In addition, as a special exception, Nokia gives you certain additional
;; rights. These rights are described in the Nokia Qt LGPL Exception
;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
;;
;; If you have questions regarding the use of this file, please contact
;; Nokia at qt-info@nokia.com.
;;
;;
;;
;;
;;
;;
;;
;;
;; $QT_END_LICENSE$
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!ifndef QTCOMMON_INCLUDE
!define QTCOMMON_INCLUDE
!macro MakeQtDirectory UN
Function ${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 $0
FunctionEnd
!macroend
!insertmacro MakeQtDirectory ""
!insertmacro MakeQtDirectory "un."
Function 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 $0
FunctionEnd
Function 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 information
Function 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 $0
FunctionEnd
Function 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 $2
FunctionEnd
Function 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 $0
FunctionEnd
#patching the prl files
Function 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 $2
FunctionEnd
#
# 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 done
nextline:
FileRead $5 $6
IfErrors renameFile
push $6
push $0
push $2
call ReplaceLine
pop $6
FileWrite $4 $6
goto nextline
renameFile:
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 $2
FunctionEnd
#
# 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 $2
FunctionEnd
#
# 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 done
nextline:
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 nextline
renameFile:
FileClose $5
FileClose $4
SetDetailsPrint none
Delete $1
Rename $6 $1
SetDetailsPrint both
done:
pop $8
pop $7
pop $6
pop $5
pop $4
pop $3
pop $0
pop $1
pop $2
FunctionEnd
#
# replaces a string with another string
# push string
# push "c:\qt" #replace
# push "c:\compile" #with
# call ReplaceString
# pop $0 #new string
#
!macro ReplaceString UN
Function ${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 $2
FunctionEnd
!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_FileSearchLoop
CommonCheckDirectory_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 errorInDirectory
CommonCheckDirectory_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 loop
qtExistsError:
MessageBox MB_OK|MB_ICONEXCLAMATION "Qt is already installed in this directory. Please uninstall the previous version and try again."
Goto errorInDirectory
instDirError:
MessageBox MB_OK|MB_ICONEXCLAMATION "This is not a valid installation directory."
Goto errorInDirectory
spaceInDirectory:
MessageBox MB_OK|MB_ICONEXCLAMATION "The installation path can't contain spaces."
Goto errorInDirectory
directoryToLong:
MessageBox MB_OK|MB_ICONEXCLAMATION "The installation directory is to long."
Goto errorInDirectory
errorInDirectory:
pop $3
pop $2
pop $1
pop $0
pop $5
pop $4
Abort
goto done
directoryOk:
pop $3
pop $2
pop $1
pop $0
pop $5
pop $4
done:
FunctionEnd
!endif ;QTCOMMON_INCLUDE