* use blender_decimal_version() in places where '.blender/' was still being used
[blender.git] / release / windows / installer / 1100.sconsblender.nsi
1 ;\r
2 ; $Id: 00.sconsblender.nsi 14503 2008-04-21 15:53:32Z aphex $\r
3 ;\r
4 ; Blender Self-Installer for Windows (NSIS - http://nsis.sourceforge.net)\r
5 ;\r
6 ; Requires the MoreInfo plugin - http://nsis.sourceforge.net/MoreInfo_plug-in\r
7 ;\r
8 \r
9 !include "MUI.nsh"\r
10 !include "WinVer.nsh"\r
11 !include "FileFunc.nsh"\r
12 !include "WordFunc.nsh"\r
13 !include "nsDialogs.nsh"\r
14 \r
15 SetCompressor /SOLID lzma\r
16 \r
17 Name "Blender VERSION" \r
18 \r
19 !define MUI_ABORTWARNING\r
20 \r
21 !define MUI_WELCOMEPAGE_TEXT  "This wizard will guide you through the installation of Blender.\r\n\r\nIt is recommended that you close all other applications before starting Setup.\r\n\r\nNote to Win2k/XP users: You may require administrator privileges to install Blender successfully."\r
22 !define MUI_WELCOMEFINISHPAGE_BITMAP "RELDIR\01.installer.bmp"\r
23 !define MUI_HEADERIMAGE\r
24 !define MUI_HEADERIMAGE_BITMAP  "RELDIR\00.header.bmp"\r
25 !define MUI_COMPONENTSPAGE_SMALLDESC\r
26 !define MUI_FINISHPAGE_RUN "$INSTDIR\blender.exe"\r
27 !define MUI_CHECKBITMAP "RELDIR\00.checked.bmp"\r
28 \r
29 !insertmacro MUI_PAGE_WELCOME\r
30 !insertmacro MUI_PAGE_LICENSE "DISTDIR\Copyright.txt"\r
31 !insertmacro MUI_PAGE_COMPONENTS\r
32     \r
33 !insertmacro MUI_PAGE_DIRECTORY\r
34 Page custom DataLocation DataLocationOnLeave\r
35 Page custom AppDataChoice AppDataChoiceOnLeave\r
36 Page custom PreMigrateUserSettings MigrateUserSettings\r
37 !insertmacro MUI_PAGE_INSTFILES\r
38 !insertmacro MUI_PAGE_FINISH\r
39   \r
40 !insertmacro MUI_UNPAGE_WELCOME\r
41 !insertmacro MUI_UNPAGE_CONFIRM\r
42 !insertmacro MUI_UNPAGE_INSTFILES\r
43 !insertmacro MUI_UNPAGE_FINISH\r
44 \r
45 !insertmacro Locate\r
46 !insertmacro VersionCompare\r
47 \r
48 \r
49 Icon "RELDIR\00.installer.ico"\r
50 UninstallIcon "RELDIR\00.installer.ico"\r
51 \r
52 ;--------------------------------\r
53 ;Languages\r
54  \r
55   !insertmacro MUI_LANGUAGE "English"\r
56     \r
57 ;--------------------------------\r
58 ;Language Strings\r
59 \r
60   ;Description\r
61   LangString DESC_SecCopyUI ${LANG_ENGLISH} "Copy all required files to the application folder."\r
62   LangString DESC_Section2 ${LANG_ENGLISH} "Add shortcut items to the Start Menu. (Recommended)"\r
63   LangString DESC_Section3 ${LANG_ENGLISH} "Add a shortcut to Blender on your desktop."\r
64   LangString DESC_Section4 ${LANG_ENGLISH} "Blender can register itself with .blend files to allow double-clicking from Windows Explorer, etc."\r
65   LangString TEXT_IO_TITLE ${LANG_ENGLISH} "Specify User Data Location"\r
66 ;--------------------------------\r
67 ;Data\r
68 \r
69 Caption "Blender VERSION Installer"\r
70 OutFile "DISTDIR\..\blender-VERSION-windows.exe"\r
71 InstallDir "$PROGRAMFILES\Blender Foundation\Blender"\r
72 \r
73 BrandingText "http://www.blender.org"\r
74 ComponentText "This will install Blender VERSION on your computer."\r
75 \r
76 DirText "Use the field below to specify the folder where you want Blender to be copied to. To specify a different folder, type a new name or use the Browse button to select an existing folder."\r
77 \r
78 SilentUnInstall normal\r
79 \r
80 # Uses $0\r
81 Function openLinkNewWindow\r
82   Push $3 \r
83   Push $2\r
84   Push $1\r
85   Push $0\r
86   ReadRegStr $0 HKCR "http\shell\open\command" ""\r
87 # Get browser path\r
88     DetailPrint $0\r
89   StrCpy $2 '"'\r
90   StrCpy $1 $0 1\r
91   StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char\r
92     StrCpy $2 ' '\r
93   StrCpy $3 1\r
94   loop:\r
95     StrCpy $1 $0 1 $3\r
96     DetailPrint $1\r
97     StrCmp $1 $2 found\r
98     StrCmp $1 "" found\r
99     IntOp $3 $3 + 1\r
100     Goto loop\r
101  \r
102   found:\r
103     StrCpy $1 $0 $3\r
104     StrCmp $2 " " +2\r
105       StrCpy $1 '$1"'\r
106  \r
107   Pop $0\r
108   Exec '$1 $0'\r
109   Pop $1\r
110   Pop $2\r
111   Pop $3\r
112 FunctionEnd\r
113 \r
114 Var BLENDERHOME\r
115 Var DLL_found\r
116 Var PREVHOME\r
117 \r
118 Function SetWinXPPathCurrentUser\r
119   SetShellVarContext current\r
120   StrCpy $BLENDERHOME "$APPDATA\Blender Foundation\Blender"\r
121 FunctionEnd\r
122 \r
123 Function SetWinXPPathAllUsers\r
124   SetShellVarContext all\r
125   StrCpy $BLENDERHOME "$APPDATA\Blender Foundation\Blender"\r
126 FunctionEnd\r
127 \r
128 Function SetWin9xPath\r
129   StrCpy $BLENDERHOME $INSTDIR\r
130 FunctionEnd\r
131 \r
132 ; custom controls\r
133 Var HWND\r
134 \r
135 Var HWND_APPDATA\r
136 Var HWND_INSTDIR\r
137 Var HWND_HOMEDIR\r
138 \r
139 Var HWND_BUTTON_YES\r
140 Var HWND_BUTTON_NO\r
141 \r
142 Var SETUSERCONTEXT\r
143 \r
144 Function PreMigrateUserSettings\r
145   StrCpy $PREVHOME "$PROFILE\Application Data\Blender Foundation\Blender"\r
146   StrCpy $0 "$PROFILE\Application Data\Blender Foundation\Blender\.blender"\r
147   \r
148   IfFileExists $0 0 nochange\r
149   \r
150   StrCmp $BLENDERHOME $PREVHOME nochange\r
151   \r
152   nsDialogs::Create /NOUNLOAD 1018\r
153   Pop $HWND\r
154   \r
155   ${If} $HWND == error\r
156         Abort\r
157   ${EndIf}\r
158   \r
159   ${NSD_CreateLabel} 0 0 100% 12u "You have existing settings at:"\r
160   ${NSD_CreateLabel} 0 20 100% 12u $PREVHOME\r
161   ${NSD_CreateLabel} 0 40 100% 12u "Do you wish to migrate this data to:"\r
162   ${NSD_CreateLabel} 0 60 100% 12u $BLENDERHOME\r
163   ${NSD_CreateLabel} 0 80 100% 12u "Please note: If you choose no, Blender will not be able to use these files!"\r
164   ${NSD_CreateRadioButton} 0 100 100% 12u "Yes"\r
165   Pop $HWND_BUTTON_YES\r
166   ${NSD_CreateRadioButton} 0 120 100% 12u "No"\r
167   Pop $HWND_BUTTON_NO\r
168   \r
169   SendMessage $HWND_BUTTON_YES ${BM_SETCHECK} 1 0\r
170   \r
171   nsDialogs::Show\r
172   nochange:\r
173   \r
174 FunctionEnd\r
175 \r
176 Function MigrateUserSettings\r
177   ${NSD_GetState} $HWND_BUTTON_YES $R0\r
178   ${If} $R0 == "1"\r
179     CreateDirectory $BLENDERHOME\r
180     CopyFiles $PREVHOME\*.* $BLENDERHOME\r
181     ;RMDir /r $PREVHOME\r
182   ${EndIf}  \r
183 FunctionEnd\r
184 \r
185 !define DLL_VER "8.00.50727.42"\r
186 !define DLL_VER2 "7.10.3052.4"\r
187 \r
188 Function LocateCallback_80\r
189         MoreInfo::GetProductVersion "$R9"\r
190         Pop $0\r
191 \r
192         ${VersionCompare} "$0" "${DLL_VER}" $R1\r
193 \r
194         StrCmp $R1 0 0 new\r
195       new:\r
196         StrCmp $R1 1 0 old\r
197       old:\r
198         StrCmp $R1 2 0 end\r
199         ; Found DLL is older\r
200         Call DownloadDLL\r
201 \r
202      end:\r
203         StrCpy "$0" StopLocate\r
204         StrCpy $DLL_found "true"\r
205         Push "$0"\r
206 \r
207 FunctionEnd\r
208 \r
209 Function LocateCallback_71\r
210         MoreInfo::GetProductVersion "$R9"\r
211         Pop $0\r
212 \r
213         ${VersionCompare} "$0" "${DLL_VER2}" $R1\r
214 \r
215         StrCmp $R1 0 0 new\r
216       new:\r
217         StrCmp $R1 1 0 old\r
218       old:\r
219         StrCmp $R1 2 0 end\r
220         ; Found DLL is older\r
221         Call PythonInstall\r
222 \r
223      end:\r
224         StrCpy "$0" StopLocate\r
225         StrCpy $DLL_found "true"\r
226         Push "$0"\r
227 \r
228 FunctionEnd\r
229 \r
230 Function DownloadDLL\r
231     MessageBox MB_OK "You will need to download the Microsoft Visual C++ 2005 Redistributable Package in order to run Blender. Pressing OK will take you to the download page, please follow the instructions on the page that appears."\r
232     StrCpy $0 "http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en"\r
233     Call openLinkNewWindow\r
234 FunctionEnd\r
235 \r
236 Function PythonInstall\r
237     MessageBox MB_OK "You will need to install python 2.5 in order to run blender. Pressing OK will take you to the python.org website."\r
238     StrCpy $0 "http://www.python.org"\r
239     Call openLinkNewWindow\r
240 FunctionEnd\r
241 \r
242 Function DataLocation\r
243   nsDialogs::Create /NOUNLOAD 1018\r
244   Pop $HWND\r
245   \r
246   ${If} $HWND == error\r
247     Abort\r
248   ${EndIf}\r
249   \r
250   ${NSD_CreateLabel} 0 0 100% 12u "Please specify where you wish to install Blender's user data files."\r
251   ${NSD_CreateRadioButton} 0 20 100% 12u "Use the Application Data directory (Requires Windows 2000 or better)"\r
252   Pop $HWND_APPDATA\r
253   ${NSD_CreateRadioButton} 0 50 100% 12u "Use the installation directory (ie. location chosen to install blender.exe)."\r
254   Pop $HWND_INSTDIR\r
255   ${NSD_CreateRadioButton} 0 80 100% 12u "I have defined a %HOME% variable, please install files here."\r
256   Pop $HWND_HOMEDIR\r
257   \r
258   ${If} ${AtMostWinME}\r
259     GetDlgItem $0 $HWND $HWND_APPDATA\r
260     EnableWindow $0 0\r
261     SendMessage $HWND_INSTDIR ${BM_SETCHECK} 1 0\r
262   ${Else}\r
263     SendMessage $HWND_APPDATA ${BM_SETCHECK} 1 0\r
264   ${EndIf}\r
265   \r
266   nsDialogs::Show\r
267   \r
268 FunctionEnd\r
269 \r
270 Function DataLocationOnLeave\r
271         StrCpy $SETUSERCONTEXT "false"\r
272         ${NSD_GetState} $HWND_APPDATA $R0\r
273         ${If} $R0 == "1"\r
274           StrCpy $SETUSERCONTEXT "true"\r
275         ${Else}\r
276           ${NSD_GetState} $HWND_INSTDIR $R0\r
277           ${If} $R0 == "1"\r
278             Call SetWin9xPath\r
279           ${Else}\r
280             ${NSD_GetState} $HWND_HOMEDIR $R0\r
281             ${If} $R0 == "1"\r
282               ReadEnvStr $BLENDERHOME "HOME"\r
283             ${EndIf}\r
284           ${EndIf}\r
285         ${EndIf}\r
286 FunctionEnd\r
287 \r
288 Var HWND_APPDATA_CURRENT\r
289 Var HWND_APPDATA_ALLUSERS\r
290 \r
291 Function AppDataChoice\r
292   StrCmp $SETUSERCONTEXT "false" skip\r
293   \r
294   nsDialogs::Create /NOUNLOAD 1018\r
295   Pop $HWND\r
296   \r
297   ${NSD_CreateLabel} 0 0 100% 12u "Please choose which Application Data directory to use."\r
298   ${NSD_CreateRadioButton} 0 40 100% 12u "Current User"\r
299   Pop $HWND_APPDATA_CURRENT\r
300   ${NSD_CreateRadioButton} 0 70 100% 12u "All Users"\r
301   Pop $HWND_APPDATA_ALLUSERS\r
302   \r
303   SendMessage $HWND_APPDATA_CURRENT ${BM_SETCHECK} 1 0\r
304   \r
305   StrCmp $SETUSERCONTEXT "true" 0 skip ; show dialog if we need to set context, otherwise skip it\r
306   nsDialogs::Show\r
307   \r
308 skip:\r
309 \r
310 FunctionEnd\r
311 \r
312 Function AppDataChoiceOnLeave\r
313         StrCmp $SETUSERCONTEXT "false" skip\r
314         ${NSD_GetState} $HWND_APPDATA_CURRENT $R0\r
315         ${If} $R0 == "1"\r
316            Call SetWinXPPathCurrentUser\r
317         ${Else}\r
318            Call SetWinXPPathAllUsers\r
319         ${EndIf}\r
320 skip:\r
321 \r
322 FunctionEnd\r
323 \r
324 Section "Blender-VERSION (required)" SecCopyUI\r
325   SectionIn RO\r
326 \r
327   ; Set output path to the installation directory.\r
328   SetOutPath $INSTDIR\r
329   ; Put file there\r
330   [ROOTDIRCONTS]\r
331   \r
332   ;SetOutPath $BLENDERHOME\$BLENDERVERSION\r
333   ;[DATAFILES] ; and we write datafiles to user accessable dir\r
334   [DODATAFILES]\r
335   \r
336   SetOutPath $INSTDIR\r
337   ; Write the installation path into the registry\r
338   WriteRegStr HKLM SOFTWARE\BlenderFoundation "Install_Dir" "$INSTDIR"\r
339   ; Write the uninstall keys for Windows\r
340   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender (remove only)"\r
341   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'\r
342   WriteUninstaller "uninstall.exe"\r
343 \r
344   ; Check for msvcr80.dll - give notice to download if not found\r
345   MessageBox MB_OK "The installer will now check your system for the required system dlls."\r
346   StrCpy $1 $WINDIR\r
347   StrCpy $DLL_found "false"\r
348   ${Locate} "$1" "/L=F /M=MSVCR80.DLL /S=0B" "LocateCallback_80"\r
349   StrCmp $DLL_found "false" 0 +2\r
350     Call DownloadDLL\r
351   StrCpy $1 $WINDIR\r
352   StrCpy $DLL_found "false"\r
353   ${Locate} "$1" "/L=F /M=MSVCR71.DLL /S=0B" "LocateCallback_71"\r
354   StrCmp $DLL_found "false" 0 +2\r
355     Call PythonInstall\r
356   \r
357 SectionEnd\r
358 \r
359 Section "Add Start Menu shortcuts" Section2\r
360   SetOutPath $INSTDIR\r
361   CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"\r
362   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0\r
363   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0\r
364   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\Blender.html" "" "" 0\r
365   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0\r
366   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0\r
367   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Help.lnk" "$INSTDIR\Help.url"\r
368 SectionEnd\r
369 \r
370 Section "Add Desktop Blender-VERSION shortcut" Section3\r
371   SetOutPath $INSTDIR\r
372   CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0\r
373 SectionEnd\r
374 \r
375 Section "Open .blend files with Blender-VERSION" Section4\r
376   SetOutPath $INSTDIR\r
377   ;ExecShell "open" '"$INSTDIR\blender.exe"' "-R -b"\r
378   ;do it the manual way! ;)\r
379   \r
380   WriteRegStr HKCR ".blend" "" "blendfile"\r
381   WriteRegStr HKCR "blendfile" "" "Blender .blend File"\r
382   WriteRegStr HKCR "blendfile\shell" "" "open"\r
383   WriteRegStr HKCR "blendfile\DefaultIcon" "" $INSTDIR\blender.exe,1\r
384   WriteRegStr HKCR "blendfile\shell\open\command" "" \\r
385     '"$INSTDIR\blender.exe" "%1"'\r
386   \r
387 SectionEnd\r
388 \r
389 UninstallText "This will uninstall Blender VERSION. Hit next to continue."\r
390 \r
391 Section "Uninstall"\r
392   ; remove registry keys\r
393   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"\r
394   DeleteRegKey HKLM SOFTWARE\BlenderFoundation\r
395   ; remove files\r
396   [DELROOTDIRCONTS]\r
397   \r
398   Delete $INSTDIR\.blender\.bfont.ttf\r
399   Delete $INSTDIR\.blender\.Blanguages\r
400   ; remove shortcuts, if any.\r
401   Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"\r
402   Delete "$DESKTOP\Blender.lnk"\r
403   ; remove directories used.\r
404   RMDir /r $INSTDIR\.blender\locale\r
405   MessageBox MB_YESNO "Erase .blender\scripts folder? (ALL contents will be erased!)" IDNO Next\r
406   RMDir /r $INSTDIR\.blender\scripts\r
407   RMDir /r $INSTDIR\.blender\scripts\bpymodules\r
408   RMDir /r $INSTDIR\.blender\scripts\bpydata\r
409   RMDir /r $INSTDIR\.blender\scripts\bpydata\config\r
410 Next:\r
411   RMDir /r $INSTDIR\plugins\include\r
412   RMDir /r $INSTDIR\plugins\r
413   RMDir $INSTDIR\.blender\r
414   RMDir "$SMPROGRAMS\Blender Foundation\Blender"\r
415   RMDir "$SMPROGRAMS\Blender Foundation"\r
416   RMDir "$INSTDIR"\r
417   RMDir "$INSTDIR\.."\r
418 SectionEnd\r
419 \r
420 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\r
421   !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)\r
422   !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)\r
423   !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)\r
424   !insertmacro MUI_DESCRIPTION_TEXT ${Section4} $(DESC_Section4)\r
425 !insertmacro MUI_FUNCTION_DESCRIPTION_END\r