1 # Lyx for Windows, NSIS v2 series installer script
3 # File LyXInstaller-complete.nsi
4 # This file is part of LyX, the document processor.
6 # Licence details can be found in the file COPYING or copy at
7 # http://www.lyx.org/about/license.php3
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
13 # This script requires NSIS 2.25 and newer
14 # http://nsis.sourceforge.net/
15 #--------------------------------
17 # Do a Cyclic Redundancy Check to make sure the installer
18 # was not corrupted by the download.
21 # Make the installer as small as possible.
24 #--------------------------------
25 # You should need to change only these macros...
27 !define INSTALLER_VERSION "Complete"
28 !define INSTALLER2_VERSION "Small"
29 !define INSTALLER3_VERSION "Update"
30 !define INSTALLER_TYPE "NotUpdate"
33 !include "Settings.nsh"
35 #--------------------------------
36 # variables only used in this installer version
57 # Variables used by all installer versions
71 Var CreateFileAssociations
90 #--------------------------------
91 # load some NSIS libraries
93 !include "LogicLib.nsh"
94 !include "FileFunc.nsh"
95 !include "StrFunc.nsh"
96 !include "TextFunc.nsh"
99 # Set of various macros and functions
100 !include "LyXUtils.nsh"
102 # Functions to check and configure the LaTeX-system
105 # Function to check if needed programs are missing or not
106 !include "MissingPrograms.nsh"
108 # Functions for page to set installer language
109 # and LyX's menu language
110 !include "LanguageSettings.nsh"
112 # Function to configure LyX
113 !include "ConfigLyX.nsh"
115 # Function to configure needed third-party programs
116 !include "InstallThirdPartyProgs.nsh"
118 # Function for page to install Aspell dictionaries
119 !include "Aspell.nsh"
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"
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}"
135 !define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
136 !insertmacro MUI_PAGE_WELCOME
139 !insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
141 # Specify the installation directory.
142 !insertmacro MUI_PAGE_DIRECTORY
144 # Specify LyX's menu language.
145 Page custom SelectMenuLanguage SelectMenuLanguage_LeaveFunction
147 # Define which components to install.
148 !insertmacro MUI_PAGE_COMPONENTS
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
157 # Check for needed programs
158 Page custom MissingProgramsPage MissingProgramsPage_LeaveFunction
160 # Watch the components being installed.
161 !insertmacro MUI_PAGE_INSTFILES
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
171 !insertmacro MUI_UNPAGE_COMPONENTS
172 !insertmacro MUI_UNPAGE_INSTFILES
174 #--------------------------------
177 !insertmacro MUI_LANGUAGE "English" # first language is the default language
178 !insertmacro MUI_LANGUAGE "Czech"
179 !insertmacro MUI_LANGUAGE "Danish"
180 !insertmacro MUI_LANGUAGE "Dutch"
181 !insertmacro MUI_LANGUAGE "French"
182 !insertmacro MUI_LANGUAGE "German"
183 !insertmacro MUI_LANGUAGE "Galician"
184 !insertmacro MUI_LANGUAGE "Hungarian"
185 !insertmacro MUI_LANGUAGE "Italian"
186 !insertmacro MUI_LANGUAGE "Norwegian"
187 !insertmacro MUI_LANGUAGE "Polish"
188 !insertmacro MUI_LANGUAGE "Portuguese"
189 !insertmacro MUI_LANGUAGE "Slovak"
190 !insertmacro MUI_LANGUAGE "Spanish"
191 !insertmacro MUI_LANGUAGE "Swedish"
192 !insertmacro MUI_LANGUAGE "Turkish"
194 !include "lyx_languages\english.nsh"
195 !include "lyx_languages\czech.nsh"
196 !include "lyx_languages\danish.nsh"
197 !include "lyx_languages\dutch.nsh"
198 !include "lyx_languages\french.nsh"
199 !include "lyx_languages\german.nsh"
200 !include "lyx_languages\galician.nsh"
201 !include "lyx_languages\hungarian.nsh"
202 !include "lyx_languages\italian.nsh"
203 !include "lyx_languages\norwegian.nsh"
204 !include "lyx_languages\polish.nsh"
205 !include "lyx_languages\portuguese.nsh"
206 !include "lyx_languages\slovak.nsh"
207 !include "lyx_languages\spanish.nsh"
208 !include "lyx_languages\swedish.nsh"
209 !include "lyx_languages\turkish.nsh"
211 LicenseData "$(LyXLicenseData)"
213 #--------------------------------
216 # These files are inserted before other files in the data block
217 !insertmacro MUI_RESERVEFILE_LANGDLL
218 ReserveFile "io_ui_language.ini"
219 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
221 #--------------------------------
224 Section "!${PRODUCT_NAME}" SecCore
227 Section "$(SecAllUsersTitle)" SecAllUsers
228 SetShellVarContext all
229 StrCpy $ProductRootKey "HKLM"
231 Section "$(SecFileAssocTitle)" SecFileAssoc
232 StrCpy $CreateFileAssociations "true"
234 Section "$(SecDesktopTitle)" SecDesktop
235 StrCpy $CreateDesktopIcon "true"
237 Section /o "$(SecInstGSviewTitle)" SecInstGSview
239 StrCpy $InstallGSview "true"
241 Section /o "$(SecInstJabRefTitle)" SecInstJabRef
243 StrCpy $InstallJabRef "true"
246 # Section descriptions
247 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
248 !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "$(SecCoreDescription)"
249 !insertmacro MUI_DESCRIPTION_TEXT ${SecAllUsers} "$(SecAllUsersDescription)"
250 !insertmacro MUI_DESCRIPTION_TEXT ${SecFileAssoc} "$(SecFileAssocDescription)"
251 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
252 !insertmacro MUI_DESCRIPTION_TEXT ${SecInstGSview} "$(SecInstGSviewDescription)"
253 !insertmacro MUI_DESCRIPTION_TEXT ${SecInstJabRef} "$(SecInstJabRefDescription)"
254 !insertmacro MUI_FUNCTION_DESCRIPTION_END
256 # the installation section
257 !include "InstallActions-complete-small.nsh"
259 #--------------------------------
260 # This hook function is called internally by NSIS on installer startup
263 # set the installer language to the Windows locale language
264 System::Call "kernel32::GetUserDefaultLangID()i.a"
266 # check that the installer is not currently running
267 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${INSTALLER_EXE}.Instance") i .r1 ?e'
270 MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
273 FindProcDLL::FindProc "${INSTALLER2_EXE}"
275 MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
279 # check if LyX is already installed
280 ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
282 MessageBox MB_OK|MB_ICONSTOP "$(StillInstalled)"
287 # these can be reset to "all" in section SecAllUsers
288 SetShellVarContext current
289 StrCpy $ProductRootKey "HKCU"
291 # this can be reset to "true" in section SecDesktop
292 StrCpy $CreateDesktopIcon "false"
293 StrCpy $CreateFileAssociations "false"
295 # if the user does *not* have administrator privileges, abort
298 !insertmacro IsUserAdmin $Answer $UserName # macro from LyXUtils.nsh
299 ${if} $Answer == "yes"
300 !define ENABLE 0x00000001
301 SectionGetFlags ${SecAllUsers} $0
302 IntOp $0 $0 | ${ENABLE}
303 SectionSetFlags ${SecAllUsers} $0
306 MessageBox MB_OK|MB_ICONSTOP "$(NotAdmin)"
310 # check the LaTeX-system
311 Call LaTeXActions # Function from LaTeX.nsh
313 # check which programs are installed or not
314 Call MissingPrograms # function from MissingPrograms.nsh
316 # don't let the installer sections appear when the programs are already installed
318 SectionSetText 4 "" # hides the corresponding uninstaller section, ${SecInstGSview}
320 ${if} $BibTeXEditorPath != ""
321 SectionSetText 5 "" # hides the corresponding uninstaller section, ${SecInstJabRef}
327 #--------------------------------
329 Function LaunchProduct
330 # call the lyx.exe and not the lyx.bat to show the console window. This is
331 # necessary because sometimes LyX's configure run that is started by the
332 # installer fails when MiKTeX was installed together with this installer.
333 # Showing the console gives the user feedback otherwise he would wonder why
334 # LyX won't start for minutes while it is downloading LaTeX-packages in the
339 #--------------------------------
342 !include "Uninstall.nsh"