From d1a30555781117fb27a4e7f919b2bd0342067c06 Mon Sep 17 00:00:00 2001 From: Joost Verburg Date: Sun, 30 Mar 2008 21:37:53 +0000 Subject: [PATCH] lots of installer improvements: * use nsDialogs instead of InstallOptions for custom wizard pages, faster & easier to customize * upgrade to Modern UI 2 * use MultiUser.nsh to support multiple installation modes (all users / current user) in a much more simple way * use LangFile.nsh for the language files, again less scripting required * simplified installer structure * more meaningful variable names * more comments * minor fixes git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24062 a592a061-630c-0410-9148-cb99ea01b6c8 --- .../installer/components/configure.nsh | 158 -------- .../packaging/installer/components/core.nsh | 92 ----- .../packaging/installer/components/dicts.nsh | 140 ------- .../installer/components/external.nsh | 216 ----------- .../installer/components/langselect.nsh | 67 ---- .../installer/components/reinstall.nsh | 38 -- .../packaging/installer/components/user.nsh | 94 ----- .../packaging/installer/components/viewer.nsh | 60 --- .../packaging/installer/dialogs/external.ini | 52 --- .../installer/dialogs/langselect.ini | 18 - .../packaging/installer/dialogs/reinstall.ini | 18 - .../packaging/installer/dialogs/user.ini | 27 -- .../packaging/installer/dialogs/viewer.ini | 19 - .../packaging/installer/graphics/header.bmp | Bin 9744 -> 9744 bytes .../packaging/installer/graphics/wizard.bmp | Bin 52576 -> 154544 bytes .../packaging/installer/gui/external.nsh | 216 +++++++++++ .../packaging/installer/gui/langselect.nsh | 77 ++++ .../packaging/installer/gui/reinstall.nsh | 67 ++++ .../installer/include/declarations.nsh | 107 ++---- .../packaging/installer/include/detection.nsh | 342 +++++------------- .../packaging/installer/include/dictlist.nsh | 49 +++ .../packaging/installer/include/download.nsh | 26 -- .../include/{filelists.nsh => filelist.nsh} | 8 +- .../Win32/packaging/installer/include/gui.nsh | 162 ++------- .../packaging/installer/include/init.nsh | 166 +++------ .../packaging/installer/include/lang.nsh | 150 -------- .../packaging/installer/include/langlist.nsh | 43 +++ .../packaging/installer/include/windows.nsh | 68 ---- .../packaging/installer/lang/english.nsh | 136 ++++--- .../Win32/packaging/installer/lang/french.nsh | 134 ++++--- .../Win32/packaging/installer/lang/german.nsh | 134 ++++--- .../packaging/installer/lang/italian.nsh | 134 ++++--- development/Win32/packaging/installer/lyx.nsi | 77 ++-- .../Win32/packaging/installer/settings.nsh | 74 ++-- .../packaging/installer/settings.user.nsh | 31 -- .../packaging/installer/setup/configure.nsh | 138 +++++++ .../packaging/installer/setup/install.nsh | 310 ++++++++++++++++ .../{components => setup}/uninstall.nsh | 36 +- 38 files changed, 1481 insertions(+), 2203 deletions(-) delete mode 100644 development/Win32/packaging/installer/components/configure.nsh delete mode 100644 development/Win32/packaging/installer/components/core.nsh delete mode 100644 development/Win32/packaging/installer/components/dicts.nsh delete mode 100644 development/Win32/packaging/installer/components/external.nsh delete mode 100644 development/Win32/packaging/installer/components/langselect.nsh delete mode 100644 development/Win32/packaging/installer/components/reinstall.nsh delete mode 100644 development/Win32/packaging/installer/components/user.nsh delete mode 100644 development/Win32/packaging/installer/components/viewer.nsh delete mode 100644 development/Win32/packaging/installer/dialogs/external.ini delete mode 100644 development/Win32/packaging/installer/dialogs/langselect.ini delete mode 100644 development/Win32/packaging/installer/dialogs/reinstall.ini delete mode 100644 development/Win32/packaging/installer/dialogs/user.ini delete mode 100644 development/Win32/packaging/installer/dialogs/viewer.ini create mode 100644 development/Win32/packaging/installer/gui/external.nsh create mode 100644 development/Win32/packaging/installer/gui/langselect.nsh create mode 100644 development/Win32/packaging/installer/gui/reinstall.nsh create mode 100644 development/Win32/packaging/installer/include/dictlist.nsh delete mode 100644 development/Win32/packaging/installer/include/download.nsh rename development/Win32/packaging/installer/include/{filelists.nsh => filelist.nsh} (98%) delete mode 100644 development/Win32/packaging/installer/include/lang.nsh create mode 100644 development/Win32/packaging/installer/include/langlist.nsh delete mode 100644 development/Win32/packaging/installer/include/windows.nsh delete mode 100644 development/Win32/packaging/installer/settings.user.nsh create mode 100644 development/Win32/packaging/installer/setup/configure.nsh create mode 100644 development/Win32/packaging/installer/setup/install.nsh rename development/Win32/packaging/installer/{components => setup}/uninstall.nsh (80%) diff --git a/development/Win32/packaging/installer/components/configure.nsh b/development/Win32/packaging/installer/components/configure.nsh deleted file mode 100644 index b8eea0cc6e..0000000000 --- a/development/Win32/packaging/installer/components/configure.nsh +++ /dev/null @@ -1,158 +0,0 @@ -/* - -Create uninstaller, file associations and configure LyX - -*/ - -!define SHORTCUT '${APP_NAME} ${APP_SERIES_NAME}.lnk" "$INSTDIR\${APP_RUN}" "" "$INSTDIR\${APP_RUN}" "" "" "" "${APP_INFO}"' - -#-------------------------------- -#Sections - -Section -FileAssociations - - #Associate .lyx files with LyX for current user of all users - - #Write information about file type - !define REG_FILETYPE 'WriteRegStr SHELL_CONTEXT "Software\Classes\${APP_REGNAME_DOC}' - - ${REG_FILETYPE}" "" "${APP_NAME} Document" - ${REG_FILETYPE}\DefaultIcon" "" "$INSTDIR\bin\lyx_doc_32x32.ico" - ${REG_FILETYPE}\Shell\open\command" "" '"$INSTDIR\${APP_RUN}" "%1"' - - !define REG_FILEEXT 'WriteRegStr SHELL_CONTEXT "Software\Classes\${APP_EXT}"' - - ${REG_FILEEXT} "" "${APP_REGNAME_DOC}" - ${REG_FILEEXT} "Content Type" "${APP_MIME_TYPE}" - - #Refresh shell - System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' - -SectionEnd - -Section -InstallData - - #Registry information - WriteRegStr SHELL_CONTEXT ${APP_REGKEY} "" $INSTDIR - WriteRegStr SHELL_CONTEXT ${APP_REGKEY} "Version" "${APP_VERSION}" - - WriteRegStr SHELL_CONTEXT ${APP_REGKEY_SETUP} "LaTeX Path" $PathLaTeX - WriteRegStr SHELL_CONTEXT ${APP_REGKEY_SETUP} "ImageMagick Path" $PathImageMagick - WriteRegStr SHELL_CONTEXT ${APP_REGKEY_SETUP} "Ghostscript Path" $PathGhostscript - WriteRegStr SHELL_CONTEXT ${APP_REGKEY_SETUP} "LyX Language" $LangName - - #Start Menu shortcut - #There is only one shortcut to the application, so it should be in the main group - CreateShortCut "$SMPROGRAMS\${SHORTCUT} - - #Uninstaller information - !define REG_UNINSTALL 'WriteRegStr SHELL_CONTEXT "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SETUP_UNINSTALLER_KEY}"' - - ${if} $CurrentUserInstall == ${TRUE} - ${REG_UNINSTALL} "DisplayName" "${APP_NAME} ${APP_VERSION} $(TEXT_INSTALL_CURRENTUSER)" - ${else} - ${REG_UNINSTALL} "DisplayName" "${APP_NAME} ${APP_VERSION}" - ${endif} - - ${REG_UNINSTALL} "UninstallString" '"$INSTDIR\${SETUP_UNINSTALLER}"' - ${REG_UNINSTALL} "DisplayVersion" "${APP_VERSION}" - ${REG_UNINSTALL} "DisplayIcon" "$INSTDIR\bin\lyx_32x32.ico" - ${REG_UNINSTALL} "URLUpdateInfo" "http://www.lyx.org/" - ${REG_UNINSTALL} "URLInfoAbout" "http://www.lyx.org/about/" - ${REG_UNINSTALL} "Publisher" "LyX Team" - ${REG_UNINSTALL} "HelpLink" "http://www.lyx.org/internet/mailing.php" - -SectionEnd - -Section -LaTeX - - #Let MiKTeX ask the user again to download packages if needed - - #MiKTeX 2.5 - - ReadRegStr $R0 HKCU "Software\MiKTeX.org\MiKTeX\2.5\MPM" "AutoInstall" - - ${if} $R0 == 0 - WriteRegStr HKCU "Software\MiKTeX.org\MiKTeX\2.5\MPM" "AutoInstall" 2 - ${endif} - - #MiKTeX 2.4 - - ReadRegStr $R0 HKCU "Software\MiK\MiKTeX\CurrentVersion\MiKTeX" "InstallPackagesOnTheFly" - - ${if} $R0 == 0 - WriteRegStr HKCU "Software\MiK\MiKTeX\CurrentVersion\MiKTeX" "InstallPackagesOnTheFly" 2 - ${endif} - - #dvipost package - - Call SearchLaTeXLocalRoot - Pop $R0 - - ${if} $R0 != "" - SetOutPath "$R0\tex\latex\dvipost" - File "${FILES_DVIPOST_PKG}\dvipost.sty" - ${endif} - - #Update file name database - - ${if} $PathLaTeX != "" - nsExec::Exec '"$PathLaTeX\initexmf.exe" --update-fndb' - Pop $R0 ;Return value - ${endif} - -SectionEnd - -Section -Configure - - #Windows specific configuration in lyxrc.dist - - Delete "$INSTDIR\Resources\lyxrc.dist" - FileOpen $R1 "$INSTDIR\Resources\lyxrc.dist" w - - #Path prefix - Call GetPathPrefix - Pop $R0 - FileWrite $R1 '\path_prefix "$R0"$\r$\n' - - #Default screen fonts - FileWrite $R1 '\screen_font_roman "Times New Roman"$\r$\n' - FileWrite $R1 '\screen_font_sans "Arial"$\r$\n' - FileWrite $R1 '\screen_font_typewriter "Courier New"$\r$\n' - FileWrite $R1 '\preview_scale_factor 1.0$\r$\n' ;Fit instant preview font size to screen fonts - #PDF view helper - FileWrite $R1 '\format "pdf" "pdf" "PDF (ps2pdf)" "P" "pdfview" "" "document,vector"$\r$\n' - FileWrite $R1 '\format "pdf2" "pdf" "PDF (pdflatex)" "F" "pdfview" "" "document,vector"$\r$\n' - FileWrite $R1 '\format "pdf3" "pdf" "PDF (dvipdfm)" "m" "pdfview" "" "document,vector"$\r$\n' - - FileClose $R1 - - #Information in the registry for the launcher - - #Set language - WriteRegStr SHELL_CONTEXT ${APP_REGKEY_SETTINGS} "Language" $LangISOCode - -SectionEnd - -#-------------------------------- -#Functions - -Function CheckDesktopShortcut - - #Enable desktop icon creation when there is an icon already - #Old shortcuts need to be updated - - ${if} ${fileexists} "$DESKTOP\${APP_NAME} ${APP_SERIES_NAME}.lnk" - !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 5" "State" "1" - ${endif} - -FunctionEnd - -Function CreateDesktopShortcut - - #Creating a desktop shortcut is an option on the finish page - - CreateShortCut "$DESKTOP\${SHORTCUT} - -FunctionEnd - diff --git a/development/Win32/packaging/installer/components/core.nsh b/development/Win32/packaging/installer/components/core.nsh deleted file mode 100644 index bb9df56cb4..0000000000 --- a/development/Win32/packaging/installer/components/core.nsh +++ /dev/null @@ -1,92 +0,0 @@ -/* - -LyX Core -Binaries, Resources, Python, Aspell - -*/ - -#-------------------------------- -#Sections - -Section -Core SecCore - - # Install and register the core LyX files - # Initializes the plug-ins dir ($PLUGINSDIR) if not already initialized. - # $PLUGINSDIR is automatically deleted when the installer exits. - InitPluginsDir - - # Binaries - - SetOutPath "$INSTDIR\bin" - - # launcher becomes lyx.exe while the real lyx.exe is renamed to lyxc.exe - File "${FILES_LAUNCHER}\lyx.exe" - File /oname=lyxc.exe "${FILES_LYX}\bin\lyx.exe" - - # The macros are defined in filelists.nsh - # the parameters are COMMAND DIRECTORY that form command '${COMMAND} "${DIRECTORY}files" - !insertmacro FileListLyXBin File "${FILES_LYX}\bin\" - !insertmacro FileListQtBin File "${FILES_QT}\bin\" - - !insertmacro FileListDllMSVCBin File "${FILES_DEPS}\bin\" - !insertmacro FileListMSVCBin File "${FILES_MSVC}\" - !insertmacro FileListMSVCManifest File "..\" - - !insertmacro FileListNetpbmBin File "${FILES_NETPBM}\" - !insertmacro FileListDvipostBin File "${FILES_DVIPOST}\" - !insertmacro FileListDTLBin File "${FILES_DTL}\" - !insertmacro FileListPDFViewBin File "${FILES_PDFVIEW}\" - !insertmacro FileListPDFToolsBin File "${FILES_PDFTOOLS}\" - - # Icons - - SetOutPath "$INSTDIR\bin" - !insertmacro FileListLyXIcons File "${FILES_ICONS}\" - - # Resources - - SetOutPath "$INSTDIR" - # recursively copy all files under Resources - File /r "${FILES_LYX}\Resources" - - #Components of Python - - SetOutPath "$INSTDIR\python" - !insertmacro FileListPythonBin File "${FILES_PYTHON}\" - !insertmacro FileListPythonDll File "$%SystemRoot%\System32\" - !insertmacro FileListUnicodeDll File "${FILES_PYTHON}\DLLs\" - SetOutPath "$INSTDIR\python\Lib" - !insertmacro FileListPythonLib File "${FILES_PYTHON}\Lib\" - SetOutPath "$INSTDIR\python\Lib\encodings" - !insertmacro FileListPythonLibEncodings File "${FILES_PYTHON}\Lib\encodings\" - - # Aspell - - # copy installer to pluginsdir (a temp dir) - File /oname=$PLUGINSDIR\AspellData.exe "${FILES_ASPELLDATA}\AspellData.exe" - - # silently install AspellData.exe (/S option) - ${if} $CurrentUserInstall == ${TRUE} - ExecWait '"$PLUGINSDIR\AspellData.exe" /S /CurrentUser' - ${else} - ExecWait '"$PLUGINSDIR\AspellData.exe" /S /AllUsers' - ${endif} - - # remove the installer - Delete "$PLUGINSDIR\AspellData.exe" - - # Aiksarus data - - SetOutPath "$INSTDIR\aiksaurus" - !insertmacro FileListAiksaurusData File "${FILES_AIKSAURUS}\" - - # Helper DLLs for NSIS-based tools - - SetOutPath "$INSTDIR\bin" - !insertmacro FileListNSISPluginsStandard File "${NSISDIR}\Plugins\" - !insertmacro FileListNSISPlugins File "${FILES_NSISPLUGINS}\" - - # Create uninstaller - WriteUninstaller "$INSTDIR\${SETUP_UNINSTALLER}" - -SectionEnd diff --git a/development/Win32/packaging/installer/components/dicts.nsh b/development/Win32/packaging/installer/components/dicts.nsh deleted file mode 100644 index a8c57fcdaa..0000000000 --- a/development/Win32/packaging/installer/components/dicts.nsh +++ /dev/null @@ -1,140 +0,0 @@ -/* - -Aspell dictionaries - -*/ - -#-------------------------------- -#Macros - -!macro Dictionary FILE LANGNAME LANGCODE SIZE - - Section /o "${LANGNAME}" - - AddSize ${SIZE} - - Push ${LANGCODE} - Push "${LANGNAME}" - Push ${FILE} - - Call DownloadDictionary - - SectionEnd - -!macroend - -#-------------------------------- -#Sections - -Section -AspellDicts - - Call GetAspellHive - Pop $AspellHive - -SectionEnd - -!define DICT '!insertmacro Dictionary' - -${DICT} af-0.50-0 "Afrikaans" af 915 -${DICT} ar-1.2-0 "Arabic" ar 4352 -${DICT} nb-0.50.1-0 "Bokmål" nb 3031 -${DICT} bg-4.0-0 "Bulgarian" bg 5345 -${DICT} ca-20040130-1 "Català" ca 1095 -${DICT} cs-20040614-1 "Ceština" cs 2069 -${DICT} da-1.4.42-1 "Dansk" da 3036 -${DICT} de-20030222-1 "Deutsch" de 2872 -${DICT} en-6.0-0 "English" en 1130 -${DICT} es-0.50-2 "Español" es 2953 -${DICT} eo-0.50-2 "Esperanto" eo 3773 -${DICT} et-0.1.21-1 "Estonian" et 922 -${DICT} fr-0.50-3 "Français" fr 4331 -${DICT} gl-0.50-0 "Galego" gl 2974 -${DICT} el-0.50-3 "Greek" el 3204 -${DICT} he-1.0-0 "Hebrew" he 2024 -${DICT} hr-0.51-0 "Hrvatski" hr 1967 -${DICT} is-0.51.1-0 "Íslenska" is 1536 -${DICT} it-2.2_20050523-0 "Italiano" it 696 -${DICT} hu-0.99.4.2-0 "Magyar" hu 1608 -${DICT} nl-opentaal200711 "Nederlands" nl 1333 -${DICT} nn-0.50.1-1 "Nynorsk" nn 1930 -${DICT} fa-0.11-0 "Persian" fa 1667 -${DICT} pl-6.0_20061121-0 "Polski" pl 1859 -${DICT} pt_PT-20070510-0 "Português" pt_PT 319 -${DICT} pt_BR-20070411-0 "Português do Brasil" pt_BR 2453 -${DICT} ro-0.50-2 "Româna" ro 341 -${DICT} ru-0.99f7-1 "Russian" ru 1458 -${DICT} gd-0.1.1-1 "Scottish" gd 194 -${DICT} sr-0.02 "Serbian" sr 3686 -${DICT} sk-0.52-0 "Slovencina" sk 4602 -${DICT} sl-0.50-0 "Slovenšcina" sl 5236 -${DICT} fi-0.7-0 "Suomi" fi 659 -${DICT} sv-0.51-0 "Svenska" sv 1029 -${DICT} tr-0.50-0 "Türkçe" tr 547 -${DICT} uk-1.4.0-0 "Ukrainian" uk 770 -${DICT} cy-0.50-3 "Welsh" cy 1771 - -#-------------------------------- -#Functions - -Function GetAspellHive - - #Check whether the system or local version of Aspell should be used - #The patched Aspell uses the same logic - - Push $R0 - - ReadRegStr $R0 HKCU "Software\Aspell" "Base Path" - - ${if} $R0 == "" - StrCpy $R0 HKLM - ${else} - StrCpy $R0 HKCU - ${endif} - - Exch $R0 - -FunctionEnd - -Function DownloadDictionary - - Exch $R0 - Exch 1 - Exch $R1 - Exch 2 - Exch $R2 - Push $R3 - - dict_download: - - !insertmacro DownloadFile $R3 ASPELLDICTS aspell6-$R0.exe /aspell6-$R0.exe - - ${if} $R3 != "OK" - #Download failed - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(TEXT_DOWNLOAD_FAILED_DICT) ($R3)" IDYES dict_download - Goto dict_noinstall - ${endif} - - install_dict: - - ExecWait '"$PLUGINSDIR\aspell6-$R0.exe" /NoDirChange /AutoClose' - - ${if} $AspellHive == HKLM - ReadRegStr $R3 HKLM "Software\Aspell\Dictionaries" $R2 - ${else} - ReadRegStr $R3 HKCU "Software\Aspell\Dictionaries" $R2 - ${endif} - - ${if} $R3 == "" - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(TEXT_NOTINSTALLED_DICT)" IDYES install_dict - ${endif} - - Delete "$PLUGINSDIR\aspell6-$R0.exe" - - dict_noinstall: - - Pop $R3 - Pop $R2 - Pop $R1 - Pop $R0 - -FunctionEnd diff --git a/development/Win32/packaging/installer/components/external.nsh b/development/Win32/packaging/installer/components/external.nsh deleted file mode 100644 index 0ac4109ddf..0000000000 --- a/development/Win32/packaging/installer/components/external.nsh +++ /dev/null @@ -1,216 +0,0 @@ -/* - -External Components: MiKTeX, ImageMagick, Ghostscript - -*/ - -#-------------------------------- -#Macros - -!macro SetComponentState VAR COMPONENT - - ${if} ${VAR} == "1" - - StrCpy $Setup${COMPONENT} ${TRUE} - - StrCpy $R1 $Size${COMPONENT} - - ${if} $Path${COMPONENT} == "" - #Add size of component itself - IntOp $R1 $R1 + ${SIZE_${COMPONENT}} - ${endif} - - SectionSetSize ${External${COMPONENT}} $R1 - - ${else} - - StrCpy $Setup${COMPONENT} ${FALSE} - SectionSetSize ${External${COMPONENT}} 0 - - ${endif} - -!macroend - -!macro ExternalComponent COMPONENT - - #Action depending on type of installer - - ${if} $Setup${component} == ${TRUE} - - StrCpy $Path${component} "" ;A new one will be installed - - !ifndef SETUPTYPE_BUNDLE - !insertmacro DownloadComponent ${component} - !else - !insertmacro InstallComponent ${component} - !endif - - ${endif} - -!macroend - -!macro SetupComponent COMPONENT - - #Run the setup application for a component - - install_${COMPONENT}: - - ExecWait '"$PLUGINSDIR\${COMPONENT}Setup.exe"' - Call UpdatePathEnvironment - Call Search${COMPONENT} - - ${if} $Path${COMPONENT} == "" - MessageBox MB_YESNO|MB_ICONEXCLAMATION $(TEXT_NOTINSTALLED_${COMPONENT}) IDYES install_${COMPONENT} - ${endif} - - Delete "$PLUGINSDIR\${COMPONENT}Setup.exe" - -!macroend - -!ifndef SETUPTYPE_BUNDLE - - !macro DownloadComponent COMPONENT - - download_${COMPONENT}: - - !insertmacro DownloadFile $R0 "${COMPONENT}" "${COMPONENT}Setup.exe" "" - - ${if} $R0 != "OK" - #Download failed - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(TEXT_DOWNLOAD_FAILED_${COMPONENT}) ($R0)" IDYES download_${COMPONENT} - Goto noinstall_${COMPONENT} - ${endif} - - !insertmacro SetupComponent ${COMPONENT} - - noinstall_${COMPONENT}: - - !macroend - -!else - - !macro InstallComponent COMPONENT - - #Extract - File /oname=$PLUGINSDIR\${COMPONENT}Setup.exe ${FILES_BUNDLE}\${INSTALL_${COMPONENT}} - - !insertmacro SetupComponent ${COMPONENT} - - !macroend - -!endif - -!macro DialogExternalControl component - - #Enable/disable the DirRequest control - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "external_${component}.ini" "Field 3" "State" - !insertmacro MUI_INSTALLOPTIONS_READ $R1 "external_${component}.ini" "Field 4" "HWND" - EnableWindow $R1 $R0 - !insertmacro MUI_INSTALLOPTIONS_READ $R1 "external_${component}.ini" "Field 4" "HWND2" - EnableWindow $R1 $R0 - -!macroend - -!macro DialogExternalShow COMPONENT - - !insertmacro MUI_HEADER_TEXT $(TEXT_EXTERNAL_${COMPONENT}_TITLE) $(TEXT_EXTERNAL_${COMPONENT}_SUBTITLE) - !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "external_${COMPONENT}.ini" - !insertmacro DialogExternalControl ${COMPONENT} - !insertmacro MUI_INSTALLOPTIONS_SHOW - -!macroend - -!macro DialogExternalValidate COMPONENT - - Push $R0 - Push $R1 - - #Next button pressed? - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "external_${COMPONENT}.ini" "Settings" "State" - ${if} $R0 != "0" - !insertmacro DialogExternalControl ${COMPONENT} - Abort - ${endif} - - #Download? - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "external_${COMPONENT}.ini" "Field 2" "State" - !insertmacro SetComponentState $R0 ${COMPONENT} - - #Folder? - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "external_${COMPONENT}.ini" "Field 3" "State" - - ${if} $R0 == "1" - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "external_${COMPONENT}.ini" "Field 4" "State" - ${unless} ${FileExists} "$R0\${BIN_${COMPONENT}}" - MessageBox MB_OK|MB_ICONEXCLAMATION $(TEXT_EXTERNAL_${COMPONENT}_NOTFOUND) - Abort - ${endif} - StrCpy $Path${component} $R0 - ${endif} - - Pop $R1 - Pop $R0 - -!macroend - -#-------------------------------- -#Sections - -Section -LaTeX ExternalLaTeX - !insertmacro ExternalComponent LaTeX -SectionEnd - -Section -ImageMagick ExternalImageMagick - !insertmacro ExternalComponent ImageMagick -SectionEnd - -Section -Ghostscript ExternalGhostscript - !insertmacro ExternalComponent Ghostscript -SectionEnd - -#-------------------------------- -#Functions - -Function InitSizeExternal - - #Get sizes of external component installers - - SectionGetSize ${ExternalLaTeX} $SizeLaTeX - SectionGetSize ${ExternalImageMagick} $SizeImageMagick - SectionGetSize ${ExternalGhostscript} $SizeGhostscript - - !ifndef SETUPTYPE_BUNDLE - #Add download size - IntOp $SizeLaTeX $SizeLaTeX + ${SIZE_DOWNLOAD_LATEX} - IntOp $SizeImagemagick $SizeImagemagick + ${SIZE_DOWNLOAD_IMAGEMAGICK} - IntOp $SizeGhostscript $SizeGhostscript + ${SIZE_DOWNLOAD_GHOSTSCRIPT} - !endif - -FunctionEnd - -#-------------------------------- -#Page functions - -Function PageExternalLaTeX - !insertmacro DialogExternalShow LaTeX -FunctionEnd - -Function PageExternalLaTeXValidate - !insertmacro DialogExternalValidate LaTeX -FunctionEnd - -Function PageExternalImageMagick - !insertmacro DialogExternalShow ImageMagick -FunctionEnd - -Function PageExternalImageMagickValidate - !insertmacro DialogExternalValidate ImageMagick -FunctionEnd - -Function PageExternalGhostscript - !insertmacro DialogExternalShow Ghostscript -FunctionEnd - -Function PageExternalGhostscriptValidate - !insertmacro DialogExternalValidate Ghostscript -FunctionEnd diff --git a/development/Win32/packaging/installer/components/langselect.nsh b/development/Win32/packaging/installer/components/langselect.nsh deleted file mode 100644 index 9fc8149e32..0000000000 --- a/development/Win32/packaging/installer/components/langselect.nsh +++ /dev/null @@ -1,67 +0,0 @@ -/* - -Selection of language for LyX interface - -*/ - -#-------------------------------- -#Macros - -!macro SetSystemLangItem VAR LANGNAME LANGISOCODE LANGID - - ${if} ${VAR} == ${LANGID} - !insertmacro MUI_INSTALLOPTIONS_WRITE "langselect.ini" "Field 2" "State" "${LANGNAME}" - ${endif} - -!macroend - -!macro SetSystemLang VAR - - !insertmacro LanguageList '!insertmacro SetSystemLangItem ${VAR}' - -!macroend - -!macro GetISOLangCodeItem VAR_LANGNAME VAR_LANGISOCODE LANGNAME LANGISOCODE LANGID - - ${if} ${VAR_LANGNAME} == "${LANGNAME}" - StrCpy ${VAR_LANGISOCODE} "${LANGISOCODE}" - ${endif} - -!macroend - -!macro GetISOLangCode VAR_LANGNAME VAR_LANGISOCODE - - #Get the language code for the selected language name - - !insertmacro LanguageList '!insertmacro GetISOLangCodeItem ${VAR_LANGNAME} ${VAR_LANGISOCODE}' - -!macroend - -#-------------------------------- -#Functions - -Function InitLanguage - - #Set the default for the language selection dialog to the Windows language - - System::Call "kernel32::GetUserDefaultUILanguage()i.R0" - !insertmacro SetSystemLang $R0 - -FunctionEnd - -#-------------------------------- -#Page functions - -Function PageLanguage - - !insertmacro MUI_HEADER_TEXT "$(TEXT_LANGUAGE_TITLE)" "$(TEXT_LANGUAGE_SUBTITLE)" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "langselect.ini" - -FunctionEnd - -Function PageLanguageValidate - - !insertmacro MUI_INSTALLOPTIONS_READ $LangName "langselect.ini" "Field 2" "State" - !insertmacro GetISOLangCode $LangName $LangISOCode - -FunctionEnd \ No newline at end of file diff --git a/development/Win32/packaging/installer/components/reinstall.nsh b/development/Win32/packaging/installer/components/reinstall.nsh deleted file mode 100644 index 7464fbc892..0000000000 --- a/development/Win32/packaging/installer/components/reinstall.nsh +++ /dev/null @@ -1,38 +0,0 @@ -/* - -Reinstall options - -*/ - -#-------------------------------- -#Page functions - -Function PageReinstall - - # Check whether this version is already installed - # If so, some registry key like Software/lyx15 should exist - - ReadRegStr $R0 SHELL_CONTEXT ${APP_REGKEY} "Version" - - ${if} $R0 != "${APP_VERSION}" - Abort - ${endif} - - !insertmacro MUI_HEADER_TEXT $(TEXT_REINSTALL_TITLE) $(TEXT_REINSTALL_SUBTITLE) - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "reinstall.ini" - -FunctionEnd - -Function PageReinstallValidate - - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "reinstall.ini" "Field 2" "State" - - # if re-installation, hide many sections - # FIXME: where is SelectSection defined? - ${if} $R0 == "1" - !insertmacro SelectSection ${SecCore} - ${else} - !insertmacro UnselectSection ${SecCore} - ${endif} - -FunctionEnd diff --git a/development/Win32/packaging/installer/components/user.nsh b/development/Win32/packaging/installer/components/user.nsh deleted file mode 100644 index dc6b32484a..0000000000 --- a/development/Win32/packaging/installer/components/user.nsh +++ /dev/null @@ -1,94 +0,0 @@ -/* - -Install type setting (current user/all users) - -*/ - -#-------------------------------- -#Macros - -# COMPONENT can be LaTeX ImageMagick and Ghostscript -!macro GetDirExternal COMPONENT - - # APP_REGKEY_SETUP = "Software\${APP_NAME}${APP_SERIES_KEY}\Setup" - # where ${APP_NAME}${APP_SERIES_KEY} is something like LyX15 - ReadRegStr $R0 SHELL_CONTEXT "${APP_REGKEY_SETUP}" "${COMPONENT} Path" - - # BIN_LATEX etc are defined in settings.nsh - ${if} ${FileExists} "$R0\${BIN_${COMPONENT}}" - - ${if} $R0 != "" - # define variables like PathLATEX - StrCpy $Path${COMPONENT} $R0 - ${endif} - - ${endif} - -!macroend - -#-------------------------------- -#Functions - -Function InitUser - - #Get directories from registry - - ReadRegStr $R0 SHELL_CONTEXT "${APP_REGKEY}" "" - - ${if} $R0 != "" - StrCpy $INSTDIR $R0 - ${endif} - - !insertmacro GetDirExternal LaTeX - !insertmacro GetDirExternal ImageMagick - !insertmacro GetDirExternal Ghostscript - - # Set directories in dialogs - # Macro defined in include/gui.sh, parameters are COMPONENT CURRENTUSER_POSSIBLE - !insertmacro InitDialogExternalDir latex ${TRUE} - !insertmacro InitDialogExternalDir imagemagick ${FALSE} - !insertmacro InitDialogExternalDir ghostscript ${FALSE} - - #Get LyX language - - ReadRegStr $R0 SHELL_CONTEXT "${APP_REGKEY_SETUP}" "LyX Language" - - ${if} $R0 != "" - !insertmacro MUI_INSTALLOPTIONS_WRITE "langselect.ini" "Field 2" "State" $R0 - ${endif} - -FunctionEnd - -#-------------------------------- -#Page functions - -Function PageUser - - #Only show page if installing for all users is possible - ${if} $AdminOrPowerUser == ${FALSE} - Call InitUser - Abort - ${endif} - - !insertmacro MUI_HEADER_TEXT $(TEXT_USER_TITLE) $(TEXT_USER_SUBTITLE) - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "user.ini" - -FunctionEnd - -Function PageUserValidate - - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "user.ini" "Field 2" "State" - - # shell var context is important because it determines the actual - # meaning of variables like $DESKTOP - ${if} $R0 == "1" - SetShellVarContext all - StrCpy $CurrentUserInstall ${FALSE} - ${else} - SetShellVarContext current - StrCpy $CurrentUserInstall ${TRUE} - ${endif} - - Call InitUser - -FunctionEnd diff --git a/development/Win32/packaging/installer/components/viewer.nsh b/development/Win32/packaging/installer/components/viewer.nsh deleted file mode 100644 index 0fed052d73..0000000000 --- a/development/Win32/packaging/installer/components/viewer.nsh +++ /dev/null @@ -1,60 +0,0 @@ -/* - -Option to download GSView (PDF/Postscript viewer) - -*/ - -#-------------------------------- -#Sections - -Section -Viewer ExternalViewer - !insertmacro ExternalComponent Viewer -SectionEnd - -#-------------------------------- -#Functions - -Function InitSizeViewer - - #Get size of viewer installer - - SectionGetSize ${ExternalViewer} $SizeViewer - - !ifndef SETUPTYPE_BUNDLE - #Add download size - IntOp $SizeViewer $SizeViewer + ${SIZE_DOWNLOAD_VIEWER} - !endif - -FunctionEnd - -#-------------------------------- -#Page functions - -Function PageViewer - - #Show page if no viewer is installed, the user has Power User or Administrator priviledges and - #Ghostscript is installed or will be installed - - ${if} $AdminOrPowerUser == ${FALSE} - ${orif} $PathViewer == "associated" - Abort - ${endif} - - ${if} $PathGhostscript == "" - ${andif} $SetupGhostscript == ${FALSE} - !insertmacro SetComponentState $R0 Viewer - Abort - ${endif} - - !insertmacro MUI_HEADER_TEXT $(TEXT_VIEWER_TITLE) $(TEXT_VIEWER_SUBTITLE) - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "viewer.ini" - -FunctionEnd - -Function PageViewerValidate - - #Download? - !insertmacro MUI_INSTALLOPTIONS_READ $R0 "viewer.ini" "Field 2" "State" - !insertmacro SetComponentState $R0 Viewer - -FunctionEnd diff --git a/development/Win32/packaging/installer/dialogs/external.ini b/development/Win32/packaging/installer/dialogs/external.ini deleted file mode 100644 index 3032ae02f9..0000000000 --- a/development/Win32/packaging/installer/dialogs/external.ini +++ /dev/null @@ -1,52 +0,0 @@ -[Settings] -NumFields=6 - -[Field 1] -Type=Label -Left=0 -Top=0 -Right=300 -Bottom=40 -Text=###TEXT_EXTERNAL_INFO### - -[Field 2] -Type=RadioButton -Left=0 -Top=40 -Right=300 -Bottom=51 -Text=###TEXT_EXTERNAL_DOWNLOAD### -Flags=NOTIFY - -[Field 3] -Type=RadioButton -Left=0 -Top=60 -Right=300 -Bottom=70 -Text=###TEXT_EXTERNAL_FOLDER### -Flags=NOTIFY - -[Field 4] -Type=DirRequest -Left=10 -Top=80 -Right=300 -Bottom=93 -Flags=NOTIFY - -[Field 6] -Type=RadioButton -Left=0 -Top=120 -Right=300 -Bottom=130 -Text=###TEXT_EXTERNAL_NONE### -Flags=NOTIFY -[Field 5] -Type=Label -Left=10 -Top=100 -Right=290 -Bottom=110 -Text=###TEXT_EXTERNAL_FOLDER_INFO### diff --git a/development/Win32/packaging/installer/dialogs/langselect.ini b/development/Win32/packaging/installer/dialogs/langselect.ini deleted file mode 100644 index a6c2420541..0000000000 --- a/development/Win32/packaging/installer/dialogs/langselect.ini +++ /dev/null @@ -1,18 +0,0 @@ -[Settings] -NumFields=2 - -[Field 1] -Type=Label -Left=0 -Top=0 -Right=300 -Bottom=40 -Text=###TEXT_LANGUAGE_INFO### - -[Field 2] -Type=DropList -Left=0 -Top=40 -Right=110 -Bottom=140 -ListItems= diff --git a/development/Win32/packaging/installer/dialogs/reinstall.ini b/development/Win32/packaging/installer/dialogs/reinstall.ini deleted file mode 100644 index 20546a0792..0000000000 --- a/development/Win32/packaging/installer/dialogs/reinstall.ini +++ /dev/null @@ -1,18 +0,0 @@ -[Settings] -NumFields=2 - -[Field 1] -Type=Label -Left=0 -Top=0 -Right=300 -Bottom=60 -Text=###TEXT_REINSTALL_INFO### - -[Field 2] -Type=CheckBox -Left=20 -Top=60 -Right=300 -Bottom=69 -Text=###TEXT_REINSTALL_ENABLE### diff --git a/development/Win32/packaging/installer/dialogs/user.ini b/development/Win32/packaging/installer/dialogs/user.ini deleted file mode 100644 index 1f2ff78596..0000000000 --- a/development/Win32/packaging/installer/dialogs/user.ini +++ /dev/null @@ -1,27 +0,0 @@ -[Settings] -NumFields=3 - -[Field 1] -Type=Label -Left=0 -Top=0 -Right=300 -Bottom=50 -Text=###TEXT_USER_INFO### - -[Field 3] -Type=RadioButton -Left=20 -Top=70 -Right=300 -Bottom=81 -Text=###TEXT_USER_CURRENT### -State= -[Field 2] -Type=RadioButton -Left=20 -Top=50 -Right=300 -Bottom=61 -Text=###TEXT_USER_ALL# -State= diff --git a/development/Win32/packaging/installer/dialogs/viewer.ini b/development/Win32/packaging/installer/dialogs/viewer.ini deleted file mode 100644 index ca478f9222..0000000000 --- a/development/Win32/packaging/installer/dialogs/viewer.ini +++ /dev/null @@ -1,19 +0,0 @@ -[Settings] -NumFields=2 - -[Field 1] -Type=Label -Left=0 -Top=0 -Right=300 -Bottom=60 -Text=###TEXT_VIEWER_INFO### - -[Field 2] -Type=CheckBox -Left=20 -Top=60 -Right=300 -Bottom=69 -Text=###TEXT_VIEWER_DOWNLOAD### -State=1 diff --git a/development/Win32/packaging/installer/graphics/header.bmp b/development/Win32/packaging/installer/graphics/header.bmp index 7323ccf861f84e6c2a5e9a794c3d88793174743c..262387e9443f50ca2911f1141405dc6a2702241d 100644 GIT binary patch literal 9744 zcmeI1v5(_K6o(%Y1riP73d$7?LTQnZ&=!&CDX&fuK}AJDoAl|?QJiusv0J=m|Abt9 zv2-c6Lag#HT$P66@y(mqo{5v}Im|7QSZBX@es(hc`Moz|$NT*cpM531eEYG;*R+0v z@8Bc(#JB(XrO4->Mtno_HWlGdrqj6MohD4>^Y2b z4GIRbK!bvTtkIxgAch771Ci(cQr->Z0u2fVGDL%dfsD|gU?3ATC>Y2b4GIRbK!bvT ztkIxgAch7713JXTL=+6<0u2fVGDL%dfsD|gU?3ATC>Y2b4GIRbK!bvTtkIxgz?blY z1_Qwf?)+uE%LN(~3}lD~1p^tOLBT*KXizYaIT{oUWPt_+16iX%!9WZR3I-x~__@Q$ z9r3xt4;mBWP%0-1DT^i!9W&hP%w}+8Wb$FjW$?S0c-mPeuCejqJJtI6g-V{G$<$&`#F+q@iO}&7)$du8xzF*fZcepe}#!WlbdKO|87*h<7J-7ov!Zhv$8vIeIz=0!eVlB zuiKu>_`1vjXm9=c*i8=AR3&E=!53jofrM?JlpnDJYJ#b>yfzJchia?G8rb>CZ(;Nrd8UPXR#iL#IBpDn8~9>kGsOY zJd1U>4rG#0RX#_wQ$`b}rcv0J&-87Ku({{whmXXgSu7nd&te-c4_NE635F-Jb92$` z4vnJmidoEzFbujgx@R%JglDEo`|`1vCoWj+7<;Jb3;T+<5j!r}SP#!SCb7PDK3DJD zuFK_d6K!Q#+vr@joY#Nq4i{TJqEM&2XGky1_+WpjTrF^ZHUR=3@ zc#yE8J{;>f(>K?nWKY^GTR#Fe!gb@jD+VV z&&IRlr&)dMW9w*&IV-R95W;JJ2$p~O$3Fj0n`O_KF7uuqP^+8kU~R{iZQO77cTwMX z&9;Zk=C*8Rs!cvjfmYSTXPdLSevclV1|$s-@{>nUExT=RIozC`{3@`UR3 literal 9744 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 u5g*%Ty1kT?aYuqo(&gr%}rAK<^gFPLip diff --git a/development/Win32/packaging/installer/graphics/wizard.bmp b/development/Win32/packaging/installer/graphics/wizard.bmp index a7df8eda40daeb536dbaff720402ea64e1716485..0de0f5ce323b73cfb3d8ab40ea9828d6f7ece15d 100644 GIT binary patch literal 154544 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 literal 52576 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

