summaryrefslogtreecommitdiffstats
path: root/tools/installer
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2009-03-23 10:18:55 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2009-03-23 10:18:55 +0100
commite5fcad302d86d316390c6b0f62759a067313e8a9 (patch)
treec2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tools/installer
Long live Qt 4.5!
Diffstat (limited to 'tools/installer')
-rw-r--r--tools/installer/README12
-rwxr-xr-xtools/installer/batch/build.bat160
-rwxr-xr-xtools/installer/batch/copy.bat124
-rwxr-xr-xtools/installer/batch/delete.bat76
-rwxr-xr-xtools/installer/batch/env.bat144
-rwxr-xr-xtools/installer/batch/extract.bat86
-rwxr-xr-xtools/installer/batch/installer.bat250
-rwxr-xr-xtools/installer/batch/log.bat61
-rwxr-xr-xtools/installer/batch/toupper.bat72
-rw-r--r--tools/installer/config/config.default.sample67
-rw-r--r--tools/installer/config/mingw-opensource.conf139
-rwxr-xr-xtools/installer/iwmake.bat127
-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
30 files changed, 5076 insertions, 0 deletions
diff --git a/tools/installer/README b/tools/installer/README
new file mode 100644
index 000000000..63abf6d0a
--- /dev/null
+++ b/tools/installer/README
@@ -0,0 +1,12 @@
+iwmake is the tool used to generate the Qt installer binaries.
+
+To be able to use it yourself create a config.default in the
+config/ directory. You can refer to config.default.sample to see
+which values need to be set within this file.
+
+Afterwards call "iwmake.bat mingw-opensource.conf" to create an
+installer package yourself.
+
+Note that the binary creation takes a lot of time and is very
+CPU-intensive as it recompiles the Qt source package among other
+steps.
diff --git a/tools/installer/batch/build.bat b/tools/installer/batch/build.bat
new file mode 100755
index 000000000..ee90f92ef
--- /dev/null
+++ b/tools/installer/batch/build.bat
@@ -0,0 +1,160 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:begin
+for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_COMPILER=%%~m& set IWMAKE_TMP=%%~n
+
+if "%IWMAKE_TMP%"=="" set IWMAKE_TMP=build_%IWMAKE_COMPILER%
+set IWMAKE_BUILD=%IWMAKE_ROOT%\%IWMAKE_TMP%
+if not exist %IWMAKE_BUILD% mkdir %IWMAKE_BUILD%
+
+if not "%PATH%"=="" set IWMAKE_OLD_PATH=%PATH%
+if not "%QMAKESPEC%"=="" set IWMAKE_OLD_QMAKESPEC=%QMAKESPEC%
+if not "%QTDIR%"=="" set IWMAKE_OLD_QTDIR=%QTDIR%
+if not "%INCLUDE%"=="" set IWMAKE_OLD_INCLUDE=%INCLUDE%
+if not "%LIB%"=="" set IWMAKE_OLD_LIB=%LIB%
+
+set PATH=%IWMAKE_BUILD%\bin;%PATH%
+set QTDIR=%IWMAKE_BUILD%
+
+if "%IWMAKE_COMPILER%"=="vs2003" goto VS2003Env
+if "%IWMAKE_COMPILER%"=="vs2002" goto VS2002Env
+if "%IWMAKE_COMPILER%"=="vs2005" goto VS2005Env
+if "%IWMAKE_COMPILER%"=="vc60" goto VC60Env
+if "%IWMAKE_COMPILER%"=="mingw" goto MinGWEnv
+goto :eof
+
+:VS2003Env
+set QMAKESPEC=win32-msvc.net
+if not exist "%VS71COMNTOOLS%vsvars32.bat" echo VS2003 not found >> %IWMAKE_LOGFILE% & exit /b 1
+call "%VS71COMNTOOLS%vsvars32.bat" >> %IWMAKE_LOGFILE%
+set IWMAKE_MAKE=nmake
+goto :eof
+
+:VS2002Env
+set QMAKESPEC=win32-msvc.net
+if not exist "%VSCOMNTOOLS%vsvars32.bat" echo VS2002 not found >> %IWMAKE_LOGFILE% & exit /b 1
+call "%VSCOMNTOOLS%vsvars32.bat" >> %IWMAKE_LOGFILE%
+set IWMAKE_MAKE=nmake
+goto :eof
+
+:VS2005Env
+set QMAKESPEC=win32-msvc2005
+if not exist "%VS80COMNTOOLS%vsvars32.bat" echo VS2005 not found >> %IWMAKE_LOGFILE% & exit /b 1
+call "%VS80COMNTOOLS%vsvars32.bat" >> %IWMAKE_LOGFILE%
+set IWMAKE_MAKE=nmake
+goto :eof
+
+:VC60Env
+set QMAKESPEC=win32-msvc
+if not exist "%ProgramFiles%\Microsoft Visual Studio\VC98\Bin\vcvars32.bat" echo VC60 not found >> %IWMAKE_LOGFILE% & exit /b 1
+call "%ProgramFiles%\Microsoft Visual Studio\VC98\Bin\vcvars32.bat" >> %IWMAKE_LOGFILE%
+set IWMAKE_MAKE=nmake
+goto :eof
+
+:MinGWEnv
+set QMAKESPEC=win32-g++
+if not exist %IWMAKE_MINGWPATH%\bin\gcc.exe echo MinGW not found in %IWMAKE_MINGWPATH% >> %IWMAKE_LOGFILE% & exit /b 1
+set PATH=%IWMAKE_MINGWPATH%\bin;%PATH%
+set IWMAKE_MAKE=mingw32-make
+goto :eof
+
+:finish
+ if not "%IWMAKE_OLD_PATH%"=="" set PATH=%IWMAKE_OLD_PATH%& set IWMAKE_OLD_PATH=
+ if not "%IWMAKE_OLD_QMAKESPEC%"=="" set QMAKESPEC=%IWMAKE_OLD_QMAKESPEC%& set IWMAKE_OLD_QMAKESPEC=
+ if not "%IWMAKE_OLD_QTDIR%"=="" set QTDIR=%IWMAKE_OLD_QTDIR%& set IWMAKE_OLD_QTDIR=
+ if not "%IWMAKE_OLD_INCLUDE%"=="" set INCLUDE=%IWMAKE_OLD_INCLUDE%& set IWMAKE_OLD_INCLUDE=
+ if not "%IWMAKE_OLD_LIB%"=="" set LIB=%IWMAKE_OLD_LIB%& set IWMAKE_OLD_LIB=
+goto :eof
+
+:configure
+ pushd %IWMAKE_BUILD%
+ configure %~1 >> %IWMAKE_LOGFILE% 2>&1
+ popd
+goto :eof
+
+:bin
+ pushd %IWMAKE_BUILD%
+ %IWMAKE_MAKE% %~1 >>%IWMAKE_LOGFILE% 2>&1
+ popd
+goto :eof
+
+:binInDir
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ pushd %IWMAKE_BUILD%\%IWMAKE_TMP%
+ %IWMAKE_MAKE% %IWMAKE_TMP2% >> %IWMAKE_LOGFILE% 2>&1
+ popd
+goto :eof
+
+:DBPlugins
+ call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync sql
+ set IWMAKE_SQL_OLD_LIB=%LIB%
+ pushd %IWMAKE_BUILD%\src\plugins\sqldrivers\mysql
+ set LIB=%IWMAKE_ROOT%\sql\mysql\lib\debug;%IWMAKE_SQL_OLD_LIB%
+ qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\mysql\include" "LIBS+=libmysql.lib ws2_32.lib advapi32.lib user32.lib" >> %IWMAKE_LOGFILE% 2>&1
+ %IWMAKE_MAKE% debug >> %IWMAKE_LOGFILE% 2>&1
+ set LIB=%IWMAKE_ROOT%\sql\mysql\lib\opt;%IWMAKE_SQL_OLD_LIB%
+ qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\mysql\include" "LIBS+=libmysql.lib ws2_32.lib advapi32.lib" >> %IWMAKE_LOGFILE% 2>&1
+ %IWMAKE_MAKE% release >> %IWMAKE_LOGFILE% 2>&1
+ popd
+
+ set LIB=%IWMAKE_ROOT%\sql\%IWMAKE_COMPILER%;%IWMAKE_SQL_OLD_LIB%
+ pushd %IWMAKE_BUILD%\src\plugins\sqldrivers\psql
+ qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\include\psql" "LIBS+=libpqd.lib ws2_32.lib advapi32.lib shfolder.lib shell32.lib" >> %IWMAKE_LOGFILE% 2>&1
+ %IWMAKE_MAKE% debug >> %IWMAKE_LOGFILE% 2>&1
+ qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\include\psql" "LIBS+=libpq.lib ws2_32.lib advapi32.lib shfolder.lib shell32.lib" >> %IWMAKE_LOGFILE% 2>&1
+ %IWMAKE_MAKE% release >> %IWMAKE_LOGFILE% 2>&1
+ popd
+ set LIB=%IWMAKE_SQL_OLD_LIB%
+ set IWMAKE_SQL_OLD_LIB=
+goto :eof
+
+:root
+ set IWMAKE_BUILD=%~1
+ if not exist %IWMAKE_BUILD% mkdir %IWMAKE_BUILD%
+goto :eof
+
+:END
diff --git a/tools/installer/batch/copy.bat b/tools/installer/batch/copy.bat
new file mode 100755
index 000000000..0fcb5a682
--- /dev/null
+++ b/tools/installer/batch/copy.bat
@@ -0,0 +1,124 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:dest
+ set IWMAKE_OUTDIR=%IWMAKE_ROOT%\%~1
+ if not exist %IWMAKE_OUTDIR% mkdir %IWMAKE_OUTDIR%
+goto :eof
+
+:src
+ set IWMAKE_SRCDIR=%IWMAKE_ROOT%\%~1
+ if not exist %IWMAKE_SRCDIR% mkdir %IWMAKE_SRCDIR%
+goto :eof
+
+:destAbs
+ set IWMAKE_OUTDIR=%1
+ if not exist %IWMAKE_OUTDIR% mkdir %IWMAKE_OUTDIR%
+goto :eof
+
+:srcAbs
+ set IWMAKE_SRCDIR=%1
+ if not exist %IWMAKE_SRCDIR% mkdir %IWMAKE_SRCDIR%
+goto :eof
+
+:extsync
+ if exist %IWMAKE_ROOT%\%~1 rd /S /Q %IWMAKE_ROOT%\%~1 >> %IWMAKE_LOGFILE%
+ xcopy /H /Y /Q /I /R /E %IWMAKE_EXTERNAL%\%~1 %IWMAKE_ROOT%\%~1 >> %IWMAKE_LOGFILE%
+goto :eof
+
+:all
+ xcopy /H /Y /Q /I /R /S %IWMAKE_SRCDIR%\%~1 %IWMAKE_OUTDIR%\ >> %IWMAKE_LOGFILE%
+goto :eof
+
+:filesEx
+ for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3=%%~o
+ echo %IWMAKE_TMP3% > %IWMAKE_ROOT%\iwmake_exclude
+ xcopy /H /Y /Q /I /R /S /EXCLUDE:%IWMAKE_ROOT%\iwmake_exclude %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP2% >> %IWMAKE_LOGFILE%
+goto :eof
+
+:file
+ set IWMAKE_TMP=%~1
+ set IWMAKE_TMP2=%~nx1
+ echo set IWMAKE_TMP3=%%IWMAKE_TMP:%IWMAKE_TMP2%=%%>"%IWMAKE_ROOT%\iwmake_tmp.bat"
+ call %IWMAKE_ROOT%\iwmake_tmp.bat
+ if not exist "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%" mkdir "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%"
+ xcopy /H /Y /Q /I /R %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP3% >> %IWMAKE_LOGFILE%
+goto :eof
+
+:fileAndRename
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP4=%%~nxn
+ echo set IWMAKE_TMP3=%%IWMAKE_TMP2:%IWMAKE_TMP4%=%%>"%IWMAKE_ROOT%\iwmake_tmp.bat"
+ call %IWMAKE_ROOT%\iwmake_tmp.bat
+ if not exist "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%" mkdir "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%"
+ echo > %IWMAKE_OUTDIR%\%IWMAKE_TMP2%
+ xcopy /H /Y /Q /R %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP2% >> %IWMAKE_LOGFILE%
+ set IWMAKE_TMP4=
+goto :eof
+
+:files
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ if not exist "%IWMAKE_OUTDIR%\%IWMAKE_TMP2%" mkdir "%IWMAKE_OUTDIR%\%IWMAKE_TMP2%"
+ xcopy /H /Y /Q /I /R /S %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP2% >> %IWMAKE_LOGFILE%
+goto :eof
+
+:runtime
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ if "%IWMAKE_TMP2%" == "" set IWMAKE_TMP2=bin
+ xcopy /H /Y /Q /I /R %SystemRoot%\system32\msvcr%IWMAKE_TMP%.dll %IWMAKE_OUTDIR%\%IWMAKE_TMP2%\ >> %IWMAKE_LOGFILE%
+ xcopy /H /Y /Q /I /R %SystemRoot%\system32\msvcp%IWMAKE_TMP%.dll %IWMAKE_OUTDIR%\%IWMAKE_TMP2%\ >> %IWMAKE_LOGFILE%
+goto :eof
+
+:syncqt
+ pushd %IWMAKE_OUTDIR%
+ if exist "include" rd /S /Q include
+ if not "%QTDIR%"=="" set IWMAKE_OLD_QTDIR=%QTDIR%
+ set QTDIR=%IWMAKE_OUTDIR%
+ "%IWMAKE_PERLPATH%\perl" %QTDIR%\bin\syncqt -copy >> %IWMAKE_LOGFILE% 2>&1
+ if not "%IWMAKE_OLD_QTDIR%"=="" set QTDIR=%IWMAKE_OLD_QTDIR%
+ popd
+goto :eof
+
+:END
diff --git a/tools/installer/batch/delete.bat b/tools/installer/batch/delete.bat
new file mode 100755
index 000000000..1174cde32
--- /dev/null
+++ b/tools/installer/batch/delete.bat
@@ -0,0 +1,76 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:destDir
+ if exist "%IWMAKE_OUTDIR%\%~1" rd /S /Q %IWMAKE_OUTDIR%\%~1
+goto :eof
+
+:dir
+ if exist "%IWMAKE_ROOT%\%~1" rd /S /Q %IWMAKE_ROOT%\%~1
+goto :eof
+
+:dirAbs
+ if exist "%~1" rd /S /Q %~1
+goto :eof
+
+:file
+ del /Q /F %IWMAKE_OUTDIR%\%~1 >> %IWMAKE_LOGFILE% 2>&1
+ exit /b 0
+goto :eof
+
+:files
+ del /S /Q /F %IWMAKE_OUTDIR%\%~1 >> %IWMAKE_LOGFILE% 2>&1
+ exit /b 0
+goto :eof
+
+:line
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ if exist "%IWMAKE_ROOT%\tmp_line.txt" del /Q /F "%IWMAKE_ROOT%\tmp_line.txt" >> %IWMAKE_LOGFILE%
+ type "%IWMAKE_ROOT%\%IWMAKE_TMP%" | find /V "%IWMAKE_TMP2%" >> "%IWMAKE_ROOT%\tmp_line.txt"
+ xcopy /Y /Q /R %IWMAKE_ROOT%\tmp_line.txt %IWMAKE_ROOT%\%IWMAKE_TMP% >> %IWMAKE_LOGFILE%
+goto :eof
+
+:END
diff --git a/tools/installer/batch/env.bat b/tools/installer/batch/env.bat
new file mode 100755
index 000000000..cbea4f5b9
--- /dev/null
+++ b/tools/installer/batch/env.bat
@@ -0,0 +1,144 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:setglobals
+set IWMAKE_PARSESECTION=1
+set IWMAKE_MINGWPATH=c:\MinGW\bin
+set IWMAKE_STARTDIR=%CD%
+set IWMAKE_NSISCONF=%IWMAKE_SCRIPTDIR%\nsis\config.nsh
+set IWMAKE_ROOT=c:\package
+set IWMAKE_OUTDIR=%IWMAKE_ROOT%
+set IWMAKE_SRCDIR=%IWMAKE_ROOT%
+set IWMAKE_EXTRACTDEST=%IWMAKE_ROOT%
+set IWMAKE_NSISPATH=%PROGRAMFILES%\NSIS
+call %IWMAKE_SCRIPTDIR%\batch\log.bat fileAbs "%IWMAKE_STARTDIR%\log.txt"
+goto :eof
+
+:signPath
+ set IWMAKE_SIGNPATH=%~1
+goto :eof
+
+:wgetPath
+ set IWMAKE_WGET=%~1
+goto :eof
+
+:wgetDir
+ set IWMAKE_WGET=%IWMAKE_ROOT%\%~1
+goto :eof
+
+:NSISPath
+ set IWMAKE_NSISPATH=%~1
+goto :eof
+
+:PerlPath
+ set IWMAKE_PERLPATH=%~1
+goto :eof
+
+:MinGWPath
+ set IWMAKE_MINGWPATH=%~1
+goto :eof
+
+:unzipApp
+ set IWMAKE_UNZIPAPP=%~1
+goto :eof
+
+:releaseLocation
+ set IWMAKE_WGETUSER=
+ set IWMAKE_WGETPASS=
+ for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& if not "%%~n"=="" set IWMAKE_TMP2=%%~n& if not "%%~o"=="" set IWMAKE_TMP3=%%~o
+ if not "%IWMAKE_TMP2%"=="" set IWMAKE_WGETUSER=--http-user=%IWMAKE_TMP2%
+ if not "%IWMAKE_TMP3%"=="" set IWMAKE_WGETPASS=--http-passwd=%IWMAKE_TMP3%
+ set IWMAKE_RELEASELOCATION=%IWMAKE_TMP%
+goto :eof
+
+:removeglobals
+if not "%IWMAKE_OLD_PATH%"=="" call %IWMAKE_SCRIPTDIR%\batch\build.bat finish
+set IWMAKE_RELEASELOCATION=
+set IWMAKE_NSISPATH=
+set IWMAKE_SECTION=
+set IWMAKE_WGET=
+set IWMAKE_WGETUSER=
+set IWMAKE_WGETPASS=
+set IWMAKE_UNZIPAPP=
+set IWMAKE_MINGWPATH=
+set IWMAKE_MAKE=
+set IWMAKE_PERLPATH=
+set IWMAKE_STARTDIR=
+set IWMAKE_SCRIPTDIR=
+set IWMAKE_NSISCONF=
+set IWMAKE_RESULT=
+set IWMAKE_TMP=
+set IWMAKE_TMP2=
+set IWMAKE_TMP3=
+set IWMAKE_STATUS=
+set IWMAKE_LOGFILE=
+set IWMAKE_BUILD=
+set IWMAKE_ROOT=
+set IWMAKE_OUTDIR=
+set IWMAKE_EXTERNAL=
+set IWMAKE_OLD_PATH=
+set IWMAKE_OLD_QMAKESPEC=
+set IWMAKE_OLD_QTDIR=
+set IWMAKE_OLD_INCLUDE=
+set IWMAKE_OLD_LIB=
+set IWMAKE_COMPILER=
+set IWMAKE_SRCDIR=
+set IWMAKE_EXTRACTSRC=
+set IWMAKE_EXTRACTDEST=
+set IWMAKE_PARSESECTION=
+set IWMAKE_OUTPUT_FILE=
+set IWMAKE_SIGNPATH=
+goto :eof
+
+:root
+set IWMAKE_ROOT=%~1
+goto :eof
+
+:extroot
+set IWMAKE_EXTERNAL=%~1
+goto :eof
+
+:END
diff --git a/tools/installer/batch/extract.bat b/tools/installer/batch/extract.bat
new file mode 100755
index 000000000..59554bc51
--- /dev/null
+++ b/tools/installer/batch/extract.bat
@@ -0,0 +1,86 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:dest
+ set IWMAKE_EXTRACTDEST=%IWMAKE_ROOT%\%~1
+goto :eof
+
+:extUnpack
+ set IWMAKE_EXTRACTSRC=%~n1
+ pushd %IWMAKE_ROOT%
+ if exist "%IWMAKE_EXTRACTSRC%.zip" del /Q /F "%IWMAKE_EXTRACTSRC%.zip"
+ %IWMAKE_WGET%\wget %IWMAKE_WGETUSER% %IWMAKE_WGETPASS% %IWMAKE_RELEASELOCATION%/%IWMAKE_EXTRACTSRC%.zip >> %IWMAKE_LOGFILE% 2>&1
+ popd
+ call :unpack "%~1"
+goto :eof
+
+:unpack
+ set IWMAKE_EXTRACTSRC=%~n1
+ pushd %IWMAKE_ROOT%
+ if exist "%IWMAKE_EXTRACTDEST%" rd /S /Q %IWMAKE_EXTRACTDEST% >> %IWMAKE_LOGFILE% 2>&1
+ if exist "%IWMAKE_EXTRACTSRC%" rd /S /Q %IWMAKE_EXTRACTSRC% >> %IWMAKE_LOGFILE% 2>&1
+ %IWMAKE_UNZIPAPP% %IWMAKE_EXTRACTSRC%.zip >> %IWMAKE_LOGFILE%
+ popd
+ move %IWMAKE_ROOT%\%IWMAKE_EXTRACTSRC% %IWMAKE_EXTRACTDEST% >> %IWMAKE_LOGFILE%
+goto :eof
+
+:extPatch
+ pushd %IWMAKE_ROOT%
+ if exist "%~1" del /Q /F "%~1"
+ %IWMAKE_WGET%\wget %IWMAKE_WGETUSER% %IWMAKE_WGETPASS% %IWMAKE_RELEASELOCATION%/%~1 >> %IWMAKE_LOGFILE% 2>&1
+ popd
+ call :patch "%~1"
+goto :eof
+
+:patch
+ pushd %IWMAKE_ROOT%
+ %IWMAKE_UNZIPAPP% %~1 >> %IWMAKE_LOGFILE%
+ popd
+ xcopy /R /I /S /Q /Y %IWMAKE_ROOT%\%IWMAKE_EXTRACTSRC%\*.* %IWMAKE_EXTRACTDEST%\ >> %IWMAKE_LOGFILE%
+ rd /S /Q %IWMAKE_ROOT%\%IWMAKE_EXTRACTSRC% >> %IWMAKE_LOGFILE%
+goto :eof
+
+:END
diff --git a/tools/installer/batch/installer.bat b/tools/installer/batch/installer.bat
new file mode 100755
index 000000000..c5c51de44
--- /dev/null
+++ b/tools/installer/batch/installer.bat
@@ -0,0 +1,250 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:begin
+ call :reset
+ echo !define PRODUCT_NAME "%~1" >> %IWMAKE_NSISCONF%
+ echo !define INSTALL_ROOT "%IWMAKE_ROOT%" >> %IWMAKE_NSISCONF%
+goto :eof
+
+:output
+ set IWMAKE_OUTPUT_FILE=%~1
+ echo !define OUTPUT_FILE "%~1" >> %IWMAKE_NSISCONF%
+goto :eof
+
+:module
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %~1
+ echo !define MODULE_%IWMAKE_RESULT% >> %IWMAKE_NSISCONF%
+goto :eof
+
+:enable
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %~1
+ echo !define USE_%IWMAKE_RESULT:"=% >> %IWMAKE_NSISCONF%
+goto :eof
+
+:disable
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %~1
+ echo !undef USE_%IWMAKE_RESULT:"=% >> %IWMAKE_NSISCONF%
+goto :eof
+
+:startmenu
+ echo !define DEFAULT_STARTMENU_STRING "%~1" >> %IWMAKE_NSISCONF%
+goto :eof
+
+:reset
+ if exist "%IWMAKE_NSISCONF%" del /Q /F "%IWMAKE_NSISCONF%"
+goto :eof
+
+:instdir
+ for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3="%%~o"
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP%
+ echo !define INSTDIR_%IWMAKE_TMP2% %IWMAKE_RESULT:"=% >> "%IWMAKE_NSISCONF%"
+ echo !define INSTDIR_%IWMAKE_TMP2%_TEXT %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:version
+ echo !define PRODUCT_VERSION "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:readme
+ echo !define README_FILE "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:licenseFile
+ echo !define LICENSE_FILE "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:runfunction
+ echo !define RUN_FUNCTION "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:readmefunction
+ echo !define README_FUNCTION "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:welcomenote
+ echo !define WELCOME_NOTE "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:updateplugins
+ call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync INetLoad
+ xcopy /Q /Y /R "%IWMAKE_ROOT%\INetLoad\INetLoad.dll" "%IWMAKE_NSISPATH%\Plugins\" >> %IWMAKE_LOGFILE%
+:: xcopy /Q /Y /R "%IWMAKE_SCRIPTDIR%\nsis\qtnsisext\qtnsisext.dll" "%IWMAKE_NSISPATH%\Plugins\" >> %IWMAKE_LOGFILE%
+goto :eof
+
+:defineDir
+ for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3=%%~o
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP%
+ set IWMAKE_TMP=%IWMAKE_RESULT%
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP2%
+ set IWMAKE_TMP2=%IWMAKE_RESULT%
+ echo !define MODULE_%IWMAKE_TMP%_%IWMAKE_TMP2% "%IWMAKE_ROOT%\%IWMAKE_TMP3%" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:define
+ for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3="%%~o"
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP%
+ set IWMAKE_TMP=%IWMAKE_RESULT%
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP2%
+ set IWMAKE_TMP2=%IWMAKE_RESULT%
+ if %IWMAKE_TMP3%=="" set IWMAKE_TMP3=
+ echo !define MODULE_%IWMAKE_TMP%_%IWMAKE_TMP2% %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:src
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP%
+ set IWMAKE_TMP=%IWMAKE_RESULT%
+ set IWMAKE_TMP3="%IWMAKE_ROOT%\%IWMAKE_TMP2%"
+ echo !define MODULE_%IWMAKE_TMP%_ROOT %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:buildDir
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP%
+ set IWMAKE_TMP=%IWMAKE_RESULT%
+ set IWMAKE_TMP3="%IWMAKE_ROOT%\%IWMAKE_TMP2%"
+ echo !define MODULE_%IWMAKE_TMP%_BUILDDIR %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%"
+ for /F "eol=- tokens=1,2,3" %%m in ('%SystemRoot%\system32\find "QT_PACKAGEDATE_STR" %IWMAKE_ROOT%\%IWMAKE_TMP2%\src\corelib\global\qglobal.h') do echo !define MODULE_LICENSECHECK_PACKAGEDATE %%o >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:compile
+ call :required
+ pushd %IWMAKE_SCRIPTDIR%\nsis
+ "%IWMAKE_NSISPATH%\makensis.exe" installer.nsi >> %IWMAKE_LOGFILE%
+ popd
+goto :eof
+
+:required
+ call :setrequired PRODUCT_NAME
+ call :setrequired INSTALL_ROOT
+ call :setrequired PRODUCT_VERSION
+ call :setrequired OUTPUT_FILE
+ call :setrequired INSTDIR_0
+ call :setrequired DEFAULT_STARTMENU_STRING
+goto :eof
+
+:setrequired
+ echo !ifndef %1 >> "%IWMAKE_NSISCONF%"
+ echo !error "%1 must be in the .conf file..." >> "%IWMAKE_NSISCONF%"
+ echo !endif >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:makeFileList
+ for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n
+ call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP%
+ set IWMAKE_TMP=%IWMAKE_RESULT%
+ set IWMAKE_TMP3="%IWMAKE_ROOT%\%IWMAKE_TMP2%"
+
+
+ echo !macro MODULE_%IWMAKE_TMP%_INSTALLFILES >> "%IWMAKE_NSISCONF%"
+
+ pushd %IWMAKE_TMP3%
+
+ echo set IWMAKE_TMP2=%%IWMAKE_TMP2:%CD%\=%% > "%IWMAKE_ROOT%\iwmake_tmp.bat"
+
+ dir /AD /B /S | %SystemRoot%\system32\sort /R > "%IWMAKE_ROOT%\iwmake_tmp.txt"
+ for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addInstallDirectory "%%m"
+
+
+ dir /A-D /B /S > "%IWMAKE_ROOT%\iwmake_tmp.txt"
+ for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addInstallFile "%%m"
+
+ popd
+ echo !macroend >> "%IWMAKE_NSISCONF%"
+
+
+ echo !macro MODULE_%IWMAKE_TMP%_REMOVE removepath >> "%IWMAKE_NSISCONF%"
+ echo strcmp ${removepath} "" MODULE_%IWMAKE_TMP%_REMOVE_SAFETYLABEL >> "%IWMAKE_NSISCONF%"
+ pushd %IWMAKE_TMP3%
+
+ echo set IWMAKE_TMP2=%%IWMAKE_TMP2:%CD%\=%% > "%IWMAKE_ROOT%\iwmake_tmp.bat"
+
+ dir /A-D /B /S > "%IWMAKE_ROOT%\iwmake_tmp.txt"
+ for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addRemoveFiles "%%m"
+
+ dir /AD /B /S | %SystemRoot%\system32\sort /R > "%IWMAKE_ROOT%\iwmake_tmp.txt"
+ for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addRemoveDirectory "%%m"
+
+ popd
+ echo MODULE_%IWMAKE_TMP%_REMOVE_SAFETYLABEL: >> "%IWMAKE_NSISCONF%"
+ echo !macroend >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:addInstallFile
+ set IWMAKE_TMP2=%~1
+ call "%IWMAKE_ROOT%\iwmake_tmp.bat"
+ echo File "/oname=%IWMAKE_TMP2%" "%~1" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:addInstallDirectory
+ set IWMAKE_TMP2=%~1
+ call "%IWMAKE_ROOT%\iwmake_tmp.bat"
+ echo CreateDirectory "$OUTDIR\%IWMAKE_TMP2%" >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:addRemoveDirectory
+ set IWMAKE_TMP2=%~1
+ call "%IWMAKE_ROOT%\iwmake_tmp.bat"
+ echo RMDir ${removepath}\%IWMAKE_TMP2% >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:addRemoveFiles
+ set IWMAKE_TMP2=%~1
+ call "%IWMAKE_ROOT%\iwmake_tmp.bat"
+ echo Delete ${removepath}\%IWMAKE_TMP2% >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:sign
+ echo Signing Installer ...
+ %IWMAKE_SIGNPATH%\signtool.exe sign /v /t http://timestamp.verisign.com/scripts/timestamp.dll /f "%IWMAKE_SIGNPATH%\keys.pfx" "%IWMAKE_OUTPUT_FILE%" >> %IWMAKE_LOGFILE%
+goto :eof
+
+:openpackage
+ echo !define OPENSOURCE_BUILD >> "%IWMAKE_NSISCONF%"
+goto :eof
+
+:END
diff --git a/tools/installer/batch/log.bat b/tools/installer/batch/log.bat
new file mode 100755
index 000000000..094df8f79
--- /dev/null
+++ b/tools/installer/batch/log.bat
@@ -0,0 +1,61 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+call :%1 %2
+goto END
+
+:file
+set IWMAKE_LOGFILE=%IWMAKE_ROOT%\%~1
+call :reset
+goto :eof
+
+:fileAbs
+set IWMAKE_LOGFILE=%1
+call :reset
+goto :eof
+
+:reset
+date /T > %IWMAKE_LOGFILE%
+goto :eof
+
+:END
diff --git a/tools/installer/batch/toupper.bat b/tools/installer/batch/toupper.bat
new file mode 100755
index 000000000..5e19f0f11
--- /dev/null
+++ b/tools/installer/batch/toupper.bat
@@ -0,0 +1,72 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+set IWMAKE_RESULT=%1
+if [%IWMAKE_RESULT%]==[] goto :eof
+set IWMAKE_RESULT=%IWMAKE_RESULT:a=A%
+set IWMAKE_RESULT=%IWMAKE_RESULT:b=B%
+set IWMAKE_RESULT=%IWMAKE_RESULT:c=C%
+set IWMAKE_RESULT=%IWMAKE_RESULT:d=D%
+set IWMAKE_RESULT=%IWMAKE_RESULT:e=E%
+set IWMAKE_RESULT=%IWMAKE_RESULT:f=F%
+set IWMAKE_RESULT=%IWMAKE_RESULT:g=G%
+set IWMAKE_RESULT=%IWMAKE_RESULT:h=H%
+set IWMAKE_RESULT=%IWMAKE_RESULT:i=I%
+set IWMAKE_RESULT=%IWMAKE_RESULT:j=J%
+set IWMAKE_RESULT=%IWMAKE_RESULT:k=K%
+set IWMAKE_RESULT=%IWMAKE_RESULT:l=L%
+set IWMAKE_RESULT=%IWMAKE_RESULT:m=M%
+set IWMAKE_RESULT=%IWMAKE_RESULT:n=N%
+set IWMAKE_RESULT=%IWMAKE_RESULT:o=O%
+set IWMAKE_RESULT=%IWMAKE_RESULT:p=P%
+set IWMAKE_RESULT=%IWMAKE_RESULT:q=Q%
+set IWMAKE_RESULT=%IWMAKE_RESULT:r=R%
+set IWMAKE_RESULT=%IWMAKE_RESULT:s=S%
+set IWMAKE_RESULT=%IWMAKE_RESULT:t=T%
+set IWMAKE_RESULT=%IWMAKE_RESULT:u=U%
+set IWMAKE_RESULT=%IWMAKE_RESULT:v=V%
+set IWMAKE_RESULT=%IWMAKE_RESULT:w=W%
+set IWMAKE_RESULT=%IWMAKE_RESULT:x=X%
+set IWMAKE_RESULT=%IWMAKE_RESULT:y=Y%
+set IWMAKE_RESULT=%IWMAKE_RESULT:z=Z%
+
diff --git a/tools/installer/config/config.default.sample b/tools/installer/config/config.default.sample
new file mode 100644
index 000000000..c6e79e408
--- /dev/null
+++ b/tools/installer/config/config.default.sample
@@ -0,0 +1,67 @@
+#############################################################################
+##
+## 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.
+##
+#############################################################################
+
+# root directory
+# Describes the directory where temporary folder, build directory and
+# package will be located at.
+env root "c:\qt_packages"
+
+# where to find all external files
+# To resolve the external dependencies specify a server, where to get
+# required tools like wget, sign, etc.
+env extroot "\\someshare\tools\"
+
+# Location of the installed MinGW to build binaries
+env mingwPath "c:\mingw"
+
+# Location to NSIS package creator
+env NSISPath "%ProgramFiles%\NSIS"
+
+# Location to the install path of PERL
+env perlPath "c:\Perl\bin"
+
+# source package directory
+# Describe the directory where compressed source package is located at.
+# The installer script uses this one for building and creating a package.
+env releaseLocation "http://your.source.server/somepath"
diff --git a/tools/installer/config/mingw-opensource.conf b/tools/installer/config/mingw-opensource.conf
new file mode 100644
index 000000000..b01c2a1ba
--- /dev/null
+++ b/tools/installer/config/mingw-opensource.conf
@@ -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.
+##
+#############################################################################
+#extracts the package to buildDir
+
+#extract dest "build_mingw_opensource"
+#Section EXTRACT
+#extract extUnpack "qt-win-opensource-src-%VERSION%.zip"
+#SectionEnd
+
+#build the binaries
+#build begin mingw "build_mingw_opensource"
+
+#Section CONFIGURE
+#build configure "-confirm-license -release -plugin-sql-sqlite -qt-libpng -qt-libjpeg"
+#SectionEnd
+
+#Section BUILD
+#build bin
+#SectionEnd
+
+#build finish
+
+# organize release files
+#Section ORGANIZE
+#delete dir "release_mingw_opensource"
+
+#copy dest "release_mingw_opensource"
+#copy src "build_mingw_opensource"
+
+# extract everything once more
+#extract dest "release_mingw_opensource"
+#extract unpack "qt-win-opensource-src-4.4.3.zip"
+
+# qconfig.h
+#copy file "src\corelib\global\qconfig.h"
+#copy file "include\QtCore\qconfig.h"
+#copy file "include\Qt\qconfig.h"
+
+# qconfig.pri
+#copy file "mkspecs\qconfig.pri"
+
+# .qmake.cache
+#copy file ".qmake.cache"
+
+# default mkspec
+#copy files "mkspecs\default\*" "mkspecs\default\"
+
+# copy all binary files
+#copy all "*.a"
+#copy all "*.exe"
+#copy all "*.dll"
+
+# .prl files
+#copy files "lib\*.prl" "lib\"
+
+# remove unused stuff
+#delete files "lib\*.dll"
+
+# copy InetLoad license info
+#copy files "..\INetLoad\Readme.txt" "src\3rdparty\InetLoad\"
+
+#SectionEnd
+
+Section NSIS
+# general installer options
+installer begin "Qt OpenSource"
+installer version "4.4.3"
+installer output "c:\iwmake\qt-win-opensource-4.4.3-mingw.exe"
+installer startmenu "Qt by Nokia v4.4.3 (OpenSource)"
+installer enable component_page
+installer enable directory_page
+installer enable startmenu_page
+installer instdir mingw 0 "Qt Installation Directory"
+installer licenseFile "%IWMAKE_ROOT%\release_mingw_opensource\LICENSE.GPL"
+#installer licenseFile "%IWMAKE_ROOT%\release_mingw_opensource\LICENSE.PREVIEW.OPENSOURCE"
+
+installer runfunction "Run Examples and Demos"
+installer readmefunction "Show Documentation"
+
+installer module registeruiext
+installer module opensource
+
+# mingw options
+installer module mingw
+installer src mingw "release_mingw_opensource"
+installer makeFileList mingw "release_mingw_opensource"
+installer buildDir mingw "build_mingw_opensource"
+installer enable nodirlengthcheck
+
+# public generatable package
+installer openpackage
+
+SectionEnd
+
+# compile the package
+Section NSIS_COMPILE
+installer compile
+SectionEnd
diff --git a/tools/installer/iwmake.bat b/tools/installer/iwmake.bat
new file mode 100755
index 000000000..ee1158d03
--- /dev/null
+++ b/tools/installer/iwmake.bat
@@ -0,0 +1,127 @@
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: 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.
+::
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+rem @echo off
+call :init
+if "%IWMAKE_STATUS%"=="failed" goto FAILED
+if not exist "%IWMAKE_SCRIPTDIR%\config\%1.conf" goto FAILED
+if not "%~2"=="" set IWMAKE_SECTION=%~2
+for /F "eol=# tokens=1,2*" %%i in (%IWMAKE_SCRIPTDIR%\config\config.default) do set IWMAKE_TMP=%%k& call :func_delegate %%i %%j
+if "%IWMAKE_STATUS%"=="failed" goto FAILED
+if exist "%IWMAKE_SCRIPTDIR%\config\config.%COMPUTERNAME%" for /F "eol=# tokens=1,2*" %%i in (%IWMAKE_SCRIPTDIR%\config\config.%COMPUTERNAME%) do set IWMAKE_TMP=%%k& call :func_delegate %%i %%j
+if "%IWMAKE_STATUS%"=="failed" goto FAILED
+call :checkrequirements
+if "%IWMAKE_STATUS%"=="failed" goto FAILED
+for /F "eol=# tokens=1,2*" %%i in (%IWMAKE_SCRIPTDIR%\config\%1.conf) do set IWMAKE_TMP=%%k& call :func_delegate %%i %%j
+if "%IWMAKE_STATUS%"=="failed" goto FAILED
+goto DONE
+
+:func_delegate
+if "%IWMAKE_STATUS%"=="failed" goto :eof
+set IWMAKE_TMP="%IWMAKE_TMP:"=%"
+
+if /i "%1"=="sectionend" echo Leaving Section& set IWMAKE_PARSESECTION=1& goto :eof
+if /i not "%1"=="section" goto callScript
+echo Entering Section %~2
+for %%m in (%IWMAKE_SECTION%) do call :checkSection %%m %~2
+goto :eof
+
+:callScript
+if "%IWMAKE_PARSESECTION%"=="0" goto :eof
+
+call "%IWMAKE_SCRIPTDIR%\batch\%1.bat" %2 %IWMAKE_TMP%
+if not "%errorlevel%"=="0" echo %1 %2 failed! >> %IWMAKE_LOGFILE%& set IWMAKE_STATUS=failed
+goto :eof
+
+:checkSection
+ if /i "%1"=="%2" echo Skipping Section& set IWMAKE_PARSESECTION=0
+goto :eof
+
+:checkrequirements
+ if not exist %IWMAKE_ROOT% mkdir %IWMAKE_ROOT%
+ if not "%IWMAKE_SIGNPATH%"=="" goto CheckSIGNOK
+ call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync sign
+ call "%IWMAKE_SCRIPTDIR%\batch\env.bat" signPath "%IWMAKE_ROOT%\sign"
+:CheckSIGNOK
+ if not "%IWMAKE_WGET%"=="" goto CheckWGETOK
+ call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync wget
+ call "%IWMAKE_SCRIPTDIR%\batch\env.bat" wgetDir wget
+:CheckWGETOK
+ if exist "%IWMAKE_PERLPATH%\perl.exe" goto CheckPerlOK
+ set IWMAKE_STATUS=failed
+ echo Perl not found in %IWMAKE_PERLPATH%! (check your config file)
+:CheckPerlOK
+ if not "%IWMAKE_UNZIPAPP%"=="" goto CheckUNZIPOK
+ call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync unzip
+ call "%IWMAKE_SCRIPTDIR%\batch\env.bat" unzipApp "%IWMAKE_ROOT%\unzip\unzip.exe"
+:CheckUNZIPOK
+ if exist "%IWMAKE_NSISPATH%\makensis.exe" goto CheckNSISOK
+ set IWMAKE_STATUS=failed
+ echo NSIS not found! (check your config file)
+:CheckNSISOK
+ call "%IWMAKE_SCRIPTDIR%\batch\installer.bat" updateplugins
+goto :eof
+
+:init
+ set IWMAKE_SCRIPTDIR=%~dp0
+ set IWMAKE_SCRIPTDIR=%IWMAKE_SCRIPTDIR:~0,-1%
+ call "%IWMAKE_SCRIPTDIR%\batch\env.bat" setglobals
+goto :eof
+
+:cleanup
+ pushd "%IWMAKE_STARTDIR%"
+ call "%IWMAKE_SCRIPTDIR%\batch\env.bat" removeglobals
+ popd
+goto :eof
+
+:FAILED
+ call :cleanup
+ echo Failed!
+goto END
+
+:DONE
+ call :cleanup
+ echo Done!
+goto END
+
+:END
diff --git a/tools/installer/nsis/confirmpage.ini b/tools/installer/nsis/confirmpage.ini
new file mode 100644
index 000000000..8790e83ea
--- /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 000000000..05c5952b1
--- /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 000000000..952516499
--- /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 000000000..080d82d11
--- /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 000000000..1333cb416
--- /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 000000000..4aefd2da4
--- /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 000000000..c12401801
--- /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 000000000..859b004e0
--- /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 000000000..c553f67e6
--- /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 000000000..72a52118d
--- /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 000000000..923209379
--- /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 000000000..f7cbec4ac
--- /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 000000000..c077850cc
--- /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 000000000..0f6013bc7
--- /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 000000000..84851781e
--- /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 000000000..3657ba879
--- /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 000000000..a335097be
--- /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 000000000..334dc5d14
--- /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
+