summaryrefslogtreecommitdiffstats
path: root/tools/installer/nsis
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2009-03-23 09:18:55 (GMT)
committerSimon Hausmann <simon.hausmann@nokia.com>2009-03-23 09:18:55 (GMT)
commite5fcad302d86d316390c6b0f62759a067313e8a9 (patch)
treec2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tools/installer/nsis
downloadQt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip
Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz
Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2
Long live Qt 4.5!
Diffstat (limited to 'tools/installer/nsis')
-rw-r--r--tools/installer/nsis/confirmpage.ini62
-rw-r--r--tools/installer/nsis/gwdownload.ini121
-rw-r--r--tools/installer/nsis/gwmirror.ini70
-rw-r--r--tools/installer/nsis/images/install.icobin0 -> 22486 bytes
-rw-r--r--tools/installer/nsis/images/qt-header.bmpbin0 -> 25818 bytes
-rw-r--r--tools/installer/nsis/images/qt-wizard.bmpbin0 -> 154542 bytes
-rw-r--r--tools/installer/nsis/includes/global.nsh146
-rw-r--r--tools/installer/nsis/includes/instdir.nsh257
-rw-r--r--tools/installer/nsis/includes/list.nsh139
-rw-r--r--tools/installer/nsis/includes/qtcommon.nsh574
-rw-r--r--tools/installer/nsis/includes/qtenv.nsh306
-rw-r--r--tools/installer/nsis/includes/system.nsh272
-rw-r--r--tools/installer/nsis/installer.nsi527
-rw-r--r--tools/installer/nsis/modules/environment.nsh219
-rw-r--r--tools/installer/nsis/modules/mingw.nsh676
-rw-r--r--tools/installer/nsis/modules/opensource.nsh98
-rw-r--r--tools/installer/nsis/modules/registeruiext.nsh210
-rw-r--r--tools/installer/nsis/opensource.ini81
18 files changed, 3758 insertions, 0 deletions
diff --git a/tools/installer/nsis/confirmpage.ini b/tools/installer/nsis/confirmpage.ini
new file mode 100644
index 0000000..8790e83
--- /dev/null
+++ b/tools/installer/nsis/confirmpage.ini
@@ -0,0 +1,62 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Ini file generated by the HM NIS Edit IO designer.
+[Settings]
+NumFields=2
+
+[Field 1]
+Type=Label
+Text=The following components will be uninstalled:
+Left=1
+Right=298
+Top=1
+Bottom=12
+
+[Field 2]
+Type=Label
+Left=16
+Right=298
+Top=16
+Bottom=136
+
diff --git a/tools/installer/nsis/gwdownload.ini b/tools/installer/nsis/gwdownload.ini
new file mode 100644
index 0000000..05c5952
--- /dev/null
+++ b/tools/installer/nsis/gwdownload.ini
@@ -0,0 +1,121 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Ini file generated by the HM NIS Edit IO designer.
+[Settings]
+NumFields=9
+
+[Field 1]
+Type=Groupbox
+Text=Find MinGW
+Left=0
+Right=299
+Top=49
+Bottom=91
+
+[Field 2]
+Type=Label
+Text=Please specify a directory where to find MinGW (for instance: C:\\MinGW). If you do not have MinGW installed, you can let the installer download and install it for you.
+Left=2
+Right=298
+Top=1
+Bottom=27
+
+[Field 3]
+Type=DirRequest
+Left=8
+Right=290
+Top=68
+Bottom=81
+
+[Field 4]
+Type=Groupbox
+Text=Download and install MinGW
+Left=0
+Right=299
+Top=94
+Bottom=137
+
+[Field 5]
+Type=Label
+Text=Previously installed MinGW:
+Left=8
+Right=286
+Top=60
+Bottom=68
+
+[Field 6]
+Type=DirRequest
+Left=8
+Right=290
+Top=116
+Bottom=129
+Flags=DISABLED
+
+[Field 7]
+Type=Label
+Text=Installation directory:
+Left=8
+Right=124
+Top=107
+Bottom=115
+Flags=DISABLED
+
+[Field 8]
+Type=Checkbox
+Text=Download and install minimal MinGW installation.
+Left=8
+Right=172
+Top=28
+Bottom=40
+Flags=NOTIFY
+
+[Field 9]
+Type=Link
+Text=(http://www.mingw.org)
+Left=174
+Right=260
+Top=30
+Bottom=38
+State=http://www.mingw.org
+
diff --git a/tools/installer/nsis/gwmirror.ini b/tools/installer/nsis/gwmirror.ini
new file mode 100644
index 0000000..9525164
--- /dev/null
+++ b/tools/installer/nsis/gwmirror.ini
@@ -0,0 +1,70 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Ini file generated by the HM NIS Edit IO designer.
+[Settings]
+NumFields=3
+
+[Field 1]
+Type=Label
+Text=Select a mirror where to download MinGW:
+Left=0
+Right=211
+Top=0
+Bottom=8
+
+[Field 2]
+Type=Checkbox
+Text=Download MinGW source code. (You don't need this to compile Qt)
+Left=4
+Right=296
+Top=124
+Bottom=134
+
+[Field 3]
+Type=Listbox
+Left=0
+Right=299
+Top=9
+Bottom=118
+
diff --git a/tools/installer/nsis/images/install.ico b/tools/installer/nsis/images/install.ico
new file mode 100644
index 0000000..080d82d
--- /dev/null
+++ b/tools/installer/nsis/images/install.ico
Binary files differ
diff --git a/tools/installer/nsis/images/qt-header.bmp b/tools/installer/nsis/images/qt-header.bmp
new file mode 100644
index 0000000..1333cb4
--- /dev/null
+++ b/tools/installer/nsis/images/qt-header.bmp
Binary files differ
diff --git a/tools/installer/nsis/images/qt-wizard.bmp b/tools/installer/nsis/images/qt-wizard.bmp
new file mode 100644
index 0000000..4aefd2d
--- /dev/null
+++ b/tools/installer/nsis/images/qt-wizard.bmp
Binary files differ
diff --git a/tools/installer/nsis/includes/global.nsh b/tools/installer/nsis/includes/global.nsh
new file mode 100644
index 0000000..c124018
--- /dev/null
+++ b/tools/installer/nsis/includes/global.nsh
@@ -0,0 +1,146 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!include "StrFunc.nsh"
+!include "includes\list.nsh"
+
+${StrCase}
+${StrTrimNewLines}
+${StrStr}
+${StrRep}
+${UnStrRep}
+
+var STARTMENU_STRING
+var PRODUCT_UNIQUE_KEY
+var RUNNING_AS_ADMIN
+
+!ifndef MODULE_MINGW
+ !ifdef MODULE_MSVC_VC60
+ !define INSTALL_COMPILER "vc60"
+ !else
+ !ifdef MODULE_MSVC_VS2002
+ !define INSTALL_COMPILER "vs2002"
+ !else
+ !ifdef MODULE_MSVC_VS2005
+ !define INSTALL_COMPILER "vs2005"
+ !else
+ !define INSTALL_COMPILER "vs2003"
+ !endif
+ !endif
+ !endif
+!else
+ !define INSTALL_COMPILER "mingw"
+!endif
+
+; ADDIN\INTEGRATION
+var VS_VERSION
+var VS_VERSION_SHORT
+var ADDIN_INSTDIR
+var VSIP_INSTDIR
+var HELP_INSTDIR
+var ECLIPSE_INSTDIR
+var QTJAMBIECLIPSE_INSTDIR
+
+; LICENSECHECK
+var LICENSE_KEY
+var LICENSEE
+var LICENSE_PRODUCT
+var LICENSE_FILE
+
+; MSVC
+!ifdef MODULE_MSVC
+ !define MSVC_ValidateDirectory
+ var MSVC_INSTDIR
+!endif
+
+; MINGW
+!ifdef MODULE_MINGW
+ !define MINGW_ValidateDirectory
+ var MINGW_INSTDIR
+!endif
+
+; QSA
+var QSA_INSTDIR
+
+; QTDIR PAGE
+var QTDIR_SELECTED
+var COMPILER_SELECTED
+
+; used by addin7x and vsip
+!ifndef MODULE_VSIP_ROOT
+ !define MODULE_VSIP_ROOT "${INSTALL_ROOT}\vsip"
+!endif
+
+; add to confirm path
+var UninstallerConfirmProduct
+
+Function un.ConfirmOnDelete
+ exch $0
+ push $1
+
+ push "$0"
+ push "$UninstallerConfirmProduct"
+ call un.ItemInList
+ pop $1
+ IntCmp $1 1 ConfirmOnDeleteDone
+
+ strcmp "$UninstallerConfirmProduct" "" 0 +3
+ strcpy $UninstallerConfirmProduct "$0"
+ goto +2
+ strcpy $UninstallerConfirmProduct "$UninstallerConfirmProduct$\r$\n$0"
+
+ ConfirmOnDeleteDone:
+ pop $1
+ pop $0
+FunctionEnd
+
+!macro ConfirmOnRemove REG_KEY PRODUCT_NAME
+ push $0
+ ClearErrors
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "${REG_KEY}"
+ intcmp $0 1 0 +3
+ push "${PRODUCT_NAME}"
+ call un.ConfirmOnDelete
+ ClearErrors
+ pop $0
+!macroend \ No newline at end of file
diff --git a/tools/installer/nsis/includes/instdir.nsh b/tools/installer/nsis/includes/instdir.nsh
new file mode 100644
index 0000000..859b004
--- /dev/null
+++ b/tools/installer/nsis/includes/instdir.nsh
@@ -0,0 +1,257 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; 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 INSTDIR_1
+ !macro INSTDIR_INITIALIZE
+ !define MUI_DIRECTORYPAGE_VARIABLE $${INSTDIR_0}_INSTDIR
+ !ifdef ${INSTDIR_0}_ValidateDirectory
+ !define MUI_PAGE_CUSTOMFUNCTION_LEAVE "${INSTDIR_0}_ValidateDirectoryFunc"
+ !endif
+ !insertmacro MUI_PAGE_DIRECTORY
+ !macroend
+ !macro INSTDIR_FUNCTIONS
+ !macroend
+ !macro INSTDIR_STARTUP
+ !macroend
+!else
+!macro INSTDIR_INITIALIZE
+ !define INSTDIR_INI_FILE "instdir.ini"
+ !define INSTDIR_0_DIRFIELD "Field 10"
+ !define INSTDIR_0_TEXTFIELD "Field 13"
+ !define INSTDIR_1_DIRFIELD "Field 7"
+ !define INSTDIR_1_TEXTFIELD "Field 11"
+ !define INSTDIR_2_DIRFIELD "Field 5"
+ !define INSTDIR_2_TEXTFIELD "Field 8"
+ !define INSTDIR_3_DIRFIELD "Field 3"
+ !define INSTDIR_3_TEXTFIELD "Field 6"
+ !define INSTDIR_4_DIRFIELD "Field 2"
+ !define INSTDIR_4_TEXTFIELD "Field 4"
+ !define INSTDIR_5_DIRFIELD "Field 9"
+ !define INSTDIR_5_TEXTFIELD "Field 12"
+ !define INSTDIR_DIRHEIGHT 18
+
+ Page custom InitInstDirs UpdateInstDirs
+
+ LangString InstDirLicenseTitle ${LANG_ENGLISH} "Installation Directories"
+ LangString InstDirLicenseTitleDescription ${LANG_ENGLISH} "Select the directories where you want the software installed."
+!macroend
+
+!macro INSTDIR_FUNCTIONS
+ Function InitInstDirs
+ push $0
+ push $1
+ push $2
+ push $3
+
+ !insertmacro MUI_HEADER_TEXT "$(InstDirLicenseTitle)" "$(InstDirLicenseTitleDescription)"
+ strcpy $0 "129"
+
+!ifdef INSTDIR_0
+ SectionGetFlags ${${INSTDIR_0}_SEC01} $1
+!ifdef ${INSTDIR_0}_SEC02
+ SectionGetFlags ${${INSTDIR_0}_SEC02} $3
+ IntOp $1 $1 | $3
+!endif
+ IntOp $2 $1 & 1 ;just care about the first flag
+ StrCpy $1 "READONLY"
+ StrCmp "$2" "1" +2
+ StrCpy $1 "DISABLED"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_TEXTFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_TEXTFIELD}" "Text" "${INSTDIR_0_TEXT}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "State" $${INSTDIR_0}_INSTDIR
+!else
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "Type" "Unknown"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_TEXTFIELD}" "Type" "Unknown"
+ intop $0 $0 - ${INSTDIR_DIRHEIGHT}
+!endif
+!ifdef INSTDIR_1
+ SectionGetFlags ${${INSTDIR_1}_SEC01} $1
+!ifdef ${INSTDIR_1}_SEC02
+ SectionGetFlags ${${INSTDIR_1}_SEC02} $3
+ IntOp $1 $1 | $3
+!endif
+ IntOp $2 $1 & 1 ;just care about the first flag
+ StrCpy $1 "READONLY"
+ StrCmp "$2" "1" +2
+ StrCpy $1 "DISABLED"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_TEXTFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_TEXTFIELD}" "Text" "${INSTDIR_1_TEXT}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "State" $${INSTDIR_1}_INSTDIR
+!else
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "Type" "Unknown"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_TEXTFIELD}" "Type" "Unknown"
+ intop $0 $0 - ${INSTDIR_DIRHEIGHT}
+!endif
+!ifdef INSTDIR_2
+ SectionGetFlags ${${INSTDIR_2}_SEC01} $1
+!ifdef ${INSTDIR_2}_SEC02
+ SectionGetFlags ${${INSTDIR_2}_SEC02} $3
+ IntOp $1 $1 | $3
+!endif
+ IntOp $2 $1 & 1 ;just care about the first flag
+ StrCpy $1 "READONLY"
+ StrCmp "$2" "1" +2
+ StrCpy $1 "DISABLED"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_TEXTFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_TEXTFIELD}" "Text" "${INSTDIR_2_TEXT}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "State" $${INSTDIR_2}_INSTDIR
+!else
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "Type" "Unknown"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_TEXTFIELD}" "Type" "Unknown"
+ intop $0 $0 - ${INSTDIR_DIRHEIGHT}
+!endif
+!ifdef INSTDIR_3
+ SectionGetFlags ${${INSTDIR_3}_SEC01} $1
+!ifdef ${INSTDIR_3}_SEC02
+ SectionGetFlags ${${INSTDIR_3}_SEC02} $3
+ IntOp $1 $1 | $3
+!endif
+ IntOp $2 $1 & 1 ;just care about the first flag
+ StrCpy $1 "READONLY"
+ StrCmp "$2" "1" +2
+ StrCpy $1 "DISABLED"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_TEXTFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_TEXTFIELD}" "Text" "${INSTDIR_3_TEXT}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "State" $${INSTDIR_3}_INSTDIR
+!else
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "Type" "Unknown"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_TEXTFIELD}" "Type" "Unknown"
+ intop $0 $0 - ${INSTDIR_DIRHEIGHT}
+!endif
+!ifdef INSTDIR_4
+ SectionGetFlags ${${INSTDIR_4}_SEC01} $1
+!ifdef ${INSTDIR_4}_SEC02
+ SectionGetFlags ${${INSTDIR_4}_SEC02} $3
+ IntOp $1 $1 | $3
+!endif
+ IntOp $2 $1 & 1 ;just care about the first flag
+ StrCpy $1 "READONLY"
+ StrCmp "$2" "1" +2
+ StrCpy $1 "DISABLED"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_TEXTFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_TEXTFIELD}" "Text" "${INSTDIR_4_TEXT}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "State" $${INSTDIR_4}_INSTDIR
+!else
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "Type" "Unknown"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_TEXTFIELD}" "Type" "Unknown"
+ intop $0 $0 - ${INSTDIR_DIRHEIGHT}
+!endif
+!ifdef INSTDIR_5
+ SectionGetFlags ${${INSTDIR_5}_SEC01} $1
+!ifdef ${INSTDIR_5}_SEC02
+ SectionGetFlags ${${INSTDIR_5}_SEC02} $3
+ IntOp $1 $1 | $3
+!endif
+ IntOp $2 $1 & 1 ;just care about the first flag
+ StrCpy $1 "READONLY"
+ StrCmp "$2" "1" +2
+ StrCpy $1 "DISABLED"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_TEXTFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "Flags" "$1"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_TEXTFIELD}" "Text" "${INSTDIR_5_TEXT}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "State" $${INSTDIR_5}_INSTDIR
+!else
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "Type" "Unknown"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_TEXTFIELD}" "Type" "Unknown"
+ intop $0 $0 - ${INSTDIR_DIRHEIGHT}
+!endif
+
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "Field 1" "Bottom" "$0"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${INSTDIR_INI_FILE}"
+
+ pop $3
+ pop $2
+ pop $1
+ pop $0
+ FunctionEnd
+
+ Function UpdateInstDirs
+!ifdef INSTDIR_0
+ !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_0}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "State"
+ !ifdef ${INSTDIR_0}_ValidateDirectory
+ call ${INSTDIR_0}_ValidateDirectoryFunc
+ !endif
+!endif
+!ifdef INSTDIR_1
+ !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_1}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "State"
+ !ifdef ${INSTDIR_1}_ValidateDirectory
+ call ${INSTDIR_1}_ValidateDirectoryFunc
+ !endif
+!endif
+!ifdef INSTDIR_2
+ !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_2}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "State"
+ !ifdef ${INSTDIR_2}_ValidateDirectory
+ call ${INSTDIR_2}_ValidateDirectoryFunc
+ !endif
+!endif
+!ifdef INSTDIR_3
+ !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_3}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "State"
+ !ifdef ${INSTDIR_3}_ValidateDirectory
+ call ${INSTDIR_3}_ValidateDirectoryFunc
+ !endif
+!endif
+!ifdef INSTDIR_4
+ !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_4}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "State"
+ !ifdef ${INSTDIR_4}_ValidateDirectory
+ call ${INSTDIR_4}_ValidateDirectoryFunc
+ !endif
+!endif
+!ifdef INSTDIR_5
+ !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_5}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "State"
+ !ifdef ${INSTDIR_5}_ValidateDirectory
+ call ${INSTDIR_5}_ValidateDirectoryFunc
+ !endif
+!endif
+ FunctionEnd
+!macroend
+
+!macro INSTDIR_STARTUP
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${INSTDIR_INI_FILE}"
+!macroend
+
+!endif ;ifndef INSTDIR_1 \ No newline at end of file
diff --git a/tools/installer/nsis/includes/list.nsh b/tools/installer/nsis/includes/list.nsh
new file mode 100644
index 0000000..c553f67
--- /dev/null
+++ b/tools/installer/nsis/includes/list.nsh
@@ -0,0 +1,139 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; 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 LIST_INCLUDE
+!define LIST_INCLUDE
+
+; usage:
+; push item
+; push list
+; call ItemInList
+; returns 1 or 0
+!macro ItemInList UN
+Function ${UN}ItemInList
+ exch $0 ;list
+ exch
+ exch $1 ;item
+ push $2 ;counter
+ push $3 ;substr
+ push $4 ;char
+
+ strcpy $3 ""
+ strcpy $2 "0"
+
+ loop:
+ strcpy $4 $0 1 $2
+ strcmp "$4" "" atend
+ intop $2 $2 + 1
+
+ strcmp "$4" "|" 0 +4
+ strcmp "$3" "$1" found
+ strcpy $3 "" ;reset substr
+ goto +2
+ strcpy $3 "$3$4" ;append char to substr
+ goto loop
+
+ found:
+ strcpy $0 "1"
+ goto done
+
+ atend:
+ strcmp "$3" "$1" found
+ strcpy $0 "0"
+
+ done:
+ pop $4
+ pop $3
+ pop $2
+ pop $1
+ exch $0
+FunctionEnd
+!macroend
+
+!insertmacro ItemInList ""
+!insertmacro ItemInList "un."
+
+Function GetItemInList
+ exch $0 ;list
+ exch
+ exch $1 ;index
+ push $2 ;counter
+ push $3 ;substr
+ push $4 ;char
+ push $5 ;current index
+
+ strcpy $3 ""
+ strcpy $2 "0"
+ strcpy $5 "1"
+
+ loop:
+ strcpy $4 $0 1 $2
+ strcmp "$4" "" atend
+ intop $2 $2 + 1
+
+ strcmp "$4" "|" 0 +5
+ strcmp "$5" "$1" found
+ strcpy $3 "" ;reset substr
+ intop $5 $5 + 1
+ goto +2
+ strcpy $3 "$3$4" ;append char to substr
+ goto loop
+
+ found:
+ strcpy $0 "$3"
+ goto done
+
+ atend:
+ strcmp "$5" "$1" found
+ strcpy $0 ""
+
+ done:
+ pop $5
+ pop $4
+ pop $3
+ pop $2
+ pop $1
+ exch $0
+FunctionEnd
+
+!endif ;LIST_INCLUDE \ No newline at end of file
diff --git a/tools/installer/nsis/includes/qtcommon.nsh b/tools/installer/nsis/includes/qtcommon.nsh
new file mode 100644
index 0000000..72a5211
--- /dev/null
+++ b/tools/installer/nsis/includes/qtcommon.nsh
@@ -0,0 +1,574 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; 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 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 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 $1
+FunctionEnd
+
+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 \ No newline at end of file
diff --git a/tools/installer/nsis/includes/qtenv.nsh b/tools/installer/nsis/includes/qtenv.nsh
new file mode 100644
index 0000000..9232093
--- /dev/null
+++ b/tools/installer/nsis/includes/qtenv.nsh
@@ -0,0 +1,306 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; 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 QTENV_INCLUDE
+!define QTENV_INCLUDE
+#
+# creates a qtvars.bat file in $QTDIR\bin
+# push "vs2003" #compiler
+# push "c:\qt" #QTDIR
+# call MakeQtVarsFile
+#
+Function MakeQtVarsFile
+ exch $1 ; QTDIR
+ exch
+ exch $3 ; vs version
+ push $0 ; file handle
+ push $2
+ push $4
+
+ push $3
+ call GetMkSpec
+ pop $2
+
+ ClearErrors
+ FileOpen $0 "$1\bin\qtvars.bat" w
+ IfErrors done
+ FileWrite $0 "@echo off$\r$\n"
+ FileWrite $0 "rem$\r$\n"
+ FileWrite $0 "rem This file is generated$\r$\n"
+ FileWrite $0 "rem$\r$\n"
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 "echo Setting up a Qt environment...$\r$\n"
+ FileWrite $0 "echo -- QTDIR set to $1$\r$\n"
+ FileWrite $0 "echo -- Added $1\bin to PATH$\r$\n"
+ FileWrite $0 "echo -- QMAKESPEC set to $2$\r$\n"
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 "set QTDIR=$1$\r$\n"
+ FileWrite $0 "set PATH=$1\bin;%PATH%$\r$\n"
+ FileWrite $0 "set QMAKESPEC=$2$\r$\n"
+
+ call IsExpressVersion
+ pop $4
+ strcmp $4 "" noExpressVersion
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 'regedit /e S$$D$$K$$ "HKEY_LOCAL_MACHINE\Software\Microsoft\MicrosoftSDK"$\r$\n'
+ Filewrite $0 'if not exist S$$D$$K$$ goto ENDSDK\r$\n'
+ FileWrite $0 'find "Install Dir" < S$$D$$K$$ > D$$I$$R$$$\r$\n'
+ FileWrite $0 'del S$$D$$K$$$\r$\n'
+ FileWrite $0 'for /f "tokens=2 delims==" %%i in (D$$I$$R$$) do call %%i\setenv$\r$\n'
+ FileWrite $0 'del D$$I$$R$$$\r$\n'
+ Filewrite $0 ':ENDSDK\r$\n'
+ noExpressVersion:
+
+ push $3
+ call GetVSVarsFile
+ pop $2
+ strcmp $2 "" novsvars
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 'if not "%1"=="vsvars" goto END$\r$\n'
+ FileWrite $0 'call "$2"$\r$\n'
+ FileWrite $0 ":END$\r$\n"
+
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 'if not "%1"=="vsstart" goto ENDSTARTVS$\r$\n'
+ FileWrite $0 'call "$2"$\r$\n'
+
+ strcmp $3 "vc60" vc60startup
+ FileWrite $0 "devenv /useenv$\r$\n"
+ Goto donevsstartup
+ vc60startup:
+ FileWrite $0 "msdev /useenv$\r$\n"
+ donevsstartup:
+
+ FileWrite $0 ":ENDSTARTVS$\r$\n"
+
+ novsvars:
+ FileWrite $0 "$\r$\n"
+ FileClose $0
+ done:
+ pop $4
+ pop $2
+ pop $0
+ pop $3
+ pop $1
+FunctionEnd
+
+Function GetMkSpec
+ exch $0
+ StrCmp $0 "mingw" MINGW
+ StrCmp $0 "vs2005" VS2005
+ StrCmp $0 "vs2003" VS2003
+ StrCmp $0 "vs2002" VS2002
+ StrCmp $0 "vc60" VS60
+ StrCmp $0 "icc" ICC
+
+ MINGW:
+ pop $0
+ push "win32-g++"
+ goto done
+
+ VS2005:
+ pop $0
+ push "win32-msvc2005"
+ goto done
+
+ VS2003:
+ pop $0
+ push "win32-msvc.net"
+ goto done
+
+ VS2002:
+ pop $0
+ push "win32-msvc.net"
+ goto done
+
+ VS60:
+ pop $0
+ push "win32-msvc"
+ goto done
+
+ ICC:
+ pop $0
+ push "win32-icc"
+ goto done
+
+ done:
+FunctionEnd
+
+!define AD_COMPILER_NAME_VS2005 "Visual Studio .NET 2005"
+!define AD_COMPILER_NAME_VS2005_EXPRESS "Visual C++ 2005 Express Edition"
+!define AD_COMPILER_NAME_VS2003 "Visual Studio .NET 2003"
+!define AD_COMPILER_NAME_VS2002 "Visual Studio .NET 2002"
+!define AD_COMPILER_NAME_VC60 "Visual Studio 6.0"
+!define AD_COMPILER_NAME_ICC "Intel C++ Compiler"
+!define AD_COMPILER_NAME_MINGW "MinGW (Must be in PATH!)"
+
+Function GetShortCompilerName
+ exch $0
+
+ strcmp "$0" "${AD_COMPILER_NAME_VS2005}" 0 +3
+ strcpy $0 "vs2005"
+ goto done
+
+ strcmp "$0" "${AD_COMPILER_NAME_VS2005_EXPRESS}" 0 +3
+ strcpy $0 "vs2005"
+ goto done
+
+ strcmp "$0" "${AD_COMPILER_NAME_VS2003}" 0 +3
+ strcpy $0 "vs2003"
+ goto done
+
+ strcmp "$0" "${AD_COMPILER_NAME_VS2002}" 0 +3
+ strcpy $0 "vs2002"
+ goto done
+
+ strcmp "$0" "${AD_COMPILER_NAME_VC60}" 0 +3
+ strcpy $0 "vc60"
+ goto done
+
+ strcmp "$0" "${AD_COMPILER_NAME_ICC}" 0 +3
+ strcpy $0 "icc"
+ goto done
+
+ strcmp "$0" "${AD_COMPILER_NAME_MINGW}" 0 +3
+ strcpy $0 "mingw"
+ goto done
+
+ strcpy $0 "" ;this is bad!
+
+ done:
+ exch $0
+FunctionEnd
+
+Function IsExpressVersion
+ push $0
+ ReadRegStr $0 HKLM "Software\Microsoft\VCExpress\8.0" "InstallDir"
+ ClearErrors
+ exch $0
+FunctionEnd
+
+Function AutoDetectCompilers
+ push $0
+ push $1
+
+ strcpy $1 ""
+
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\8.0" "InstallDir"
+ strcmp $0 "" +2
+ strcpy $1 "$1${AD_COMPILER_NAME_VS2005}|"
+
+ ReadRegStr $0 HKLM "Software\Microsoft\VCExpress\8.0" "InstallDir"
+ strcmp $0 "" +2
+ strcpy $1 "$1${AD_COMPILER_NAME_VS2005_EXPRESS}|"
+
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.1" "InstallDir"
+ strcmp $0 "" +2
+ strcpy $1 "$1${AD_COMPILER_NAME_VS2003}|"
+
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.0" "InstallDir"
+ strcmp $0 "" +2
+ strcpy $1 "$1${AD_COMPILER_NAME_VS2002}|"
+
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\6.0\Setup" "VsCommonDir"
+ strcmp $0 "" +2
+ strcpy $1 "$1${AD_COMPILER_NAME_VC60}|"
+
+ ReadRegStr $0 HKLM "Software\Intel\Compilers\C++\80" "Major Version"
+ strcmp $0 "" +2
+ strcpy $1 "$1${AD_COMPILER_NAME_ICC}|"
+
+ strcpy $1 "$1${AD_COMPILER_NAME_MINGW}"
+
+ exch
+ pop $0
+ exch $1
+FunctionEnd
+
+Function GetVSVarsFile
+ exch $1
+ push $0
+
+ StrCmp $1 "vs2005" VS2005
+ StrCmp $1 "vs2003" VS2003
+ StrCmp $1 "vs2002" VS2002
+ StrCmp $1 "vc60" VS60
+
+ push "" ;empty string if not found
+ goto done
+
+ VS2005:
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\8.0\Setup\VS" "ProductDir"
+ StrCmp $0 "" +1 foundVSDir ; found msvc.net 2005
+
+ ReadRegStr $0 HKLM "Software\Microsoft\VCExpress\8.0\Setup\VS" "ProductDir"
+ StrCmp $0 "" +1 foundVSDir ; found msvc.net 2005 epress
+
+ VS2003:
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.1\Setup\VS" "ProductDir"
+ StrCmp $0 "" +1 foundVSDir ; found msvc.net 2003
+
+ VS2002:
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.0\Setup\VS" "ProductDir"
+ StrCmp $0 "" +1 foundVSDir ; found msvc.net 2002
+
+ VS60:
+ ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++" "ProductDir"
+ StrCmp $0 "" +1 foundVCDir ; found msvc 6.0
+
+ push "" ;empty string if not found
+ goto done
+
+ foundVSDir:
+ push "$0\Common7\Tools\vsvars32.bat"
+ goto done
+
+ foundVCDir:
+ push "$0\bin\vcvars32.bat"
+
+ done:
+ exch
+ pop $0
+ exch
+ pop $1
+FunctionEnd
+
+!endif ;QTENV_INCLUDE
diff --git a/tools/installer/nsis/includes/system.nsh b/tools/installer/nsis/includes/system.nsh
new file mode 100644
index 0000000..f7cbec4
--- /dev/null
+++ b/tools/installer/nsis/includes/system.nsh
@@ -0,0 +1,272 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; 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 SYSTEM_INCLUDE
+!define SYSTEM_INCLUDE
+
+!define QTVSIP2003_GUID "{789202F4-94F5-4f0a-AA00-73295FEBFD68}"
+!define QTVSIP2005_GUID "{789202F4-94F5-4f0a-AA00-73295FEBFD69}"
+
+!define QMSNET2002_GUID "{C174ACCD-D856-4B60-9887-0FF9E841E0EC}"
+!define QMSNET2003_GUID "{C174ACCE-D857-4B61-9888-0FF9E841E0ED}"
+!define QMSNET2005_GUID "{14E98DB4-A232-49a4-8EC1-8CE4F6985C73}"
+
+!macro GetVSInstallationDir UN
+; Usage:
+;
+; push "7.0"
+; call GetVSInstallationDir
+; pop $0
+;
+; If the requested VS version can be found, its
+; installation directory is returned.
+Function ${UN}GetVSInstallationDir
+ Exch $0
+ Push $1
+ ReadRegStr $1 HKLM "Software\Microsoft\VisualStudio\$0" "InstallDir"
+ StrCpy $0 $1
+ StrCmp $0 "" 0 +2
+ SetErrors
+ Pop $1
+ Exch $0
+FunctionEnd
+!macroend
+
+!insertmacro GetVSInstallationDir ""
+!insertmacro GetVSInstallationDir "un."
+
+
+!macro IsDotNETInstalled UN
+; Usage:
+;
+; push "8.0"
+; call IsDotNETInstalled
+; pop $0
+;
+; $0 contains the path where the .NET framework is installed.
+; If not installation can be found $0 is empty.
+Function ${UN}IsDotNETInstalled
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+
+ StrCpy $5 $0
+
+ ReadRegStr $4 HKEY_LOCAL_MACHINE "Software\Microsoft\.NETFramework" "InstallRoot"
+ Push $4
+ Exch $EXEDIR
+ Exch $EXEDIR
+ Pop $4
+
+ IfFileExists $4 0 noDotNET
+ StrCpy $0 0
+
+ EnumStart:
+ EnumRegKey $2 HKEY_LOCAL_MACHINE "Software\Microsoft\.NETFramework\Policy" $0
+ IntOp $0 $0 + 1
+ StrCmp $2 "" noDotNET
+ StrCpy $1 0
+
+ EnumPolicy:
+ EnumRegValue $3 HKEY_LOCAL_MACHINE "Software\Microsoft\.NETFramework\Policy\$2" $1
+ IntOp $1 $1 + 1
+ StrCmp $3 "" EnumStart
+
+ StrCmp $5 "8.0" 0 +2
+ StrCmp $2 "v2.0" 0 EnumPolicy
+
+ IfFileExists "$4\$2.$3" foundDotNET EnumPolicy
+
+ noDotNET:
+ StrCpy $0 0
+ Goto done
+
+ foundDotNET:
+ StrCpy $0 "$4\$2.$3"
+
+ done:
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+FunctionEnd
+!macroend
+
+!insertmacro IsDotNETInstalled ""
+!insertmacro IsDotNETInstalled "un."
+
+!macro IsQMsNetInstalled UN
+; Usage:
+;
+; push "8.0"
+; call IsQMsNetInstalled
+; pop $0
+Function ${UN}IsQMsNetInstalled
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+
+ StrCmp $0 "7.0" 0 +2
+ StrCpy $2 "${QMSNET2002_GUID}"
+ StrCmp $0 "7.1" 0 +2
+ StrCpy $2 "${QMSNET2003_GUID}"
+ StrCmp $0 "8.0" 0 +2
+ StrCpy $2 "${QMSNET2005_GUID}"
+
+ StrCpy $3 0
+
+ ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\$0\NewProjectTemplates\TemplateDirs\$2\/2" "TemplatesDir"
+ StrCmp $1 "" +3
+ StrCpy $3 1
+ goto done
+
+ ReadRegStr $1 HKCU "SOFTWARE\Microsoft\VisualStudio\$0\NewProjectTemplates\TemplateDirs\$2\/2" "TemplatesDir"
+ StrCmp $1 "" +2
+ StrCpy $3 1
+
+done:
+ StrCpy $0 $3
+
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+FunctionEnd
+!macroend
+
+!insertmacro IsQMsNetInstalled ""
+!insertmacro IsQMsNetInstalled "un."
+
+!macro IsQMsDevInstalled UN
+; Usage:
+;
+; call IsQMsDevInstalled
+; pop $0
+Function ${UN}IsQMsDevInstalled
+ Push $0
+ Push $1
+ Push $2
+
+ StrCpy $0 0
+
+ ReadRegStr $1 HKLM "SOFTWARE\Microsoft\DevStudio\6.0\AddIns\q4msdev.Q4MsDev.1" "Filename"
+ StrCmp $1 "" +3
+ StrCpy $0 1
+ goto done
+
+ ReadRegStr $1 HKCU "SOFTWARE\Microsoft\DevStudio\6.0\AddIns\q4msdev.Q4MsDev.1" "Filename"
+ StrCmp $1 "" +2
+ StrCpy $0 1
+
+done:
+ Pop $2
+ Pop $1
+ Exch $0
+FunctionEnd
+!macroend
+
+!insertmacro IsQMsDevInstalled ""
+!insertmacro IsQMsDevInstalled "un."
+
+!macro IsIntegrationInstalled UN
+; Usage:
+;
+; push "8.0"
+; call IsIntegrationInstalled
+; pop $0
+Function ${UN}IsIntegrationInstalled
+ Exch $0
+ Push $1
+ Push $2
+
+ StrCmp $0 "7.1" 0 +2
+ StrCpy $2 "${QTVSIP2003_GUID}"
+ StrCmp $0 "8.0" 0 +2
+ StrCpy $2 "${QTVSIP2005_GUID}"
+
+ ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\$0\Packages\$2" "ProductName"
+
+ StrCpy $0 0
+ StrCmp $1 "" done
+ StrCpy $0 1
+
+done:
+ Pop $2
+ Pop $1
+ Exch $0
+FunctionEnd
+!macroend
+
+!insertmacro IsIntegrationInstalled ""
+!insertmacro IsIntegrationInstalled "un."
+
+!macro AdministratorRights UN
+Function ${UN}HasAdminRights
+ push $0
+ ClearErrors
+ UserInfo::GetAccountType
+ IfErrors Yes ;It's probably Win95
+ pop $0
+ StrCmp $0 "Admin" Yes
+ StrCmp $0 "Power" Yes
+
+ StrCpy $0 "false"
+ goto Done
+
+ Yes:
+ StrCpy $0 "true"
+
+ Done:
+ exch $0
+FunctionEnd
+!macroend
+!insertmacro AdministratorRights ""
+!insertmacro AdministratorRights "un."
+
+!endif ;SYSTEM_INCLUDE \ No newline at end of file
diff --git a/tools/installer/nsis/installer.nsi b/tools/installer/nsis/installer.nsi
new file mode 100644
index 0000000..c077850
--- /dev/null
+++ b/tools/installer/nsis/installer.nsi
@@ -0,0 +1,527 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Script generated by the HM NIS Edit Script Wizard.
+
+!include "config.nsh"
+!include "includes\global.nsh"
+
+!define PRODUCT_PUBLISHER "Nokia Corporation and/or its subsidiary(-ies)"
+!define PRODUCT_WEB_SITE "http://qtsoftware.com"
+
+!define INSTALL_ICON "images\install.ico"
+!define WELCOME_PAGE_ICON "images\qt-wizard.bmp"
+!define PAGE_HEADER_ICON "images\qt-header.bmp"
+
+!include "MUI.nsh"
+
+; modules
+!include "modules\mingw.nsh"
+!include "modules\opensource.nsh"
+!include "includes\instdir.nsh"
+!include "modules\environment.nsh"
+!include "modules\registeruiext.nsh"
+!ifndef OPENSOURCE_BUILD
+!include "modules\msvc.nsh"
+!include "modules\addin7x.nsh"
+!include "modules\qsa.nsh"
+!include "modules\addin60.nsh"
+!include "modules\debugext.nsh"
+!include "modules\license.nsh"
+!include "modules\vsip.nsh"
+!include "modules\help.nsh"
+!include "modules\evaluation.nsh"
+!include "modules\eclipse.nsh"
+!include "modules\qtjambieclipse.nsh"
+!endif
+
+; MUI Settings
+!define MUI_ABORTWARNING
+!define MUI_ICON "${INSTALL_ICON}"
+!define MUI_UNICON "${INSTALL_ICON}"
+
+!define MUI_HEADERIMAGE
+!define MUI_HEADERIMAGE_BITMAP "${PAGE_HEADER_ICON}"
+!define MUI_HEADERIMAGE_UNBITMAP "${PAGE_HEADER_ICON}"
+
+!define MUI_WELCOMEFINISHPAGE_BITMAP "${WELCOME_PAGE_ICON}"
+!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${WELCOME_PAGE_ICON}"
+
+!ifdef WELCOME_NOTE
+ !define MUI_WELCOMEPAGE_TEXT "${WELCOME_NOTE}"
+!endif
+!insertmacro MUI_PAGE_WELCOME
+!insertmacro OPENSOURCE_INITIALIZE
+!ifndef OPENSOURCE_BUILD
+!insertmacro EVALUATION_INITIALIZE
+!insertmacro LICENSECHECK_INITIALIZE
+!insertmacro MSVC_INITIALIZE
+!insertmacro ADDIN7X_INITIALIZE
+!insertmacro ADDIN60_INITIALIZE
+!insertmacro DEBUGEXT_INITIALIZE
+!insertmacro HELP_INITIALIZE
+!insertmacro VSIP_INITIALIZE
+!endif
+
+!ifdef USE_COMPONENT_PAGE
+ !insertmacro MUI_PAGE_COMPONENTS
+!endif
+
+!ifdef USE_DIRECTORY_PAGE
+ !insertmacro INSTDIR_INITIALIZE
+!endif
+
+!ifdef USE_STARTMENU_PAGE
+ !define MUI_STARTMENUPAGE_NODISABLE
+ !define MUI_STARTMENUPAGE_DEFAULTFOLDER "${DEFAULT_STARTMENU_STRING}"
+ !insertmacro MUI_PAGE_STARTMENU 1 $STARTMENU_STRING
+!endif
+
+!insertmacro MINGW_INITIALIZE
+!insertmacro ENVIRONMENT_INITIALIZE
+!insertmacro REGISTERUIEXT_INITIALIZE
+!ifndef OPENSOURCE_BUILD
+!insertmacro QSA_INITIALIZE
+!insertmacro ECLIPSE_INITIALIZE
+!insertmacro QTJAMBIECLIPSE_INITIALIZE
+!endif
+
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+
+!insertmacro MUI_PAGE_INSTFILES
+!ifdef README_FILE
+ !define MUI_FINISHPAGE_SHOWREADME ${README_FILE}
+!else
+ !ifdef README_FUNCTION
+ !define MUI_FINISHPAGE_SHOWREADME
+ !define MUI_FINISHPAGE_SHOWREADME_TEXT "${README_FUNCTION}"
+ !define MUI_FINISHPAGE_SHOWREADME_FUNCTION "CommonReadmeFunction"
+ !endif
+!endif
+!ifdef RUN_FUNCTION
+ !define MUI_FINISHPAGE_RUN
+ !define MUI_FINISHPAGE_RUN_TEXT "${RUN_FUNCTION}"
+ !define MUI_FINISHPAGE_RUN_FUNCTION "CommonRunFunction"
+!endif
+!insertmacro MUI_PAGE_FINISH
+
+!insertmacro MUI_UNPAGE_WELCOME
+!define UNINSTALLER_CONFIRM_PAGE "confirmpage.ini"
+UninstPage custom un.UninstallerConfirmPage
+!insertmacro MUI_UNPAGE_INSTFILES
+
+!insertmacro MUI_UNPAGE_FINISH
+
+!insertmacro MUI_LANGUAGE "English"
+
+Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
+OutFile ${OUTPUT_FILE}
+
+Section -PreCommonSection
+!ifdef INSTDIR_0 ;the default one, must exist
+ strcpy $INSTDIR $${INSTDIR_0}_INSTDIR
+ ${StrRep} $PRODUCT_UNIQUE_KEY "${PRODUCT_NAME} ${PRODUCT_VERSION} - $INSTDIR" "\" "_"
+ strcpy $PRODUCT_UNIQUE_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$PRODUCT_UNIQUE_KEY"
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_0}_INSTDIR" "$${INSTDIR_0}_INSTDIR"
+!endif
+!ifdef INSTDIR_1
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_1}_INSTDIR" "$${INSTDIR_1}_INSTDIR"
+!endif
+!ifdef INSTDIR_2
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_2}_INSTDIR" "$${INSTDIR_2}_INSTDIR"
+!endif
+!ifdef INSTDIR_3
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_3}_INSTDIR" "$${INSTDIR_3}_INSTDIR"
+!endif
+!ifdef INSTDIR_4
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_4}_INSTDIR" "$${INSTDIR_4}_INSTDIR"
+!endif
+!ifdef INSTDIR_5
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_5}_INSTDIR" "$${INSTDIR_5}_INSTDIR"
+!endif
+
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "StartMenu" "$STARTMENU_STRING"
+ CreateDirectory "$SMPROGRAMS\$STARTMENU_STRING"
+SectionEnd
+
+!insertmacro OPENSOURCE_SECTIONS
+!insertmacro MINGW_SECTIONS
+!insertmacro ENVIRONMENT_SECTIONS
+!insertmacro REGISTERUIEXT_SECTIONS
+!ifndef OPENSOURCE_BUILD
+!insertmacro MSVC_SECTIONS
+!insertmacro ADDIN7X_SECTIONS
+!insertmacro ADDIN60_SECTIONS
+!insertmacro VSIP_SECTIONS
+!insertmacro HELP_SECTIONS
+!insertmacro DEBUGEXT_SECTIONS
+!insertmacro LICENSECHECK_SECTIONS
+!insertmacro QSA_SECTIONS
+!insertmacro EVALUATION_SECTIONS
+!insertmacro ECLIPSE_SECTIONS
+!insertmacro QTJAMBIECLIPSE_SECTIONS
+!endif
+
+!insertmacro INSTDIR_FUNCTIONS
+
+Section -CommonSection
+ WriteUninstaller "$INSTDIR\uninst.exe"
+
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "DisplayName" "$(^Name)"
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "UninstallString" "$INSTDIR\uninst.exe"
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "DisplayVersion" "${PRODUCT_VERSION}"
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "Publisher" "${PRODUCT_PUBLISHER}"
+
+ WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
+ CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\QtSoftware.com.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
+ CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Uninstall ${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" "$INSTDIR\uninst.exe"
+ SetOutPath "$INSTDIR"
+SectionEnd
+
+Function CheckLocalLicenseProduct
+!ifdef MODULE_LICENSECHECK
+ !insertmacro QSA_CHECKLICENSEPRODUCT
+!endif
+FunctionEnd
+
+Function .onInit
+ StrCpy $STARTMENU_STRING "${DEFAULT_STARTMENU_STRING}"
+
+!ifdef USE_UNINSTALL_PREVIOUS
+ push "${PRODUCT_NAME}"
+ call GetExistsPreviousInstallationOfProduct
+ exch $0
+ StrCmp $0 true 0 +3
+ MessageBox MB_OK|MB_ICONSTOP "A previous installation of ${PRODUCT_NAME} was detected.$\nPlease uninstall it before running this installer."
+ Abort
+ pop $0
+!endif
+
+ call SetAdminVar
+ StrCmp "$RUNNING_AS_ADMIN" "false" 0 common_running_as_admin
+!ifdef USE_ADMIN_CHECK
+ MessageBox MB_OK|MB_ICONSTOP "You need to have administrator rights to install this software!"
+ Abort
+!endif
+ SetShellVarContext current
+ goto common_admin_check_done
+ common_running_as_admin:
+ SetShellVarContext all
+ common_admin_check_done:
+
+ !insertmacro INSTDIR_STARTUP
+
+ !insertmacro OPENSOURCE_STARTUP
+ !insertmacro ENVIRONMENT_STARTUP
+ !insertmacro REGISTERUIEXT_STARTUP
+ !insertmacro MINGW_STARTUP
+!ifndef OPENSOURCE_BUILD
+ !insertmacro LICENSECHECK_STARTUP
+ !insertmacro MSVC_STARTUP
+ !insertmacro EVALUATION_STARTUP
+ !insertmacro ADDIN7X_STARTUP
+ !insertmacro ADDIN60_STARTUP
+ !insertmacro DEBUGEXT_STARTUP
+ !insertmacro VSIP_STARTUP
+ !insertmacro HELP_STARTUP
+ !insertmacro QSA_STARTUP
+ !insertmacro ECLIPSE_STARTUP
+ !insertmacro QTJAMBIECLIPSE_STARTUP
+!endif
+FunctionEnd
+
+Function .onInstSuccess
+ !insertmacro ENVIRONMENT_FINISH
+ !insertmacro REGISTERUIEXT_FINISH
+ !insertmacro OPENSOURCE_FINISH
+ !insertmacro MINGW_FINISH
+!ifndef OPENSOURCE_BUILD
+ !insertmacro LICENSECHECK_FINISH
+ !insertmacro MSVC_FINISH
+ !insertmacro EVALUATION_FINISH
+ !insertmacro ADDIN7X_FINISH
+ !insertmacro ADDIN60_FINISH
+ !insertmacro DEBUGEXT_FINISH
+ !insertmacro VSIP_FINISH
+ !insertmacro HELP_FINISH
+ !insertmacro QSA_FINISH
+ !insertmacro ECLIPSE_FINISH
+ !insertmacro QTJAMBIECLIPSE_FINISH
+!endif
+FunctionEnd
+
+Function un.onUninstSuccess
+ !insertmacro ENVIRONMENT_UNFINISH
+ !insertmacro REGISTERUIEXT_UNFINISH
+ !insertmacro OPENSOURCE_UNFINISH
+ !insertmacro MINGW_UNFINISH
+!ifndef OPENSOURCE_BUILD
+ !insertmacro LICENSECHECK_UNFINISH
+ !insertmacro MSVC_UNFINISH
+ !insertmacro EVALUATION_UNFINISH
+ !insertmacro ADDIN7X_UNFINISH
+ !insertmacro ADDIN60_UNFINISH
+ !insertmacro DEBUGEXT_UNFINISH
+ !insertmacro VSIP_UNFINISH
+ !insertmacro HELP_UNFINISH
+ !insertmacro QSA_UNFINISH
+ !insertmacro ECLIPSE_UNFINISH
+ !insertmacro QTJAMBIECLIPSE_UNFINISH
+!endif
+FunctionEnd
+
+Function un.onInit
+ call un.SetAdminVar
+ StrCmp "$RUNNING_AS_ADMIN" "false" 0 common_running_as_admin
+!ifdef USE_ADMIN_CHECK
+ MessageBox MB_OK|MB_ICONSTOP "You do not have the required access rights to uninstall this package."
+ Abort
+!endif
+ SetShellVarContext current
+ goto common_admin_check_done
+ common_running_as_admin:
+ SetShellVarContext all
+ common_admin_check_done:
+
+ ${UnStrRep} $PRODUCT_UNIQUE_KEY "${PRODUCT_NAME} ${PRODUCT_VERSION} - $INSTDIR" "\" "_"
+ strcpy $PRODUCT_UNIQUE_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$PRODUCT_UNIQUE_KEY"
+
+ push $0
+ ClearErrors
+ ReadRegStr $0 SHCTX "$PRODUCT_UNIQUE_KEY" "DisplayName"
+ IfErrors 0 +3
+ MessageBox MB_OK|MB_ICONSTOP "The uninstaller was unable to find the product to uninstall."
+ Abort
+ pop $0
+
+ ReadRegStr $STARTMENU_STRING SHCTX "$PRODUCT_UNIQUE_KEY" "StartMenu"
+ StrCmp "$STARTMENU_STRING" "" 0 +2
+ StrCpy $STARTMENU_STRING "${DEFAULT_STARTMENU_STRING}"
+
+!ifdef INSTDIR_0 ;the default one, must exist
+ ReadRegStr $${INSTDIR_0}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_0}_INSTDIR"
+!endif
+!ifdef INSTDIR_1
+ ReadRegStr $${INSTDIR_1}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_1}_INSTDIR"
+!endif
+!ifdef INSTDIR_2
+ ReadRegStr $${INSTDIR_2}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_2}_INSTDIR"
+!endif
+!ifdef INSTDIR_3
+ ReadRegStr $${INSTDIR_3}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_3}_INSTDIR"
+!endif
+!ifdef INSTDIR_4
+ ReadRegStr $${INSTDIR_4}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_4}_INSTDIR"
+!endif
+!ifdef INSTDIR_5
+ ReadRegStr $${INSTDIR_5}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_5}_INSTDIR"
+!endif
+
+ !insertmacro ENVIRONMENT_UNSTARTUP
+ !insertmacro REGISTERUIEXT_UNSTARTUP
+ !insertmacro OPENSOURCE_UNSTARTUP
+ !insertmacro MINGW_UNSTARTUP
+!ifndef OPENSOURCE_BUILD
+ !insertmacro LICENSECHECK_UNSTARTUP
+ !insertmacro MSVC_UNSTARTUP
+ !insertmacro EVALUATION_UNSTARTUP
+ !insertmacro ADDIN7X_UNSTARTUP
+ !insertmacro ADDIN60_UNSTARTUP
+ !insertmacro DEBUGEXT_UNSTARTUP
+ !insertmacro VSIP_UNSTARTUP
+ !insertmacro HELP_UNSTARTUP
+ !insertmacro QSA_UNSTARTUP
+ !insertmacro ECLIPSE_UNSTARTUP
+ !insertmacro QTJAMBIECLIPSE_UNSTARTUP
+!endif
+
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${UNINSTALLER_CONFIRM_PAGE}"
+FunctionEnd
+
+!insertmacro OPENSOURCE_UNINSTALL
+!insertmacro ENVIRONMENT_UNINSTALL
+!insertmacro REGISTERUIEXT_UNINSTALL
+!insertmacro MINGW_UNINSTALL
+!ifndef OPENSOURCE_BUILD
+!insertmacro HELP_UNINSTALL
+!insertmacro DEBUGEXT_UNINSTALL
+!insertmacro MSVC_UNINSTALL
+!insertmacro EVALUATION_UNINSTALL
+!insertmacro QSA_UNINSTALL
+!insertmacro ECLIPSE_UNINSTALL
+!insertmacro QTJAMBIECLIPSE_UNINSTALL
+!endif
+
+Section Uninstall
+ !ifndef OPENSOURCE_BUILD
+ !insertmacro LICENSECHECK_UNINSTALL
+ !insertmacro ADDIN7X_UNINSTALL
+ !insertmacro ADDIN60_UNINSTALL
+ !insertmacro VSIP_UNINSTALL
+ !endif
+
+ ; COMMON
+ Delete "$INSTDIR\${PRODUCT_NAME}.url"
+ Delete "$INSTDIR\uninst.exe"
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\Uninstall ${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk"
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\QtSoftware.com.lnk"
+
+ RMDir "$SMPROGRAMS\$STARTMENU_STRING"
+ RMDir "$INSTDIR"
+
+ DeleteRegKey SHCTX "$PRODUCT_UNIQUE_KEY"
+SectionEnd
+
+Function CommonRunFunction
+ !ifndef OPENSOURCE_BUILD
+ !insertmacro MSVC_RUN_FUNCTION
+ !insertmacro QSA_RUN_FUNCTION
+ !endif
+ !insertmacro MINGW_RUN_FUNCTION
+ DoneRunFunction:
+FunctionEnd
+
+Function CommonReadmeFunction
+ !ifndef OPENSOURCE_BUILD
+ !insertmacro MSVC_README_FUNCTION
+ !endif
+ !insertmacro MINGW_README_FUNCTION
+ DoneReadmeFunction:
+FunctionEnd
+
+Function un.UninstallerConfirmPage
+ !insertmacro MUI_HEADER_TEXT "Confirm" "Confirm Uninstallation Directories"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${UNINSTALLER_CONFIRM_PAGE}" "Field 2" "Text" "$UninstallerConfirmProduct"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${UNINSTALLER_CONFIRM_PAGE}"
+FunctionEnd
+
+;pops product name from stack and as result pushes TRUE or FALSE on stack
+Function GetExistsPreviousInstallationOfProduct
+ exch $0
+ push $1
+ push $2
+ push $3
+
+ StrCpy $1 0
+ loop:
+ EnumRegKey $2 HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall $1
+ StrCmp $2 "" no_reg_key_found
+ ${StrStr} $3 $2 $0
+ StrCmp $3 $2 reg_key_found
+ IntOp $1 $1 + 1
+ goto loop
+
+ reg_key_found:
+ push true
+ goto done
+
+ no_reg_key_found:
+ push false
+
+ done:
+ exch
+ pop $3
+ exch
+ pop $2
+ exch
+ pop $1
+ exch
+ pop $0
+FunctionEnd
+
+;pops product name from stack
+Function WarnIfInstalledProductDetected
+ exch $0
+ push $0
+ call GetExistsPreviousInstallationOfProduct
+ exch $1
+ StrCmp $1 true +1 +3
+ MessageBox MB_YESNO|MB_ICONQUESTION "An existing installation of $0 was detected.$\nIt is recommended to deinstall $0 before continuing.$\nDo you want to continue this installation nevertheless?" IDYES +2 IDNO +1
+ Abort
+ pop $1
+ pop $0
+FunctionEnd
+
+;sets $RUNNING_AS_ADMIN to "true" if Admin or Power user
+!macro SetAdminVar UN
+Function ${UN}SetAdminVar
+ push $0
+ ClearErrors
+ UserInfo::GetAccountType
+ IfErrors Admin ;It's probably Win95
+ pop $0
+ StrCmp $0 "Admin" Admin
+ StrCmp $0 "Power" Admin
+
+ StrCpy $RUNNING_AS_ADMIN "false"
+ goto Done
+
+ Admin:
+ StrCpy $RUNNING_AS_ADMIN "true"
+
+ Done:
+ pop $0
+FunctionEnd
+!macroend
+!insertmacro SetAdminVar ""
+!insertmacro SetAdminVar "un."
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro OPENSOURCE_DESCRIPTION
+ !insertmacro ENVIRONMENT_DESCRIPTION
+ !insertmacro REGISTERUIEXT_DESCRIPTION
+ !insertmacro MINGW_DESCRIPTION
+ !ifndef OPENSOURCE_BUILD
+ !insertmacro MSVC_DESCRIPTION
+ !insertmacro EVALUATION_DESCRIPTION
+ !insertmacro ADDIN7X_DESCRIPTION
+ !insertmacro ADDIN60_DESCRIPTION
+ !insertmacro DEBUGEXT_DESCRIPTION
+ !insertmacro HELP_DESCRIPTION
+ !insertmacro VSIP_DESCRIPTION
+ !insertmacro QSA_DESCRIPTION
+ !insertmacro ECLIPSE_DESCRIPTION
+ !insertmacro QTJAMBIECLIPSE_DESCRIPTION
+ !endif
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/tools/installer/nsis/modules/environment.nsh b/tools/installer/nsis/modules/environment.nsh
new file mode 100644
index 0000000..0f6013b
--- /dev/null
+++ b/tools/installer/nsis/modules/environment.nsh
@@ -0,0 +1,219 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!ifdef MODULE_ENVIRONMENT
+!macro ENVIRONMENT_INITIALIZE
+ !include "includes\writeEnvStr.nsh"
+ !include "includes\writePathStr.nsh"
+
+ !ifndef MODULE_ENVIRONMENT_QTDIR
+ !ifdef MODULE_MINGW
+ !define MODULE_ENVIRONMENT_QTDIR $MINGW_INSTDIR
+ !endif
+
+ !ifdef MODULE_MSVC
+ !define MODULE_ENVIRONMENT_QTDIR $MSVC_INSTDIR
+ !endif
+ !endif
+
+ !define MODULE_ENVIRONMENT_PAGE "envpage.ini"
+ var MODULE_ENVIRONMENT_SET
+ var MODULE_ENVIRONMENT_OLD
+ LangString ModuleEnvironmentTitle ${LANG_ENGLISH} "Configure Environment"
+ LangString ModuleEnvironmentDescription ${LANG_ENGLISH} "Configure Qt environment variables"
+
+ Page custom ModuleEnvironmentPageEnter ModuleEnvironmentPageExit
+!macroend
+!macro ENVIRONMENT_SECTIONS
+ Section -ModuleEnvironmentRegister
+ push "${MODULE_ENVIRONMENT_QTDIR}"
+ call RegisterQtEnvVariables
+ SectionEnd
+
+ Function ModuleEnvironmentPageEnter
+ push $0
+ Call IsNT
+ pop $0
+ strcmp "$0" "1" +2
+ abort
+ pop $0
+
+ !insertmacro MUI_HEADER_TEXT "$(ModuleEnvironmentTitle)" "$(ModuleEnvironmentDescription)"
+
+ strcmp $MODULE_ENVIRONMENT_SET "1" 0 envCheckNo
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_ENVIRONMENT_PAGE}" "Field 2" "State" "1"
+ goto showEnvPage
+ envCheckNo:
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_ENVIRONMENT_PAGE}" "Field 2" "State" "0"
+
+ showEnvPage:
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_ENVIRONMENT_PAGE}"
+ FunctionEnd
+
+ Function ModuleEnvironmentPageExit
+ !insertmacro MUI_INSTALLOPTIONS_READ $MODULE_ENVIRONMENT_SET "${MODULE_ENVIRONMENT_PAGE}" "Field 2" "State"
+ FunctionEnd
+
+ Function RegisterQtEnvVariables
+ exch $2 ; the installation path = QTDIR
+ push $0 ; I think WriteEnvStr mixes up $0 and $1
+ push $1
+
+ WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "QtEnvSet" $MODULE_ENVIRONMENT_SET
+
+ strcmp $MODULE_ENVIRONMENT_SET "1" 0 noenv
+
+ StrCmp $MODULE_ENVIRONMENT_OLD "0" +4
+ DetailPrint "Removing $MODULE_ENVIRONMENT_OLD\bin from PATH"
+ push "$MODULE_ENVIRONMENT_OLD\bin"
+ Call RemoveFromPath ; remove old qtdir
+
+ DetailPrint "Setting QTDIR to $2"
+ push "QTDIR"
+ push $2
+ Call WriteEnvStr ; set the QTDIR
+
+ DetailPrint "Adding $2\bin to PATH"
+ push "$2\bin"
+ Call AddToPath ; set the PATH
+
+
+ push "QMAKESPEC"
+ push ${INSTALL_COMPILER}
+ Call GetMkSpec
+ pop $0
+ DetailPrint "Setting QMAKESPEC to $0"
+ push $0
+ Call WriteEnvStr ; set the QMAKESPEC
+
+ noenv:
+ pop $1
+ pop $0
+ pop $2
+ FunctionEnd
+
+ Function un.RegisterQtEnvVariables
+ exch $0 ; QTDIR
+ push $1
+
+ ClearErrors
+ ReadRegDWORD $MODULE_ENVIRONMENT_SET SHCTX "$PRODUCT_UNIQUE_KEY" "QtEnvSet"
+ intcmp $MODULE_ENVIRONMENT_SET 0 noenv
+
+ DetailPrint "Removing $0\bin from the PATH"
+ push "$0\bin"
+ Call un.RemoveFromPath ; removes qt from the path
+
+ ;Check if QTDIR is equal to installdir
+ ExpandEnvStrings $1 "%QTDIR%"
+
+ StrCmp "$0" "$1" removeenv
+ StrCmp "$0\" "$1" removeenv
+ StrCmp "$0" "$1\" removeenv
+ Goto noenv
+
+ removeenv:
+ DetailPrint "Removing QTDIR"
+ push "QTDIR"
+ Call un.DeleteEnvStr ; removes QTDIR
+
+ DetailPrint "Removing QMAKESPEC"
+ push "QMAKESPEC"
+ Call un.DeleteEnvStr ; removes QMAKESPEC
+
+ noenv:
+ pop $1
+ pop $0
+ FunctionEnd
+!macroend
+!macro ENVIRONMENT_DESCRIPTION
+!macroend
+!macro ENVIRONMENT_STARTUP
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_ENVIRONMENT_PAGE}"
+ push $0
+ ExpandEnvStrings $0 "%QTDIR%"
+
+ StrCmp $0 "%QTDIR%" +4
+ strcpy $MODULE_ENVIRONMENT_SET "0" ;QTDIR exists
+ strcpy $MODULE_ENVIRONMENT_OLD $0
+ Goto +3
+ strcpy $MODULE_ENVIRONMENT_SET "1" ;no QTDIR
+ strcpy $MODULE_ENVIRONMENT_OLD "0"
+
+ Call IsNT
+ pop $0
+ strcmp "$0" "1" +2
+ strcpy $MODULE_ENVIRONMENT_SET "0"
+ pop $0
+!macroend
+!macro ENVIRONMENT_FINISH
+!macroend
+!macro ENVIRONMENT_UNSTARTUP
+!macroend
+!macro ENVIRONMENT_UNINSTALL
+ Section -un.ModuleEnvironmentRegister
+ push "${MODULE_ENVIRONMENT_QTDIR}"
+ call un.RegisterQtEnvVariables
+ SectionEnd
+!macroend
+!macro ENVIRONMENT_UNFINISH
+!macroend
+!else ;MODULE_ENVIRONMENT
+!macro ENVIRONMENT_INITIALIZE
+!macroend
+!macro ENVIRONMENT_SECTIONS
+!macroend
+!macro ENVIRONMENT_DESCRIPTION
+!macroend
+!macro ENVIRONMENT_STARTUP
+!macroend
+!macro ENVIRONMENT_FINISH
+!macroend
+!macro ENVIRONMENT_UNSTARTUP
+!macroend
+!macro ENVIRONMENT_UNINSTALL
+!macroend
+!macro ENVIRONMENT_UNFINISH
+!macroend
+!endif ;MODULE_ENVIRONMENT
+
diff --git a/tools/installer/nsis/modules/mingw.nsh b/tools/installer/nsis/modules/mingw.nsh
new file mode 100644
index 0000000..8485178
--- /dev/null
+++ b/tools/installer/nsis/modules/mingw.nsh
@@ -0,0 +1,676 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!ifdef MODULE_MINGW
+!macro MINGW_INITIALIZE
+!include "includes\qtcommon.nsh"
+!ifndef MODULE_MINGW_NAME
+ !define MODULE_MINGW_NAME "Qt"
+!endif
+!ifndef MODULE_MINGW_VERSION
+ !define MODULE_MINGW_VERSION "${PRODUCT_VERSION}"
+!endif
+!ifndef MODULE_MINGW_BUILDDIR
+ !error "MODULE_MINGW_BUILDDIR not defined!"
+!endif
+!ifndef MODULE_MINGW_ROOT
+ !error "MODULE_MINGW_ROOT not defined!"
+!endif
+!ifndef MODULE_MINGW_URL
+ !define MODULE_MINGW_URL "ftp://ftp.trolltech.com/misc"
+!endif
+!ifndef MODULE_MINGW_COMPILERVERSION
+ !define MODULE_MINGW_COMPILERVERSION "3.4.2"
+!endif
+!ifndef MODULE_MINGW_LICENSE
+ !define MODULE_MINGW_LICENSE "C:\MinGW\COPYING"
+!endif
+
+!define MODULE_MINGW_DOWNLOADPAGE "gwdownload.ini"
+!define MODULE_MINGW_MIRRORPAGE "gwmirror.ini"
+!define MODULE_MINGW_RUNTIME_LIB "mingw*.dll"
+!define MODULE_MINGW_DOWNLOADFILE "MinGW-${MODULE_MINGW_COMPILERVERSION}"
+
+var MODULE_MINGW_DOWNLOAD
+var MODULE_MINGW_SOURCEDOWNLOAD
+var MODULE_MINGW_MIRRORS
+var MODULE_MINGW_INSTOK
+var MODULE_MINGW_COMPILERINSTDIR
+
+LangString ModuleMinGWTitle ${LANG_ENGLISH} "MinGW Installation"
+LangString ModuleMinGWDescription ${LANG_ENGLISH} "You need MinGW to be able to compile Qt applications."
+LangString ModuleMinGWMirrorTitle ${LANG_ENGLISH} "MinGW Download Mirror"
+LangString ModuleMinGWMirrorDescription ${LANG_ENGLISH} "Select a download mirror."
+
+Page custom ModuleMinGWDownloadPageEnter ModuleMinGWDownloadPageExit
+!define MUI_PAGE_CUSTOMFUNCTION_PRE ModuleMinGWLicensePageEnter
+!define MUI_PAGE_HEADER_TEXT "MinGW License Agreement"
+!define MUI_PAGE_HEADER_SUBTEXT "Please review the license terms before installing MinGW."
+!define MUI_LICENSEPAGE_TEXT_TOP "MinGW License Information"
+!insertmacro MUI_PAGE_LICENSE "${MODULE_MINGW_LICENSE}"
+Page custom ModuleMinGWMirrorPageEnter ModuleMinGWMirrorPageExit
+
+!include "includes\qtenv.nsh"
+!macroend
+
+!macro MINGW_SECTIONS
+Section "${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}" MINGW_SEC01
+ strcmp "$MINGW_INSTDIR" "" 0 +5
+ StrCpy $MINGW_INSTDIR "$INSTDIR\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}"
+ push $MINGW_INSTDIR
+ call MakeQtDirectory
+ pop $MINGW_INSTDIR
+
+ WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled" 1
+
+ SetOutPath "$MINGW_INSTDIR"
+ SetOverwrite ifnewer
+ !insertmacro MODULE_MINGW_INSTALLFILES
+
+ push "$MINGW_INSTDIR"
+ call DeleteFloatingLicenseProgram
+
+ push "$MINGW_INSTDIR\bin"
+ call AddStartmenuApplication
+
+ push ${MODULE_MINGW_BUILDDIR}
+ push "$MINGW_INSTDIR"
+ call PatchPrlFiles
+
+ IfFileExists "$MINGW_INSTDIR\.qmake.cache" 0 +5
+ push "$MINGW_INSTDIR\.qmake.cache"
+ push ${MODULE_MINGW_BUILDDIR}
+ push $MINGW_INSTDIR
+ call PatchPath
+
+ IfFileExists "$MINGW_INSTDIR\mkspecs\default\qmake.conf" 0 +5
+ push "$MINGW_INSTDIR\mkspecs\default\qmake.conf"
+ push ${MODULE_MINGW_BUILDDIR}
+ push $MINGW_INSTDIR
+ call PatchPath
+
+ push $MINGW_INSTDIR
+ call PatchCommonBinaryFiles
+
+ push $MINGW_INSTDIR
+ call PatchLicenseInformation
+
+ WriteRegStr SHCTX "SOFTWARE\Trolltech\Common\${MODULE_MINGW_VERSION}\$LICENSE_PRODUCT" "Key" "$LICENSE_KEY"
+
+ push $MINGW_INSTDIR
+ call ModuleMinGWMakeEnvFile
+ CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} Command Prompt.lnk" "%COMSPEC%" '/k "$MINGW_INSTDIR\bin\qtvars.bat"'
+ CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} (Build Debug Libraries).lnk" "%COMSPEC%" '/k "$MINGW_INSTDIR\bin\qtvars.bat compile_debug"'
+
+ push $0
+ strcmp $MODULE_MINGW_DOWNLOAD "no" DoneMinGWInstall
+ DetailPrint "Installing MinGW into $MODULE_MINGW_COMPILERINSTDIR"
+ WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWInstDir" "$MODULE_MINGW_COMPILERINSTDIR"
+ nsExec::ExecToLog '"$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" /S /D=$MODULE_MINGW_COMPILERINSTDIR'
+ pop $0
+ strcmp $MODULE_MINGW_SOURCEDOWNLOAD "no" DoneMinGWInstall
+ DetailPrint "Installing MinGW sources into $MODULE_MINGW_COMPILERINSTDIR\src"
+ WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWSources" 1
+ nsExec::ExecToLog '"$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe" /S /D=$MODULE_MINGW_COMPILERINSTDIR\src'
+ pop $0
+ DoneMinGWInstall:
+ pop $0
+
+ DetailPrint "Copying MinGW runtime..."
+ SetDetailsPrint none
+ CopyFiles /SILENT "$MODULE_MINGW_COMPILERINSTDIR\bin\${MODULE_MINGW_RUNTIME_LIB}" "$MINGW_INSTDIR\bin"
+ SetDetailsPrint both
+SectionEnd
+
+Function EnableButtons
+ Push $0
+ GetDlgItem $0 $HWNDPARENT 3
+ EnableWindow $0 1
+ GetDlgItem $0 $HWNDPARENT 1
+ EnableWindow $0 1
+ GetDlgItem $0 $HWNDPARENT 2
+ EnableWindow $0 1
+ Pop $0
+FunctionEnd
+
+Function DisableButtons
+ Push $0
+ GetDlgItem $0 $HWNDPARENT 3
+ EnableWindow $0 0
+ GetDlgItem $0 $HWNDPARENT 1
+ EnableWindow $0 0
+ GetDlgItem $0 $HWNDPARENT 2
+ EnableWindow $0 0
+ Pop $0
+FunctionEnd
+
+Function ModuleMinGWDownloadPageEnter
+ strcmp $MODULE_MINGW_INSTOK "yes" 0 +2
+ Abort
+
+ !insertmacro MUI_HEADER_TEXT "$(ModuleMinGWTitle)" "$(ModuleMinGWTitleDescription)"
+ Call UpdateCtrlStates
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_MINGW_DOWNLOADPAGE}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State" "0"
+FunctionEnd
+
+Function ModuleMinGWMirrorPageEnter
+ strcmp $MODULE_MINGW_DOWNLOAD "yes" +2
+ Abort
+
+ !insertmacro MUI_HEADER_TEXT "$(ModuleMinGWMirrorTitle)" "$(ModuleMinGWMirrorDescription)"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_MINGW_MIRRORPAGE}"
+FunctionEnd
+
+Function ModuleMinGWLicensePageEnter
+ strcmp $MODULE_MINGW_DOWNLOAD "yes" +2
+ Abort
+FunctionEnd
+
+Function UpdateCtrlStates
+ push $0
+ push $1
+ push $2
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State"
+ intop $0 $0 !
+ FindWindow $2 "#32770" "" $HWNDPARENT
+ GetDlgItem $1 $2 1205
+ EnableWindow $1 $0
+ GetDlgItem $1 $2 1202
+ EnableWindow $1 $0
+ GetDlgItem $1 $2 1203
+ EnableWindow $1 $0
+
+ intop $0 $0 !
+ GetDlgItem $1 $2 1206
+ EnableWindow $1 $0
+ GetDlgItem $1 $2 1207
+ EnableWindow $1 $0
+ GetDlgItem $1 $2 1208
+ EnableWindow $1 $0
+
+ GetDlgItem $1 $HWNDPARENT 1
+ IntCmp $0 0 +3
+ SendMessage $1 ${WM_SETTEXT} 0 "STR:Next >"
+ Goto +2
+ SendMessage $1 ${WM_SETTEXT} 0 "STR:Install"
+
+ pop $2
+ pop $1
+ pop $0
+FunctionEnd
+
+Function ModuleMinGWDownloadPageExit
+ push $0
+ push $1
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Settings" "State"
+ strcmp "$0" "8" 0 NoNotify
+ Call UpdateCtrlStates
+ abort
+ NoNotify:
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State"
+ strcmp "$0" "0" noDownload doDownload
+
+doDownload:
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 6" "State"
+ strcmp $0 "" 0 +3
+ MessageBox MB_ICONEXCLAMATION|MB_OK "You need to specify an installation directory!"
+ goto tryAgain
+
+ strcpy $MODULE_MINGW_COMPILERINSTDIR $0
+ strcpy $MODULE_MINGW_DOWNLOAD "yes"
+ CreateDirectory "$MINGW_INSTDIR\downloads"
+
+ Call DisableButtons
+ InetLoad::load /BANNER "Mirror Download" "Downloading mirrors from server..." "${MODULE_MINGW_URL}/${MODULE_MINGW_DOWNLOADFILE}.mirrors" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" /END
+ Pop $1 ;Get the return value
+ Call EnableButtons
+
+ StrCmp $1 "OK" +3
+ MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "Was not able to download mirror list ($1)." IDRETRY tryAgain 0
+ Quit
+
+ call ModuleMinGWReadMirrors
+ !insertmacro MUI_INSTALLOPTIONS_WRITE ${MODULE_MINGW_MIRRORPAGE} "Field 3" "ListItems" "$MODULE_MINGW_MIRRORS"
+ goto done
+
+noDownload:
+ strcpy $MODULE_MINGW_DOWNLOAD "no"
+ strcpy $MODULE_MINGW_SOURCEDOWNLOAD "no"
+ call ModuleMinGWChecking
+ strcmp $MODULE_MINGW_INSTOK "yes" done
+ MessageBox MB_ICONEXCLAMATION|MB_YESNO "There is a problem with your MinGW installation:$\r$\n$MODULE_MINGW_INSTOK$\r$\nDo you still want to continue? (Your installation may not work)" IDNO tryAgain
+ goto done
+
+tryAgain:
+ pop $1
+ pop $0
+ Abort
+
+done:
+ pop $1
+ pop $0
+FunctionEnd
+
+Function ModuleMinGWMirrorPageExit
+ push $0
+ push $2
+ push $1
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_MIRRORPAGE}" "Field 3" "State"
+ strcmp "$0" "" 0 +3
+ MessageBox MB_ICONEXCLAMATION|MB_OK "You must select a mirror to download from!"
+ goto tryAgain
+
+ push $0
+ call ModuleMinGWGetMirror
+ pop $0
+
+ Call DisableButtons
+ InetLoad::load /BANNER "MinGW Download" "Downloading MinGW from server..." "$0/${MODULE_MINGW_DOWNLOADFILE}.exe" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" /END
+ Pop $2 ;get the return value
+ Call EnableButtons
+
+ StrCmp $2 "OK" +3
+ MessageBox MB_ICONEXCLAMATION|MB_OK "Was not able to download MinGW ($2). Please try another mirror."
+ Goto tryAgain
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $1 "${MODULE_MINGW_MIRRORPAGE}" "Field 2" "State"
+ strcmp "$1" "0" done
+
+ Call DisableButtons
+ InetLoad::load /BANNER "MinGW Sources Download" "Downloading MinGW Sources from server..." "$0/${MODULE_MINGW_DOWNLOADFILE}-src.exe" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe" /END
+ Pop $2
+ Call EnableButtons
+
+ strcpy $MODULE_MINGW_SOURCEDOWNLOAD "yes"
+
+ StrCmp $2 "OK" +3
+ MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "Was not able to download MinGW sources ($2). Please try another mirror?" IDRETRY tryAgain 0
+ Quit
+
+ goto done
+
+tryAgain:
+ pop $1
+ pop $2
+ pop $0
+ Abort
+
+done:
+ pop $1
+ pop $2
+ pop $0
+FunctionEnd
+
+Function ModuleMinGWReadMirrors
+ push $0 ;file handle
+ push $1 ;line
+
+ ClearErrors
+ FileOpen $0 "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" r
+ IfErrors done
+
+ strcpy $MODULE_MINGW_MIRRORS ""
+
+nextline:
+ FileRead $0 $1
+ IfErrors done
+ push $1
+ call ModuleMinGWRemoveNewLine
+ pop $1
+ strcpy $MODULE_MINGW_MIRRORS "$MODULE_MINGW_MIRRORS|$1"
+ FileRead $0 $1 ;Jump over next line
+ IfErrors done
+ goto nextline
+
+done:
+ FileClose $0
+ strlen $1 $MODULE_MINGW_MIRRORS
+ intcmp $1 0 failed failed cleanup
+
+failed:
+ MessageBox MB_ICONSTOP|MB_OK "Unable to parse mirror list, exiting!"
+ Quit
+
+cleanup:
+ pop $1
+ pop $0
+FunctionEnd
+
+#this just removes the last two chars
+Function ModuleMinGWRemoveNewLine
+exch $0
+push $1
+push $2
+
+strlen $1 $0
+intop $1 $1 - 1
+strcpy $2 $0 1 $1 ;get last char
+
+strcmp "$2" "$\n" 0 +2
+intop $1 $1 - 1
+
+strcpy $2 $0 1 $1 ;get last char
+strcmp "$2" "$\r" 0 +2
+intop $1 $1 - 1
+
+intop $1 $1 + 1
+strcpy $0 $0 $1
+
+pop $2
+pop $1
+exch $0
+FunctionEnd
+
+#push serverid
+#call GetMirror
+#pop server
+Function ModuleMinGWGetMirror
+ exch $1 ;id
+ push $0 ;file handle
+ push $2 ;line
+ push $3 ;tmp
+
+ strcpy $3 ""
+
+ ClearErrors
+ FileOpen $0 "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" r
+ IfErrors done
+
+nextline:
+ FileRead $0 $2
+ IfErrors done
+ push $2
+ call ModuleMinGWRemoveNewLine
+ pop $2
+ strcmp $1 $2 0 nextline
+ FileRead $0 $3
+ IfErrors done
+ push $3
+ call ModuleMinGWRemoveNewLine
+ pop $3
+
+done:
+ strcpy $1 $3
+ FileClose $0
+ strlen $2 $1
+ intcmp $2 0 failed failed cleanup
+
+failed:
+ MessageBox MB_ICONSTOP|MB_OK "Unable to parse mirror list, exiting!"
+ Quit
+
+cleanup:
+ pop $3
+ pop $2
+ pop $0
+ exch $1
+FunctionEnd
+
+Function ModuleMinGWChecking
+ push $0
+
+ ### update with plugin
+ strcpy $MODULE_MINGW_INSTOK "yes"
+ strcpy $MODULE_MINGW_COMPILERINSTDIR "C:\MinGW" ;fallback dir
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 3" "State"
+ strcmp "$0" "" +2
+ strcpy $MODULE_MINGW_COMPILERINSTDIR $0
+
+ IfFileExists "$MODULE_MINGW_COMPILERINSTDIR\bin\g++.exe" +3 0
+ strcpy $MODULE_MINGW_INSTOK "g++ not found in $MODULE_MINGW_COMPILERINSTDIR\bin\"
+ goto DoneChecking
+
+!ifndef OPENSOURCE_BUILD
+ ; check w32api.h
+ push $MODULE_MINGW_COMPILERINSTDIR
+ qtnsisext::HasValidWin32Library
+ pop $0
+ strcmp "$0" "1" +3 0
+ strcpy $MODULE_MINGW_INSTOK "The installer could not find a valid $MODULE_MINGW_COMPILERINSTDIR\include\w32api.h$\r$\n(The supported version is 3.2)"
+ goto DoneChecking
+
+ ; check version
+ push $MODULE_MINGW_COMPILERINSTDIR
+ qtnsisext::GetMinGWVersion
+ pop $0
+ strcmp "$0" "${MODULE_MINGW_COMPILERVERSION}" +3 0
+ strcpy $MODULE_MINGW_INSTOK "g++ version found does not match ${MODULE_MINGW_COMPILERVERSION} (Found version $0)."
+ goto DoneChecking
+!endif
+
+DoneChecking:
+ pop $0
+FunctionEnd
+
+#
+# creates a qtvars.bat file in $QTDIR\bin
+# push "c:\qt" #QTDIR
+# call MakeQtVarsFile
+#
+Function ModuleMinGWMakeEnvFile
+ push $0 ; file handle
+
+ ClearErrors
+ FileOpen $0 "$MINGW_INSTDIR\bin\qtvars.bat" w
+ IfErrors WriteMakeFile
+ FileWrite $0 "@echo off$\r$\n"
+ FileWrite $0 "rem$\r$\n"
+ FileWrite $0 "rem This file is generated$\r$\n"
+ FileWrite $0 "rem$\r$\n"
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 "echo Setting up a MinGW/Qt only environment...$\r$\n"
+ FileWrite $0 "echo -- QTDIR set to $MINGW_INSTDIR$\r$\n"
+ FileWrite $0 "echo -- PATH set to $MINGW_INSTDIR\bin$\r$\n"
+ FileWrite $0 "echo -- Adding $MODULE_MINGW_COMPILERINSTDIR\bin to PATH$\r$\n"
+ FileWrite $0 "echo -- Adding %SystemRoot%\System32 to PATH$\r$\n"
+ FileWrite $0 "echo -- QMAKESPEC set to win32-g++$\r$\n"
+ FileWrite $0 "$\r$\n"
+ FileWrite $0 "set QTDIR=$MINGW_INSTDIR$\r$\n"
+ FileWrite $0 "set PATH=$MINGW_INSTDIR\bin$\r$\n"
+ FileWrite $0 "set PATH=%PATH%;$MODULE_MINGW_COMPILERINSTDIR\bin$\r$\n"
+ FileWrite $0 "set PATH=%PATH%;%SystemRoot%\System32$\r$\n"
+ FileWrite $0 "set QMAKESPEC=win32-g++$\r$\n"
+ FileWrite $0 "$\r$\n"
+
+ FileWrite $0 'if not "%1"=="compile_debug" goto END$\r$\n'
+ FileWrite $0 "cd %QTDIR%$\r$\n"
+ FileWrite $0 "echo This will configure and compile qt in debug.$\r$\n"
+ FileWrite $0 "echo The release libraries will not be recompiled.$\r$\n"
+ FileWrite $0 "pause$\r$\n"
+ FileWrite $0 "configure -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg$\r$\n"
+ FileWrite $0 "cd %QTDIR%\src$\r$\n"
+ FileWrite $0 "qmake$\r$\n"
+ FileWrite $0 "mingw32-make debug$\r$\n"
+ FileWrite $0 ":END$\r$\n"
+ FileClose $0
+
+WriteMakeFile:
+ ClearErrors
+ FileOpen $0 "$MINGW_INSTDIR\bin\make.bat" w
+ IfErrors done
+ FileWrite $0 "@echo off$\r$\n"
+ FileWrite $0 "mingw32-make %*$\r$\n"
+ FileClose $0
+
+done:
+; pop $1
+ pop $0
+FunctionEnd
+
+Function MINGW_ValidateDirectoryFunc
+ push "${MODULE_MINGW_BUILDDIR}"
+ push $MINGW_INSTDIR
+ call CommonCheckDirectory
+FunctionEnd
+!macroend
+
+!macro MINGW_DESCRIPTION
+ !insertmacro MUI_DESCRIPTION_TEXT ${MINGW_SEC01} "This installs ${MODULE_MINGW_NAME} version ${MODULE_MINGW_VERSION} on your system."
+!macroend
+
+!macro MINGW_STARTUP
+ !ifndef MODULE_MINGW_NODEFAULT
+ SectionSetFlags ${MINGW_SEC01} 17
+ !endif
+ strcpy $MINGW_INSTDIR "C:\Qt\${MODULE_MINGW_VERSION}"
+ push $MINGW_INSTDIR
+ call MakeQtDirectory
+ pop $MINGW_INSTDIR
+
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_MINGW_DOWNLOADPAGE}"
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_MINGW_MIRRORPAGE}"
+
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 3" "State" "C:\MinGW"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 6" "State" "C:\MinGW"
+
+ strcpy $MODULE_MINGW_DOWNLOAD "no"
+ strcpy $MODULE_MINGW_SOURCEDOWNLOAD "no"
+!macroend
+
+!macro MINGW_FINISH
+!macroend
+
+!macro MINGW_RUN_FUNCTION
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled"
+ intcmp $0 1 0 DoneRunFunctionMINGW
+
+ IfFileExists "$MINGW_INSTDIR\bin\qtdemo.exe" 0 +2
+ Exec '$MINGW_INSTDIR\bin\qtdemo.exe'
+ goto DoneRunFunction ;don't run more applications
+
+ DoneRunFunctionMINGW:
+!macroend
+
+!macro MINGW_README_FUNCTION
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled"
+ intcmp $0 1 0 DoneReadmeFunctionMINGW
+
+ IfFileExists "$MINGW_INSTDIR\bin\assistant.exe" 0 +2
+ Exec '$MINGW_INSTDIR\bin\assistant.exe'
+ goto DoneReadmeFunction ;don't run more applications
+
+ DoneReadmeFunctionMINGW:
+!macroend
+
+!macro MINGW_UNSTARTUP
+ strcmp "$MINGW_INSTDIR" "" 0 +5
+ StrCpy $MINGW_INSTDIR "$INSTDIR\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}"
+ push $MINGW_INSTDIR
+ call un.MakeQtDirectory
+ pop $MINGW_INSTDIR
+
+ !insertmacro ConfirmOnRemove "MINGWInstalled" "- ${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} in $MINGW_INSTDIR"
+!macroend
+
+!macro MINGW_UNINSTALL
+Section un.ModuleMinGW
+ push $0
+ push $1
+
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled"
+ intcmp $0 1 0 DoneUnInstallMINGW
+
+ Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors"
+
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWSources"
+ strcmp $0 "" MinGWSourcesUninstallDone ;not installed
+ Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe"
+ nsExec::ExecToLog '"$0\src\uninst.exe"'
+ pop $1
+ MinGWSourcesUninstallDone:
+
+ ReadRegStr $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWInstDir"
+ strcmp $0 "" MinGWUninstallDone ;not installed
+ Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe"
+ nsExec::ExecToLog '"$0\uninst.exe"'
+ pop $1
+ MinGWUninstallDone:
+
+ DetailPrint "Removing start menu shortcuts"
+ call un.RemoveStartmenuApplication
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} Command Prompt.lnk"
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} (Build Debug Libraries).lnk"
+
+ Delete "$MINGW_INSTDIR\bin\${MODULE_MINGW_RUNTIME_LIB}"
+ Delete "$MINGW_INSTDIR\bin\make.bat"
+ Delete "$MINGW_INSTDIR\bin\qtvars.bat"
+
+ !insertmacro MODULE_MINGW_REMOVE "$MINGW_INSTDIR"
+ RMDir $MINGW_INSTDIR ;removes it if empty
+
+ DoneUnInstallMINGW:
+ pop $1
+ pop $0
+SectionEnd
+!macroend
+!macro MINGW_UNFINISH
+!macroend
+!else ;MODULE_MINGW
+!macro MINGW_INITIALIZE
+!macroend
+!macro MINGW_SECTIONS
+!macroend
+!macro MINGW_DESCRIPTION
+!macroend
+!macro MINGW_STARTUP
+!macroend
+!macro MINGW_FINISH
+!macroend
+!macro MINGW_RUN_FUNCTION
+!macroend
+!macro MINGW_README_FUNCTION
+!macroend
+!macro MINGW_UNSTARTUP
+!macroend
+!macro MINGW_UNINSTALL
+!macroend
+!macro MINGW_UNFINISH
+!macroend
+!endif ;MODULE_MINGW
+
diff --git a/tools/installer/nsis/modules/opensource.nsh b/tools/installer/nsis/modules/opensource.nsh
new file mode 100644
index 0000000..3657ba8
--- /dev/null
+++ b/tools/installer/nsis/modules/opensource.nsh
@@ -0,0 +1,98 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!ifdef MODULE_OPENSOURCE
+!macro OPENSOURCE_INITIALIZE
+ !define MODULE_OPENSOURCE_PAGE "opensource.ini"
+ page custom ModuleOpenSourceShowPage
+!macroend
+!macro OPENSOURCE_SECTIONS
+ Section -ModuleOpenSourceSection
+ !ifdef MODULE_OPENSOURCE_ROOT
+ SetOutPath "$INSTDIR"
+ File "${MODULE_OPENSOURCE_ROOT}\OPENSOURCE-NOTICE.TXT"
+ !endif
+ SectionEnd
+
+ Function ModuleOpenSourceShowPage
+ !insertmacro MUI_HEADER_TEXT "Open Source Edition" " "
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_OPENSOURCE_PAGE}"
+ strcpy "$LICENSEE" "Open Source"
+ strcpy "$LICENSE_PRODUCT" "OpenSource"
+ FunctionEnd
+!macroend
+!macro OPENSOURCE_DESCRIPTION
+!macroend
+!macro OPENSOURCE_STARTUP
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_OPENSOURCE_PAGE}"
+!macroend
+!macro OPENSOURCE_FINISH
+!macroend
+!macro OPENSOURCE_UNSTARTUP
+!macroend
+!macro OPENSOURCE_UNINSTALL
+ Section -un.ModuleOpenSourceSection
+ Delete "$SMPROGRAMS\$STARTMENU_STRING\OpenSource Notice.lnk"
+ SectionEnd
+!macroend
+!macro OPENSOURCE_UNFINISH
+!macroend
+!else ;MODULE_OPENSOURCE
+!macro OPENSOURCE_INITIALIZE
+!macroend
+!macro OPENSOURCE_SECTIONS
+!macroend
+!macro OPENSOURCE_DESCRIPTION
+!macroend
+!macro OPENSOURCE_STARTUP
+!macroend
+!macro OPENSOURCE_FINISH
+!macroend
+!macro OPENSOURCE_UNSTARTUP
+!macroend
+!macro OPENSOURCE_UNINSTALL
+!macroend
+!macro OPENSOURCE_UNFINISH
+!macroend
+!endif ;MODULE_OPENSOURCE
+
diff --git a/tools/installer/nsis/modules/registeruiext.nsh b/tools/installer/nsis/modules/registeruiext.nsh
new file mode 100644
index 0000000..a335097
--- /dev/null
+++ b/tools/installer/nsis/modules/registeruiext.nsh
@@ -0,0 +1,210 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; UI Extension Module
+
+!ifdef MODULE_REGISTERUIEXT
+
+;------------------------------------------------------------------------------------------------
+!macro REGISTERUIEXT_INITIALIZE
+ !include "includes\system.nsh"
+
+ !ifndef MODULE_REGISTERUIEXT_QTDIR
+ !ifdef MODULE_MINGW
+ !define MODULE_REGISTERUIEXT_QTDIR $MINGW_INSTDIR
+ !endif
+
+ !ifdef MODULE_MSVC
+ !define MODULE_REGISTERUIEXT_QTDIR $MSVC_INSTDIR
+ !endif
+ !endif
+
+ !define MODULE_REGISTERUIEXT_INTERNAL_DESC "Trolltech.DesignerForm"
+ !define MODULE_REGISTERUIEXT_DESC_DESIGNER "Open with Qt Designer"
+ !define MODULE_REGISTERUIEXT_DESC_DEVENV "Open with Visual Studio .NET"
+ !define MODULE_REGISTERUIEXT_FILE_DESC "Qt Designer File"
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_SECTIONS
+
+Function GetSelectedVSIP
+ Push $0
+ Push $1
+
+ StrCpy $0 ""
+!ifdef MODULE_VSIP
+!ifdef VSIP_SEC01
+ SectionGetFlags ${VSIP_SEC01} $1
+ IntOp $1 $1 & 1
+ IntCmp $1 0 +2
+ StrCpy $0 "7.1"
+!endif
+!ifdef VSIP_SEC02
+ SectionGetFlags ${VSIP_SEC02} $1
+ IntOp $1 $1 & 1
+ IntCmp $1 0 +2
+ StrCpy $0 "8.0"
+!endif
+!endif
+
+ Pop $1
+ Exch $0
+FunctionEnd
+
+SectionGroup "File Associations"
+Section "UI Files (*.ui)" REGISTERUIEXT_SEC01
+ call ModuleRegisterUI
+SectionEnd
+SectionGroupEnd
+
+Function ModuleRegisterUI
+ push $0
+ push $1
+
+ WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "UIExtRegistered" 1
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}" "" "${MODULE_REGISTERUIEXT_FILE_DESC}"
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell" "" "open"
+
+ Call GetSelectedVSIP
+ Pop $1
+
+ StrCmp "$1" "" 0 RegisterVSIP
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\open" "" "${MODULE_REGISTERUIEXT_DESC_DESIGNER}"
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\open\command" "" "${MODULE_REGISTERUIEXT_QTDIR}\bin\designer.exe $\"%1$\""
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\DefaultIcon" "" "${MODULE_REGISTERUIEXT_QTDIR}\bin\designer.exe,0"
+ goto RegisterFinished
+
+ RegisterVSIP:
+ Push $1
+ Call GetVSInstallationDir
+ Pop $0
+
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\open" "" "${MODULE_REGISTERUIEXT_DESC_DEVENV}"
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\${MODULE_REGISTERUIEXT_DESC_DEVENV}\command" "" "$0\devenv.exe $\"%1$\""
+ WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\DefaultIcon" "" "$VSIP_INSTDIR\ui.ico"
+ RegisterFinished:
+ WriteRegStr HKCR ".ui" "" "${MODULE_REGISTERUIEXT_INTERNAL_DESC}"
+
+ pop $1
+ pop $0
+FunctionEnd
+
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_DESCRIPTION
+ !insertmacro MUI_DESCRIPTION_TEXT ${REGISTERUIEXT_SEC01} "This will associate the file extention .ui with the Qt GUI editor."
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_STARTUP
+ StrCmp $RUNNING_AS_ADMIN "true" +2
+ SectionSetFlags ${REGISTERUIEXT_SEC01} 16
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_FINISH
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_UNSTARTUP
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_UNINSTALL
+Function un.ModuleRegisterUI
+ push $1
+ ReadRegStr $1 HKCR ".ui" ""
+ strcmp $1 "${MODULE_REGISTERUIEXT_INTERNAL_DESC}" 0 continue
+ ; do not delete this key since a subkey openwithlist
+ ; or open withprogid may exist
+ WriteRegStr HKCR ".ui" "" ""
+ continue:
+ ; just delete it since nobody else is supposed to use it
+ DeleteRegKey HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}"
+
+ pop $1
+FunctionEnd
+
+Section -un.ModuleRegisterUIExtSection
+ push $0
+ ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "UIExtRegistered"
+ intcmp $0 1 0 DoneUnRegister
+ call un.ModuleRegisterUI
+ DoneUnRegister:
+ pop $0
+SectionEnd
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!macro REGISTERUIEXT_UNFINISH
+!macroend
+
+;------------------------------------------------------------------------------------------------
+
+!else
+!macro REGISTERUIEXT_INITIALIZE
+!macroend
+!macro REGISTERUIEXT_SECTIONS
+!macroend
+!macro REGISTERUIEXT_DESCRIPTION
+!macroend
+!macro REGISTERUIEXT_STARTUP
+!macroend
+!macro REGISTERUIEXT_FINISH
+!macroend
+!macro REGISTERUIEXT_UNSTARTUP
+!macroend
+!macro REGISTERUIEXT_UNINSTALL
+!macroend
+!macro REGISTERUIEXT_UNFINISH
+!macroend
+!endif
diff --git a/tools/installer/nsis/opensource.ini b/tools/installer/nsis/opensource.ini
new file mode 100644
index 0000000..334dc5d
--- /dev/null
+++ b/tools/installer/nsis/opensource.ini
@@ -0,0 +1,81 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+;; Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+;; Beta Release License Agreement.
+;;
+;; 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.0, included in the file LGPL_EXCEPTION.txt in this
+;; package.
+;;
+;; GNU General Public License Usage
+;; Alternatively, this file may be used under the terms of the GNU
+;; General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
+;; met: http://www.gnu.org/copyleft/gpl.html.
+;;
+;; If you are unsure which license is appropriate for your use, please
+;; contact the sales department at qt-sales@nokia.com.
+;; $QT_END_LICENSE$
+;;
+;; This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+;; WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Ini file generated by the HM NIS Edit IO designer.
+[Settings]
+NumFields=4
+
+[Field 1]
+Type=Label
+Text=You are now installing the Open Source Edition of Qt. It is licensed under GNU LGPL version 2.1 and the GPL version 3.
+Left=0
+Right=300
+Top=0
+Bottom=78
+
+[Field 2]
+Type=Link
+Text=http://qtsoftware.com/developer/downloads/qt
+State=http://qtsoftware.com/developer/downloads/qt
+Left=0
+Right=278
+Top=80
+Bottom=88
+
+[Field 3]
+Type=Link
+Text=http://qtsoftware.com/company/model
+State=http://qtsoftware.com/company/model
+Left=0
+Right=267
+Top=112
+Bottom=120
+
+[Field 4]
+Type=Label
+Text=To read more about Nokia/Qt Software's licensing, please go to:
+Left=0
+Right=278
+Top=97
+Bottom=105
+