bc9p}|QrJ_m(W@8|=U=(R zvUDIuGIpU)OWxn>%`XN=PaI8zMx&{g^vJZ#^zB@-@dy;}7{TRU3xdlHj5E^IJ~O?28d?*{2Opu)_1>f$ zd3l>zN`6=s|VFbC(kTR1-pv#fP*E~+nMY}BsE;p(e zI(nmC@UG_M#BZv{pL8R6{A0Xnslf@lfu z788z6XhCqf(UQk&3YnSEv3&XR1G+joDfWFBLODpagn*KZh;zBbvUGUVqT}>y<*)U7 z-3es5c6~#l!p0ymsxXPY*Y*RPt`Fu`E3zAS5OS zFg8P8yL#-@s4YLjAFo{T{xb+Jk9Emq>L8!Yb)%>OWQFq6$sd7O`AR>R*ZDIY zObD)4^}|E9w$6{0Sw~M{)QIKEjl*DrX(?osI$kO7Au(e^ELZMrntQ?6GWS%joYdpb zn9}93t_-ZdHzVStt&oCzeJZey*OLBP8QrbT><~doT4HiTk4GcyfAn#w%pdEZbt?X| zC?c-%a<>RPrA_MRY+CcjK#J*IJe&OXVe162n6v#gU%A0}s}bGs$6Jo*n(@{nx@7bK zL|2Rtm-ykrO$?vnW5yFybTPm748&q>?Gc8C&lF>8PeCk(@sYc4qTBzeQ#sYqa}b^C z=s}3i7(EHm38P0LI%YKek3j#Fv)`nH9mR}?Av)60(-0jnKJurYUEd`0T252M*2a%l zmTtFn!=BOeR4g)Hd!UN;j2?+-jhSAS|DEbB^+EH+&Hm`2h-Mvo-EW5Xpmm#$4|yu0 zO-Ii~G#EV?Q8RinqGI%DM9Jvch|K8Wh{WjWh+r(?A1{?+j{kpvSkCiREJcHrU8+oh zG6l*MC{v(JfieZk6ev@mOo1{5$`mM5piF@>1