]> git.lyx.org Git - lyx.git/blob - development/Win32/packaging/AltInstaller/LyXInstaller-complete.nsi
12bb6b146ee162771ebadbaa9e965043edc6249b
[lyx.git] / development / Win32 / packaging / AltInstaller / LyXInstaller-complete.nsi
1 # Lyx for Windows, NSIS v2 series installer script
2
3 # File LyXInstaller-complete.nsi
4 # This file is part of LyX, the document processor.
5 # http://www.lyx.org/
6 # Licence details can be found in the file COPYING or copy at
7 # http://www.lyx.org/about/license.php3
8
9 # Author Uwe Stöhr based on the work of Angus Leeming and Joost Verburg
10 # Full author contact details are available in file CREDITS or copy at
11 # http://www.lyx.org/about/credits.php
12
13 # This script requires NSIS 2.25 and newer
14 # http://nsis.sourceforge.net/
15 #--------------------------------
16
17 # Do a Cyclic Redundancy Check to make sure the installer
18 # was not corrupted by the download.
19 CRCCheck force
20
21 # Make the installer as small as possible.
22 #SetCompressor lzma
23
24 #--------------------------------
25 # You should need to change only these macros...
26
27 !define INSTALLER_VERSION "Complete"
28 !define INSTALLER2_VERSION "Small"
29 !define INSTALLER3_VERSION "Update"
30 !define INSTALLER_TYPE "NotUpdate"
31
32 # load the settings
33 !include "Settings.nsh"
34
35 #--------------------------------
36 # variables only used in this installer version
37
38 Var DelPythonFiles
39 Var GhostscriptPath
40 Var AiksaurusPath
41 Var AspellPath
42 Var Acrobat
43 Var PSVPath
44 Var EditorPath
45 Var ImageEditorPath
46 Var BibTeXEditorPath
47 Var LangEncoding
48 Var LangSysEncoding
49 Var MissedProg
50 Var LaTeXName
51 Var MiKTeXVersion
52 Var MiKTeXUser
53 Var MiKTeXPath
54 Var InstallGSview
55 Var InstallJabRef
56 Var SVGPath
57 # Variables used by all installer versions
58 Var AspellInstallYes
59 Var AspellBaseReg
60 Var AspellMessage
61 Var ImageMagickPath
62 Var JabRefInstalled
63 Var LatexPath
64 Var MiKTeXInstalled
65 Var PythonPath
66 Var Answer
67 Var AppPre
68 Var AppSuff
69 Var AppPath
70 Var CreateDesktopIcon
71 Var CreateFileAssociations
72 Var DictCode
73 Var FileName
74 Var LangCode
75 Var LangCodeSys
76 Var LangName
77 Var LangNameSys
78 Var NewString
79 Var OldString
80 Var PathPrefix
81 Var Pointer
82 Var ProductRootKey
83 Var RunNumber
84 Var StartmenuFolder
85 Var String
86 Var Search
87 Var UserList
88 Var UserName
89
90 #--------------------------------
91 # load some NSIS libraries
92 !include "MUI.nsh"
93 !include "LogicLib.nsh"
94 !include "FileFunc.nsh"
95 !include "StrFunc.nsh"
96 !include "TextFunc.nsh"
97 !insertmacro LineFind
98
99 # Set of various macros and functions
100 !include "LyXUtils.nsh"
101
102 # Functions to check and configure the LaTeX-system
103 !include "LaTeX.nsh"
104
105 # Function to check if needed programs are missing or not
106 !include "MissingPrograms.nsh"
107
108 # Functions for page to set installer language
109 # and LyX's menu language
110 !include "LanguageSettings.nsh"
111
112 # Function to configure LyX
113 !include "ConfigLyX.nsh"
114
115 # Function to configure needed third-party programs
116 !include "InstallThirdPartyProgs.nsh"
117
118 # Function for page to install Aspell dictionaries
119 !include "Aspell.nsh"
120
121 #--------------------------------
122 # Remember the installer language
123 !define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
124 !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
125 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
126
127 !define MUI_ABORTWARNING
128 !define MUI_HEADERIMAGE
129 !define MUI_HEADERIMAGE_BITMAP "${PRODUCT_DIR}\icons\lyx_logo_hi.bmp"
130 !define MUI_ICON "${PRODUCT_DIR}\icons\lyx.ico"
131 !define MUI_UNICON "${PRODUCT_DIR}\icons\lyx.ico"
132 !define MUI_WELCOMEFINISHPAGE_BITMAP "${VERSION_BITMAP}"
133
134 # Welcome page
135 !define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
136 !insertmacro MUI_PAGE_WELCOME
137
138 # Show the license.
139 !insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
140
141 # Specify the installation directory.
142 !insertmacro MUI_PAGE_DIRECTORY
143
144 # Specify LyX's menu language.
145 Page custom SelectMenuLanguage SelectMenuLanguage_LeaveFunction
146
147 # Define which components to install.
148 !insertmacro MUI_PAGE_COMPONENTS
149
150 # Specify where to install program shortcuts.
151 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_ROOT_KEY}"
152 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
153 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
154 !define MUI_STARTMENUPAGE_DEFAULTFOLDER "LyX ${PRODUCT_VERSION}"
155 !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder
156
157 # Check for needed programs
158 Page custom MissingProgramsPage MissingProgramsPage_LeaveFunction
159
160 # Watch the components being installed.
161 !insertmacro MUI_PAGE_INSTFILES
162
163 # Finish page
164 !define MUI_FINISHPAGE_RUN 
165 !define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
166 !define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
167 !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchProduct"
168 !insertmacro MUI_PAGE_FINISH
169
170 # The uninstaller.
171 !insertmacro MUI_UNPAGE_COMPONENTS
172 !insertmacro MUI_UNPAGE_INSTFILES
173
174 #--------------------------------
175 # Languages
176
177 !insertmacro MUI_LANGUAGE "English" # first language is the default language
178 !insertmacro MUI_LANGUAGE "Danish"
179 !insertmacro MUI_LANGUAGE "Dutch"
180 !insertmacro MUI_LANGUAGE "French"
181 !insertmacro MUI_LANGUAGE "German"
182 !insertmacro MUI_LANGUAGE "Galician"
183 !insertmacro MUI_LANGUAGE "Hungarian"
184 !insertmacro MUI_LANGUAGE "Italian"
185 !insertmacro MUI_LANGUAGE "Norwegian"
186 !insertmacro MUI_LANGUAGE "Polish"
187 !insertmacro MUI_LANGUAGE "Portuguese"
188 !insertmacro MUI_LANGUAGE "Slovak"
189 !insertmacro MUI_LANGUAGE "Spanish"
190 !insertmacro MUI_LANGUAGE "Swedish"
191 !insertmacro MUI_LANGUAGE "Turkish"
192
193 !include "lyx_languages\english.nsh"
194 !include "lyx_languages\danish.nsh"
195 !include "lyx_languages\dutch.nsh"
196 !include "lyx_languages\french.nsh"
197 !include "lyx_languages\german.nsh"
198 !include "lyx_languages\galician.nsh"
199 !include "lyx_languages\hungarian.nsh"
200 !include "lyx_languages\italian.nsh"
201 !include "lyx_languages\norwegian.nsh"
202 !include "lyx_languages\polish.nsh"
203 !include "lyx_languages\portuguese.nsh"
204 !include "lyx_languages\slovak.nsh"
205 !include "lyx_languages\spanish.nsh"
206 !include "lyx_languages\swedish.nsh"
207 !include "lyx_languages\turkish.nsh"
208
209 LicenseData "$(LyXLicenseData)"
210
211 #--------------------------------
212 # Reserve Files
213
214 # These files are inserted before other files in the data block
215 !insertmacro MUI_RESERVEFILE_LANGDLL
216 ReserveFile "io_ui_language.ini"
217 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
218
219 #--------------------------------
220 # Installer sections
221
222 Section "!${PRODUCT_NAME}" SecCore
223   SectionIn RO
224 SectionEnd
225 Section "$(SecAllUsersTitle)" SecAllUsers
226   SetShellVarContext all
227   StrCpy $ProductRootKey "HKLM"
228 SectionEnd
229 Section "$(SecFileAssocTitle)" SecFileAssoc
230   StrCpy $CreateFileAssociations "true"
231 SectionEnd
232 Section "$(SecDesktopTitle)" SecDesktop
233   StrCpy $CreateDesktopIcon "true"
234 SectionEnd
235 Section /o "$(SecInstGSviewTitle)" SecInstGSview
236  AddSize 4000
237  StrCpy $InstallGSview "true"
238 SectionEnd
239 Section /o "$(SecInstJabRefTitle)" SecInstJabRef
240  AddSize 5000
241  StrCpy $InstallJabRef "true"
242 SectionEnd
243
244 # Section descriptions
245 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
246 !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "$(SecCoreDescription)"
247 !insertmacro MUI_DESCRIPTION_TEXT ${SecAllUsers} "$(SecAllUsersDescription)"
248 !insertmacro MUI_DESCRIPTION_TEXT ${SecFileAssoc} "$(SecFileAssocDescription)"
249 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
250 !insertmacro MUI_DESCRIPTION_TEXT ${SecInstGSview} "$(SecInstGSviewDescription)"
251 !insertmacro MUI_DESCRIPTION_TEXT ${SecInstJabRef} "$(SecInstJabRefDescription)"
252 !insertmacro MUI_FUNCTION_DESCRIPTION_END
253
254 # the installation section
255 !include "InstallActions-complete-small.nsh"
256
257 #--------------------------------
258 # This hook function is called internally by NSIS on installer startup
259 Function .onInit
260
261   # set the installer language to the Windows locale language
262   System::Call "kernel32::GetUserDefaultLangID()i.a"
263
264   # check that the installer is not currently running
265   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${INSTALLER_EXE}.Instance") i .r1 ?e'
266   Pop $R0
267   ${if} $R0 != "0"
268    MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
269    Abort
270   ${endif}
271   FindProcDLL::FindProc "${INSTALLER2_EXE}"
272   ${if} $R0 == "1"
273    MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
274    Abort
275   ${endif}
276
277   # check if LyX is already installed
278   ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
279   ${if} $0 != ""
280    MessageBox MB_OK|MB_ICONSTOP "$(StillInstalled)"
281    Abort
282   ${endif}
283
284   # default settings
285   # these can be reset to "all" in section SecAllUsers
286   SetShellVarContext current
287   StrCpy $ProductRootKey "HKCU"
288
289   # this can be reset to "true" in section SecDesktop
290   StrCpy $CreateDesktopIcon "false"
291   StrCpy $CreateFileAssociations "false"
292
293   # if the user does *not* have administrator privileges, abort
294   StrCpy $Answer ""
295   StrCpy $UserName ""
296   !insertmacro IsUserAdmin $Answer $UserName # macro from LyXUtils.nsh
297   ${if} $Answer == "yes"
298     !define ENABLE 0x00000001
299     SectionGetFlags ${SecAllUsers} $0
300     IntOp $0 $0 | ${ENABLE}
301     SectionSetFlags ${SecAllUsers} $0
302     !undef ENABLE
303   ${else}
304     MessageBox MB_OK|MB_ICONSTOP "$(NotAdmin)"
305     Abort
306   ${endif}
307
308   # check the LaTeX-system
309   Call LaTeXActions # Function from LaTeX.nsh
310
311   # check which programs are installed or not
312   Call MissingPrograms # function from MissingPrograms.nsh
313
314   # don't let the installer sections appear when the programs are already installed
315   ${if} $PSVPath != ""
316    SectionSetText 4 "" # hides the corresponding uninstaller section, ${SecInstGSview}
317   ${endif}
318   ${if} $BibTeXEditorPath != ""
319    SectionSetText 5 "" # hides the corresponding uninstaller section, ${SecInstJabRef}
320   ${endif}
321
322   ClearErrors
323 FunctionEnd
324
325 #--------------------------------
326
327 Function LaunchProduct
328   # call the lyx.exe and not the lyx.bat to show the console window. This is
329   # necessary because sometimes LyX's configure run that is started by the
330   # installer fails when MiKTeX was installed together with this installer.
331   # Showing the console gives the user feedback otherwise he would wonder why
332   # LyX won't start for minutes while it is downloading LaTeX-packages in the
333   # background 
334   Exec ${PRODUCT_EXE}  
335 FunctionEnd
336
337 #--------------------------------
338 # The Uninstaller
339
340 !include "Uninstall.nsh"
341
342 # eof