tools/installer/nsis/modules/mingw.nsh
changeset 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
     2 ;;
       
     3 ;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ;; All rights reserved.
       
     5 ;; Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 ;;
       
     7 ;; This file is part of the tools applications of the Qt Toolkit.
       
     8 ;;
       
     9 ;; $QT_BEGIN_LICENSE:LGPL$
       
    10 ;; No Commercial Usage
       
    11 ;; This file contains pre-release code and may not be distributed.
       
    12 ;; You may use this file in accordance with the terms and conditions
       
    13 ;; contained in the Technology Preview License Agreement accompanying
       
    14 ;; this package.
       
    15 ;;
       
    16 ;; GNU Lesser General Public License Usage
       
    17 ;; Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ;; General Public License version 2.1 as published by the Free Software
       
    19 ;; Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ;; packaging of this file.  Please review the following information to
       
    21 ;; ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 ;;
       
    24 ;; In addition, as a special exception, Nokia gives you certain additional
       
    25 ;; rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 ;;
       
    28 ;; If you have questions regarding the use of this file, please contact
       
    29 ;; Nokia at qt-info@nokia.com.
       
    30 ;;
       
    31 ;;
       
    32 ;;
       
    33 ;;
       
    34 ;;
       
    35 ;;
       
    36 ;;
       
    37 ;;
       
    38 ;; $QT_END_LICENSE$
       
    39 ;;
       
    40 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
    41 !ifdef MODULE_MINGW
       
    42 !macro MINGW_INITIALIZE
       
    43 !include "includes\qtcommon.nsh"
       
    44 !ifndef MODULE_MINGW_NAME
       
    45   !define MODULE_MINGW_NAME "Qt"
       
    46 !endif
       
    47 !ifndef MODULE_MINGW_VERSION
       
    48   !define MODULE_MINGW_VERSION "${PRODUCT_VERSION}"
       
    49 !endif
       
    50 !ifndef MODULE_MINGW_BUILDDIR
       
    51   !error "MODULE_MINGW_BUILDDIR not defined!"
       
    52 !endif
       
    53 !ifndef MODULE_MINGW_ROOT
       
    54   !error "MODULE_MINGW_ROOT not defined!"
       
    55 !endif
       
    56 !ifndef MODULE_MINGW_URL
       
    57   !define MODULE_MINGW_URL "ftp://ftp.qt.nokia.com/misc"
       
    58 !endif
       
    59 !ifndef MODULE_MINGW_COMPILERVERSION
       
    60   !define MODULE_MINGW_COMPILERVERSION "3.4.2"
       
    61 !endif
       
    62 !ifndef MODULE_MINGW_LICENSE
       
    63   !define MODULE_MINGW_LICENSE "C:\MinGW\COPYING"
       
    64 !endif
       
    65 
       
    66 !define MODULE_MINGW_DOWNLOADPAGE "gwdownload.ini"
       
    67 !define MODULE_MINGW_MIRRORPAGE "gwmirror.ini"
       
    68 !define MODULE_MINGW_RUNTIME_LIB "mingw*.dll"
       
    69 !define MODULE_MINGW_DOWNLOADFILE "MinGW-${MODULE_MINGW_COMPILERVERSION}"
       
    70 
       
    71 var MODULE_MINGW_DOWNLOAD
       
    72 var MODULE_MINGW_SOURCEDOWNLOAD
       
    73 var MODULE_MINGW_MIRRORS
       
    74 var MODULE_MINGW_INSTOK
       
    75 var MODULE_MINGW_COMPILERINSTDIR
       
    76 
       
    77 LangString ModuleMinGWTitle ${LANG_ENGLISH} "MinGW Installation"
       
    78 LangString ModuleMinGWDescription ${LANG_ENGLISH} "You need MinGW to be able to compile Qt applications."
       
    79 LangString ModuleMinGWMirrorTitle ${LANG_ENGLISH} "MinGW Download Mirror"
       
    80 LangString ModuleMinGWMirrorDescription ${LANG_ENGLISH} "Select a download mirror."
       
    81 
       
    82 Page custom ModuleMinGWDownloadPageEnter ModuleMinGWDownloadPageExit
       
    83 !define MUI_PAGE_CUSTOMFUNCTION_PRE ModuleMinGWLicensePageEnter
       
    84 !define MUI_PAGE_HEADER_TEXT "MinGW License Agreement"
       
    85 !define MUI_PAGE_HEADER_SUBTEXT "Please review the license terms before installing MinGW."
       
    86 !define MUI_LICENSEPAGE_TEXT_TOP "MinGW License Information"
       
    87 !insertmacro MUI_PAGE_LICENSE "${MODULE_MINGW_LICENSE}"
       
    88 Page custom ModuleMinGWMirrorPageEnter ModuleMinGWMirrorPageExit
       
    89 
       
    90 !include "includes\qtenv.nsh"
       
    91 !macroend
       
    92 
       
    93 !macro MINGW_SECTIONS
       
    94 Section "${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}" MINGW_SEC01
       
    95   strcmp "$MINGW_INSTDIR" "" 0 +5
       
    96     StrCpy $MINGW_INSTDIR "$INSTDIR\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}"
       
    97     push $MINGW_INSTDIR
       
    98     call MakeQtDirectory
       
    99     pop $MINGW_INSTDIR
       
   100 
       
   101   WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled" 1
       
   102   
       
   103   SetOutPath "$MINGW_INSTDIR"
       
   104   SetOverwrite ifnewer
       
   105   !insertmacro MODULE_MINGW_INSTALLFILES
       
   106   
       
   107   push "$MINGW_INSTDIR\bin"
       
   108   call AddStartmenuApplication
       
   109   
       
   110   push ${MODULE_MINGW_BUILDDIR}
       
   111   push "$MINGW_INSTDIR"
       
   112   call PatchPrlFiles
       
   113   
       
   114   IfFileExists "$MINGW_INSTDIR\.qmake.cache" 0 +5
       
   115   push "$MINGW_INSTDIR\.qmake.cache"
       
   116   push ${MODULE_MINGW_BUILDDIR}
       
   117   push $MINGW_INSTDIR
       
   118   call PatchPath
       
   119 
       
   120   IfFileExists "$MINGW_INSTDIR\mkspecs\default\qmake.conf" 0 +5
       
   121   push "$MINGW_INSTDIR\mkspecs\default\qmake.conf"
       
   122   push ${MODULE_MINGW_BUILDDIR}
       
   123   push $MINGW_INSTDIR
       
   124   call PatchPath
       
   125 
       
   126   push $MINGW_INSTDIR
       
   127   call PatchCommonBinaryFiles
       
   128   
       
   129   push $MINGW_INSTDIR
       
   130   call PatchLicenseInformation
       
   131 
       
   132   WriteRegStr SHCTX "SOFTWARE\Trolltech\Common\${MODULE_MINGW_VERSION}\$LICENSE_PRODUCT" "Key" "$LICENSE_KEY"
       
   133 
       
   134   push $MINGW_INSTDIR
       
   135   call ModuleMinGWMakeEnvFile
       
   136   CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} Command Prompt.lnk" "%COMSPEC%" '/k "$MINGW_INSTDIR\bin\qtvars.bat"'
       
   137   CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} (Build Debug Libraries).lnk" "%COMSPEC%" '/k "$MINGW_INSTDIR\bin\qtvars.bat compile_debug"'
       
   138 
       
   139   push $0
       
   140   strcmp $MODULE_MINGW_DOWNLOAD "no" DoneMinGWInstall
       
   141     DetailPrint "Installing MinGW into $MODULE_MINGW_COMPILERINSTDIR"
       
   142     WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWInstDir" "$MODULE_MINGW_COMPILERINSTDIR"
       
   143     nsExec::ExecToLog '"$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" /S /D=$MODULE_MINGW_COMPILERINSTDIR'
       
   144     pop $0
       
   145   strcmp $MODULE_MINGW_SOURCEDOWNLOAD "no" DoneMinGWInstall
       
   146     DetailPrint "Installing MinGW sources into $MODULE_MINGW_COMPILERINSTDIR\src"
       
   147     WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWSources" 1
       
   148     nsExec::ExecToLog '"$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe" /S /D=$MODULE_MINGW_COMPILERINSTDIR\src'
       
   149     pop $0
       
   150   DoneMinGWInstall:
       
   151   pop $0
       
   152 
       
   153   DetailPrint "Copying MinGW runtime..."
       
   154   SetDetailsPrint none
       
   155   CopyFiles /SILENT "$MODULE_MINGW_COMPILERINSTDIR\bin\${MODULE_MINGW_RUNTIME_LIB}" "$MINGW_INSTDIR\bin"
       
   156   SetDetailsPrint both
       
   157 SectionEnd
       
   158 
       
   159 Function EnableButtons
       
   160   Push $0
       
   161   GetDlgItem $0 $HWNDPARENT 3
       
   162   EnableWindow $0 1
       
   163   GetDlgItem $0 $HWNDPARENT 1
       
   164   EnableWindow $0 1
       
   165   GetDlgItem $0 $HWNDPARENT 2
       
   166   EnableWindow $0 1
       
   167   Pop $0
       
   168 FunctionEnd
       
   169 
       
   170 Function DisableButtons
       
   171   Push $0
       
   172   GetDlgItem $0 $HWNDPARENT 3
       
   173   EnableWindow $0 0
       
   174   GetDlgItem $0 $HWNDPARENT 1
       
   175   EnableWindow $0 0
       
   176   GetDlgItem $0 $HWNDPARENT 2
       
   177   EnableWindow $0 0
       
   178   Pop $0
       
   179 FunctionEnd
       
   180 
       
   181 Function ModuleMinGWDownloadPageEnter
       
   182   strcmp $MODULE_MINGW_INSTOK "yes" 0 +2
       
   183   Abort
       
   184 
       
   185   !insertmacro MUI_HEADER_TEXT "$(ModuleMinGWTitle)" "$(ModuleMinGWTitleDescription)"
       
   186   Call UpdateCtrlStates
       
   187   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_MINGW_DOWNLOADPAGE}"
       
   188   !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State" "0"
       
   189 FunctionEnd
       
   190 
       
   191 Function ModuleMinGWMirrorPageEnter
       
   192   strcmp $MODULE_MINGW_DOWNLOAD "yes" +2
       
   193   Abort
       
   194 
       
   195   !insertmacro MUI_HEADER_TEXT "$(ModuleMinGWMirrorTitle)" "$(ModuleMinGWMirrorDescription)"
       
   196   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_MINGW_MIRRORPAGE}"
       
   197 FunctionEnd
       
   198 
       
   199 Function ModuleMinGWLicensePageEnter
       
   200   strcmp $MODULE_MINGW_DOWNLOAD "yes" +2
       
   201   Abort
       
   202 FunctionEnd
       
   203 
       
   204 Function UpdateCtrlStates
       
   205   push $0
       
   206   push $1
       
   207   push $2
       
   208 
       
   209   !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State"
       
   210   intop $0 $0 !
       
   211   FindWindow $2 "#32770" "" $HWNDPARENT
       
   212   GetDlgItem $1 $2 1205
       
   213   EnableWindow $1 $0
       
   214   GetDlgItem $1 $2 1202
       
   215   EnableWindow $1 $0
       
   216   GetDlgItem $1 $2 1203
       
   217   EnableWindow $1 $0
       
   218 
       
   219   intop $0 $0 !
       
   220   GetDlgItem $1 $2 1206
       
   221   EnableWindow $1 $0
       
   222   GetDlgItem $1 $2 1207
       
   223   EnableWindow $1 $0
       
   224   GetDlgItem $1 $2 1208
       
   225   EnableWindow $1 $0
       
   226 
       
   227   GetDlgItem $1 $HWNDPARENT 1
       
   228   IntCmp $0 0 +3
       
   229     SendMessage $1 ${WM_SETTEXT} 0 "STR:Next >"
       
   230   Goto +2
       
   231     SendMessage $1 ${WM_SETTEXT} 0 "STR:Install"
       
   232       
       
   233   pop $2
       
   234   pop $1
       
   235   pop $0
       
   236 FunctionEnd
       
   237 
       
   238 Function ModuleMinGWDownloadPageExit
       
   239   push $0
       
   240   push $1
       
   241   
       
   242   !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Settings" "State"
       
   243   strcmp "$0" "8" 0 NoNotify
       
   244     Call UpdateCtrlStates
       
   245     abort
       
   246   NoNotify:
       
   247 
       
   248   !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State"
       
   249   strcmp "$0" "0" noDownload doDownload
       
   250 
       
   251 doDownload:
       
   252   !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 6" "State"
       
   253   strcmp $0 "" 0 +3
       
   254     MessageBox MB_ICONEXCLAMATION|MB_OK "You need to specify an installation directory!"
       
   255     goto tryAgain
       
   256 
       
   257   strcpy $MODULE_MINGW_COMPILERINSTDIR $0
       
   258   strcpy $MODULE_MINGW_DOWNLOAD "yes"
       
   259   CreateDirectory "$MINGW_INSTDIR\downloads"
       
   260   
       
   261   Call DisableButtons
       
   262   InetLoad::load /BANNER "Mirror Download" "Downloading mirrors from server..." "${MODULE_MINGW_URL}/${MODULE_MINGW_DOWNLOADFILE}.mirrors" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" /END
       
   263   Pop $1 ;Get the return value
       
   264   Call EnableButtons
       
   265 
       
   266   StrCmp $1 "OK" +3
       
   267     MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "Was not able to download mirror list ($1)." IDRETRY tryAgain 0
       
   268     Quit
       
   269 
       
   270   call ModuleMinGWReadMirrors
       
   271   !insertmacro MUI_INSTALLOPTIONS_WRITE ${MODULE_MINGW_MIRRORPAGE} "Field 3" "ListItems" "$MODULE_MINGW_MIRRORS"
       
   272   goto done
       
   273 
       
   274 noDownload:
       
   275   strcpy $MODULE_MINGW_DOWNLOAD "no"
       
   276   strcpy $MODULE_MINGW_SOURCEDOWNLOAD "no"
       
   277   call ModuleMinGWChecking
       
   278   strcmp $MODULE_MINGW_INSTOK "yes" done
       
   279   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
       
   280   goto done
       
   281 
       
   282 tryAgain:
       
   283   pop $1
       
   284   pop $0
       
   285   Abort
       
   286 
       
   287 done:
       
   288   pop $1
       
   289   pop $0
       
   290 FunctionEnd
       
   291 
       
   292 Function ModuleMinGWMirrorPageExit
       
   293   push $0
       
   294   push $2
       
   295   push $1
       
   296 
       
   297   !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_MIRRORPAGE}" "Field 3" "State"
       
   298   strcmp "$0" "" 0 +3
       
   299     MessageBox MB_ICONEXCLAMATION|MB_OK "You must select a mirror to download from!"
       
   300     goto tryAgain
       
   301 
       
   302   push $0
       
   303   call ModuleMinGWGetMirror
       
   304   pop $0
       
   305 
       
   306   Call DisableButtons
       
   307   InetLoad::load /BANNER "MinGW Download" "Downloading MinGW from server..." "$0/${MODULE_MINGW_DOWNLOADFILE}.exe" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" /END
       
   308   Pop $2 ;get the return value
       
   309   Call EnableButtons
       
   310 
       
   311   StrCmp $2 "OK" +3
       
   312     MessageBox MB_ICONEXCLAMATION|MB_OK "Was not able to download MinGW ($2). Please try another mirror."
       
   313     Goto tryAgain
       
   314 
       
   315   !insertmacro MUI_INSTALLOPTIONS_READ $1 "${MODULE_MINGW_MIRRORPAGE}" "Field 2" "State"
       
   316   strcmp "$1" "0" done
       
   317 
       
   318   Call DisableButtons
       
   319   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
       
   320   Pop $2
       
   321   Call EnableButtons
       
   322 
       
   323   strcpy $MODULE_MINGW_SOURCEDOWNLOAD "yes"
       
   324 
       
   325   StrCmp $2 "OK" +3
       
   326     MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "Was not able to download MinGW sources ($2). Please try another mirror?" IDRETRY tryAgain 0
       
   327     Quit
       
   328 
       
   329   goto done
       
   330 
       
   331 tryAgain:
       
   332   pop $1
       
   333   pop $2
       
   334   pop $0
       
   335   Abort
       
   336 
       
   337 done:
       
   338   pop $1
       
   339   pop $2
       
   340   pop $0
       
   341 FunctionEnd
       
   342 
       
   343 Function ModuleMinGWReadMirrors
       
   344   push $0 ;file handle
       
   345   push $1 ;line
       
   346 
       
   347   ClearErrors
       
   348   FileOpen $0 "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" r
       
   349   IfErrors done
       
   350 
       
   351   strcpy $MODULE_MINGW_MIRRORS ""
       
   352 
       
   353 nextline:
       
   354   FileRead $0 $1
       
   355   IfErrors done
       
   356   push $1
       
   357   call ModuleMinGWRemoveNewLine
       
   358   pop $1
       
   359   strcpy $MODULE_MINGW_MIRRORS "$MODULE_MINGW_MIRRORS|$1"
       
   360   FileRead $0 $1 ;Jump over next line
       
   361   IfErrors done
       
   362   goto nextline
       
   363 
       
   364 done:
       
   365   FileClose $0
       
   366   strlen $1 $MODULE_MINGW_MIRRORS
       
   367   intcmp $1 0 failed failed cleanup
       
   368 
       
   369 failed:
       
   370   MessageBox MB_ICONSTOP|MB_OK "Unable to parse mirror list, exiting!"
       
   371   Quit
       
   372 
       
   373 cleanup:
       
   374   pop $1
       
   375   pop $0
       
   376 FunctionEnd
       
   377 
       
   378 #this just removes the last two chars
       
   379 Function ModuleMinGWRemoveNewLine
       
   380 exch $0
       
   381 push $1
       
   382 push $2
       
   383 
       
   384 strlen $1 $0
       
   385 intop $1 $1 - 1
       
   386 strcpy $2 $0 1 $1 ;get last char
       
   387 
       
   388 strcmp "$2" "$\n" 0 +2
       
   389 intop $1 $1 - 1
       
   390 
       
   391 strcpy $2 $0 1 $1 ;get last char
       
   392 strcmp "$2" "$\r" 0 +2
       
   393 intop $1 $1 - 1
       
   394 
       
   395 intop $1 $1 + 1
       
   396 strcpy $0 $0 $1
       
   397 
       
   398 pop $2
       
   399 pop $1
       
   400 exch $0
       
   401 FunctionEnd
       
   402 
       
   403 #push serverid
       
   404 #call GetMirror
       
   405 #pop server
       
   406 Function ModuleMinGWGetMirror
       
   407   exch $1 ;id
       
   408   push $0 ;file handle
       
   409   push $2 ;line
       
   410   push $3 ;tmp
       
   411 
       
   412   strcpy $3 ""
       
   413 
       
   414   ClearErrors
       
   415   FileOpen $0 "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" r
       
   416   IfErrors done
       
   417 
       
   418 nextline:
       
   419   FileRead $0 $2
       
   420   IfErrors done
       
   421   push $2
       
   422   call ModuleMinGWRemoveNewLine
       
   423   pop $2
       
   424   strcmp $1 $2 0 nextline
       
   425   FileRead $0 $3
       
   426   IfErrors done
       
   427   push $3
       
   428   call ModuleMinGWRemoveNewLine
       
   429   pop $3
       
   430 
       
   431 done:
       
   432   strcpy $1 $3
       
   433   FileClose $0
       
   434   strlen $2 $1
       
   435   intcmp $2 0 failed failed cleanup
       
   436 
       
   437 failed:
       
   438   MessageBox MB_ICONSTOP|MB_OK "Unable to parse mirror list, exiting!"
       
   439   Quit
       
   440 
       
   441 cleanup:
       
   442   pop $3
       
   443   pop $2
       
   444   pop $0
       
   445   exch $1
       
   446 FunctionEnd
       
   447 
       
   448 Function ModuleMinGWChecking
       
   449   push $0
       
   450 
       
   451   ### update with plugin
       
   452   strcpy $MODULE_MINGW_INSTOK "yes"
       
   453   strcpy $MODULE_MINGW_COMPILERINSTDIR "C:\MinGW" ;fallback dir
       
   454 
       
   455   !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 3" "State"
       
   456   strcmp "$0" "" +2
       
   457     strcpy $MODULE_MINGW_COMPILERINSTDIR $0
       
   458 
       
   459   IfFileExists "$MODULE_MINGW_COMPILERINSTDIR\bin\g++.exe" +3 0
       
   460     strcpy $MODULE_MINGW_INSTOK "g++ not found in $MODULE_MINGW_COMPILERINSTDIR\bin\"
       
   461     goto DoneChecking
       
   462 
       
   463 !ifndef OPENSOURCE_BUILD
       
   464   ; check w32api.h
       
   465   push $MODULE_MINGW_COMPILERINSTDIR
       
   466   qtnsisext::HasValidWin32Library
       
   467   pop $0
       
   468   strcmp "$0" "1" +3 0
       
   469     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)"
       
   470     goto DoneChecking
       
   471 
       
   472   ; check version
       
   473   push $MODULE_MINGW_COMPILERINSTDIR
       
   474   qtnsisext::GetMinGWVersion
       
   475   pop $0
       
   476   strcmp "$0" "${MODULE_MINGW_COMPILERVERSION}" +3 0
       
   477     strcpy $MODULE_MINGW_INSTOK "g++ version found does not match ${MODULE_MINGW_COMPILERVERSION} (Found version $0)."
       
   478     goto DoneChecking
       
   479 !endif    
       
   480 
       
   481 DoneChecking:
       
   482   pop $0
       
   483 FunctionEnd
       
   484 
       
   485 #
       
   486 # creates a qtvars.bat file in $QTDIR\bin
       
   487 # push "c:\qt"  #QTDIR
       
   488 # call MakeQtVarsFile
       
   489 #
       
   490 Function ModuleMinGWMakeEnvFile
       
   491   push $0 ; file handle
       
   492 
       
   493   ClearErrors
       
   494   FileOpen $0 "$MINGW_INSTDIR\bin\qtvars.bat" w
       
   495   IfErrors WriteMakeFile
       
   496   FileWrite $0 "@echo off$\r$\n"
       
   497   FileWrite $0 "rem$\r$\n"
       
   498   FileWrite $0 "rem This file is generated$\r$\n"
       
   499   FileWrite $0 "rem$\r$\n"
       
   500   FileWrite $0 "$\r$\n"
       
   501   FileWrite $0 "echo Setting up a MinGW/Qt only environment...$\r$\n"
       
   502   FileWrite $0 "echo -- QTDIR set to $MINGW_INSTDIR$\r$\n"
       
   503   FileWrite $0 "echo -- PATH set to $MINGW_INSTDIR\bin$\r$\n"
       
   504   FileWrite $0 "echo -- Adding $MODULE_MINGW_COMPILERINSTDIR\bin to PATH$\r$\n"
       
   505   FileWrite $0 "echo -- Adding %SystemRoot%\System32 to PATH$\r$\n"
       
   506   FileWrite $0 "echo -- QMAKESPEC set to win32-g++$\r$\n"
       
   507   FileWrite $0 "$\r$\n"
       
   508   FileWrite $0 "set QTDIR=$MINGW_INSTDIR$\r$\n"
       
   509   FileWrite $0 "set PATH=$MINGW_INSTDIR\bin$\r$\n"
       
   510   FileWrite $0 "set PATH=%PATH%;$MODULE_MINGW_COMPILERINSTDIR\bin$\r$\n"
       
   511   FileWrite $0 "set PATH=%PATH%;%SystemRoot%\System32$\r$\n"
       
   512   FileWrite $0 "set QMAKESPEC=win32-g++$\r$\n"
       
   513   FileWrite $0 "$\r$\n"
       
   514   
       
   515   FileWrite $0 'if not "%1"=="compile_debug" goto END$\r$\n'
       
   516   FileWrite $0 "cd %QTDIR%$\r$\n"
       
   517   FileWrite $0 "echo This will configure and compile qt in debug.$\r$\n"
       
   518   FileWrite $0 "echo The release libraries will not be recompiled.$\r$\n"
       
   519   FileWrite $0 "pause$\r$\n"
       
   520   FileWrite $0 "configure -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg$\r$\n"
       
   521   FileWrite $0 "cd %QTDIR%\src$\r$\n"
       
   522   FileWrite $0 "qmake$\r$\n"
       
   523   FileWrite $0 "mingw32-make debug$\r$\n"
       
   524   FileWrite $0 ":END$\r$\n"
       
   525   FileClose $0
       
   526 
       
   527 WriteMakeFile:
       
   528   ClearErrors
       
   529   FileOpen $0 "$MINGW_INSTDIR\bin\make.bat" w
       
   530   IfErrors done
       
   531   FileWrite $0 "@echo off$\r$\n"
       
   532   FileWrite $0 "mingw32-make %*$\r$\n"
       
   533   FileClose $0
       
   534 
       
   535 done:
       
   536 ;  pop $1
       
   537   pop $0
       
   538 FunctionEnd
       
   539 
       
   540 Function MINGW_ValidateDirectoryFunc
       
   541   push "${MODULE_MINGW_BUILDDIR}"
       
   542   push $MINGW_INSTDIR
       
   543   call CommonCheckDirectory
       
   544 FunctionEnd
       
   545 !macroend
       
   546 
       
   547 !macro MINGW_DESCRIPTION
       
   548   !insertmacro MUI_DESCRIPTION_TEXT ${MINGW_SEC01} "This installs ${MODULE_MINGW_NAME} version ${MODULE_MINGW_VERSION} on your system."
       
   549 !macroend
       
   550 
       
   551 !macro MINGW_STARTUP
       
   552   !ifndef MODULE_MINGW_NODEFAULT
       
   553     SectionSetFlags ${MINGW_SEC01} 17
       
   554   !endif
       
   555   strcpy $MINGW_INSTDIR "C:\Qt\${MODULE_MINGW_VERSION}"
       
   556   push $MINGW_INSTDIR
       
   557   call MakeQtDirectory
       
   558   pop $MINGW_INSTDIR
       
   559   
       
   560   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_MINGW_DOWNLOADPAGE}"
       
   561   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_MINGW_MIRRORPAGE}"
       
   562 
       
   563   !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 3" "State" "C:\MinGW"
       
   564   !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 6" "State" "C:\MinGW"
       
   565 
       
   566   strcpy $MODULE_MINGW_DOWNLOAD "no"
       
   567   strcpy $MODULE_MINGW_SOURCEDOWNLOAD "no"
       
   568 !macroend
       
   569 
       
   570 !macro MINGW_FINISH
       
   571 !macroend
       
   572 
       
   573 !macro MINGW_RUN_FUNCTION
       
   574   ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled"
       
   575   intcmp $0 1 0 DoneRunFunctionMINGW
       
   576 
       
   577   IfFileExists "$MINGW_INSTDIR\bin\qtdemo.exe" 0 +2
       
   578     Exec '$MINGW_INSTDIR\bin\qtdemo.exe'
       
   579   goto DoneRunFunction ;don't run more applications
       
   580   
       
   581   DoneRunFunctionMINGW:
       
   582 !macroend
       
   583 
       
   584 !macro MINGW_README_FUNCTION
       
   585   ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled"
       
   586   intcmp $0 1 0 DoneReadmeFunctionMINGW
       
   587 
       
   588   IfFileExists "$MINGW_INSTDIR\bin\assistant.exe" 0 +2
       
   589     Exec '$MINGW_INSTDIR\bin\assistant.exe'
       
   590   goto DoneReadmeFunction ;don't run more applications
       
   591 
       
   592   DoneReadmeFunctionMINGW:
       
   593 !macroend
       
   594 
       
   595 !macro MINGW_UNSTARTUP
       
   596   strcmp "$MINGW_INSTDIR" "" 0 +5
       
   597     StrCpy $MINGW_INSTDIR "$INSTDIR\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}"
       
   598     push $MINGW_INSTDIR
       
   599     call un.MakeQtDirectory
       
   600     pop $MINGW_INSTDIR
       
   601 
       
   602   !insertmacro ConfirmOnRemove "MINGWInstalled" "- ${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} in $MINGW_INSTDIR"
       
   603 !macroend
       
   604 
       
   605 !macro MINGW_UNINSTALL
       
   606 Section un.ModuleMinGW
       
   607   push $0
       
   608   push $1
       
   609   
       
   610   ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled"
       
   611   intcmp $0 1 0 DoneUnInstallMINGW
       
   612 
       
   613   Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors"
       
   614   
       
   615   ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWSources"
       
   616   strcmp $0 "" MinGWSourcesUninstallDone ;not installed
       
   617   Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe"
       
   618   nsExec::ExecToLog '"$0\src\uninst.exe"'
       
   619   pop $1
       
   620   MinGWSourcesUninstallDone:
       
   621 
       
   622   ReadRegStr $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWInstDir"
       
   623   strcmp $0 "" MinGWUninstallDone ;not installed
       
   624   Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe"
       
   625   nsExec::ExecToLog '"$0\uninst.exe"'
       
   626   pop $1
       
   627   MinGWUninstallDone:
       
   628 
       
   629   DetailPrint "Removing start menu shortcuts"
       
   630   call un.RemoveStartmenuApplication
       
   631   Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} Command Prompt.lnk"
       
   632   Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} (Build Debug Libraries).lnk"
       
   633 
       
   634   Delete "$MINGW_INSTDIR\bin\${MODULE_MINGW_RUNTIME_LIB}"
       
   635   Delete "$MINGW_INSTDIR\bin\make.bat"
       
   636   Delete "$MINGW_INSTDIR\bin\qtvars.bat"
       
   637 
       
   638   !insertmacro MODULE_MINGW_REMOVE "$MINGW_INSTDIR"
       
   639   RMDir $MINGW_INSTDIR ;removes it if empty
       
   640 
       
   641   DoneUnInstallMINGW:
       
   642   pop $1
       
   643   pop $0
       
   644 SectionEnd
       
   645 !macroend
       
   646 !macro MINGW_UNFINISH
       
   647 !macroend
       
   648 !else ;MODULE_MINGW
       
   649 !macro MINGW_INITIALIZE
       
   650 !macroend
       
   651 !macro MINGW_SECTIONS
       
   652 !macroend
       
   653 !macro MINGW_DESCRIPTION
       
   654 !macroend
       
   655 !macro MINGW_STARTUP
       
   656 !macroend
       
   657 !macro MINGW_FINISH
       
   658 !macroend
       
   659 !macro MINGW_RUN_FUNCTION
       
   660 !macroend
       
   661 !macro MINGW_README_FUNCTION
       
   662 !macroend
       
   663 !macro MINGW_UNSTARTUP
       
   664 !macroend
       
   665 !macro MINGW_UNINSTALL
       
   666 !macroend
       
   667 !macro MINGW_UNFINISH
       
   668 !macroend
       
   669 !endif ;MODULE_MINGW
       
   670