lyx_mirror/development/Win32/packaging/installer/setup/configure.nsh
Uwe Stöhr 82b9f919aa installer: new method to install LaTeX-packages
LyX 2.0.x supports currently 147 LaTeX-packages. When LyX is first installed on a PC it took therefore about 10 minutes to install all supported and required packages. With the new installation method the installation speed only depends on the Internet speed and lasts with an average bandwidth now only 3.5 minutes.
(chkconfig.ltx asks LaTeX for each package separately and after each package installation the file name database of LaTeX was rebuild. And that cost a lot of time/CPU power)
2013-01-28 02:54:31 +01:00

254 lines
9.6 KiB
Plaintext

/*
configure.nsh
Write registry information and configure LyX
*/
Var PathPrefix
#!define SHORTCUT '${APP_NAME} ${APP_SERIES_NAME}.lnk" "$INSTDIR\${APP_RUN}" "" "$INSTDIR\${APP_RUN}" "" "" "" "${APP_INFO}"'
#--------------------------------
# Registry information
Section -InstallData
# Registry information
WriteRegStr SHCTX ${APP_REGKEY} "" $INSTDIR
WriteRegStr SHCTX ${APP_REGKEY} "Version" "${APP_VERSION_NUMBER}"
WriteRegStr SHCTX ${APP_REGKEY_SETUP} "LaTeX Path" $PathLaTeX
# Start Menu shortcut
SetOutPath "$INSTDIR\bin" # this is the folder in which the shortcut is executed
CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
CreateShortCut "$SMPROGRAMS\$StartmenuFolder\${APP_NAME}.lnk" "$INSTDIR\${APP_RUN}" "" "$INSTDIR\${APP_RUN}" "" "" "" "${APP_INFO}"
# Link to www.lyx.org and to the Wiki
WriteINIStr "$SMPROGRAMS\$StartmenuFolder\${APP_WEBPAGE_INFO}.url" "InternetShortcut" "URL" "${APP_WEBPAGE}"
WriteINIStr "$SMPROGRAMS\$StartmenuFolder\${APP_WIKI_INFO}.url" "InternetShortcut" "URL" "${APP_WIKI}"
# create desktop icon
${if} $CreateDesktopIcon == "true"
SetOutPath "$INSTDIR\bin"
CreateShortCut "$DESKTOP\${APP_NAME} ${APP_SERIES_NAME}.lnk" "$INSTDIR\${APP_RUN}" "" "$INSTDIR\${APP_RUN}" "" "" "" "${APP_INFO}"
${endif}
# Uninstaller information
${If} $MultiUser.InstallMode == "CurrentUser"
WriteRegStr SHCTX ${APP_UNINST_KEY} "DisplayName" "${APP_NAME} ${APP_VERSION} $(TEXT_INSTALL_CURRENTUSER)"
${Else}
WriteRegStr SHCTX ${APP_UNINST_KEY} "DisplayName" "${APP_NAME} ${APP_VERSION}"
${EndIf}
WriteRegStr SHCTX ${APP_UNINST_KEY} "UninstallString" '"$INSTDIR\${SETUP_UNINSTALLER}"'
WriteRegStr SHCTX ${APP_UNINST_KEY} "DisplayVersion" "${APP_VERSION}"
WriteRegStr SHCTX ${APP_UNINST_KEY} "DisplayIcon" "$INSTDIR\bin\lyx,0"
WriteRegStr SHCTX ${APP_UNINST_KEY} "URLUpdateInfo" "http://www.lyx.org/"
WriteRegStr SHCTX ${APP_UNINST_KEY} "URLInfoAbout" "http://www.lyx.org/about/"
WriteRegStr SHCTX ${APP_UNINST_KEY} "Publisher" "LyX Team"
WriteRegStr SHCTX ${APP_UNINST_KEY} "HelpLink" "http://www.lyx.org/internet/mailing.php"
WriteRegDWORD SHCTX ${APP_UNINST_KEY} "NoModify" 0x00000001
WriteRegDWORD SHCTX ${APP_UNINST_KEY} "NoRepair" 0x00000001
WriteRegStr SHCTX ${APP_UNINST_KEY} "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
# if we install over an existing version, remove the old uninstaller information
${if} $OldVersionNumber != ""
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}$OldVersionNumber"
${endif}
SectionEnd
#--------------------------------
# Write LyX configuration file
Section -Configure
# Associate .lyx files with LyX for current user of all users
${if} $CreateFileAssociations == "true"
WriteRegStr SHCTX "${APP_DIR_REGKEY}" "" "$INSTDIR\${APP_RUN}"
${endif}
# Write information about file type
#!define REG_FILETYPE 'WriteRegStr SHCTX "Software\Classes\${APP_REGNAME_DOC}"'
${if} $CreateFileAssociations == "true"
WriteRegStr SHCTX "${APP_DIR_REGKEY}" "OnlyWithLyX" "Yes${APP_SERIES_KEY}" # special entry to test if they were registered by this LyX version
WriteRegStr SHCTX "Software\Classes\${APP_REGNAME_DOC}" "" "${APP_NAME} Document"
WriteRegStr SHCTX "Software\Classes\${APP_REGNAME_DOC}\DefaultIcon" "" "$INSTDIR\${APP_RUN},0"
WriteRegStr SHCTX "Software\Classes\${APP_REGNAME_DOC}\Shell\open\command" "" '"$INSTDIR\${APP_RUN}" "%1"'
WriteRegStr SHCTX "Software\Classes\${APP_EXT}" "" "${APP_REGNAME_DOC}"
WriteRegStr SHCTX "Software\Classes\${APP_EXT}" "Content Type" "${APP_MIME_TYPE}"
# .lyx13
WriteRegStr SHCTX "Software\Classes\${APP_EXT}13" "" "${APP_REGNAME_DOC}"
WriteRegStr SHCTX "Software\Classes\${APP_EXT}13" "Content Type" "${APP_MIME_TYPE}"
# .lyx14
WriteRegStr SHCTX "Software\Classes\${APP_EXT}14" "" "${APP_REGNAME_DOC}"
WriteRegStr SHCTX "Software\Classes\${APP_EXT}14" "Content Type" "${APP_MIME_TYPE}"
# .lyx15
WriteRegStr SHCTX "Software\Classes\${APP_EXT}15" "" "${APP_REGNAME_DOC}"
WriteRegStr SHCTX "Software\Classes\${APP_EXT}15" "Content Type" "${APP_MIME_TYPE}"
# .lyx16 don't set this, because this is designed to be opened with LyX 1.6.x
# Refresh shell
${RefreshShellIcons}
${endif}
# Set path prefix in lyxrc.dist
# Install standard lyxrc.dist file
#SetOutPath "$INSTDIR\Resources"
#File "${FILES_DEPS}\Resources\lyxrc.dist"
# create the path prefix
# $$ represents a literal $ in an NSIS string
StrCpy $PathPrefix "$$LyXDir\bin;$$LyXDir\Python;$$LyXDir\Python\Lib;$$LyXDir\imagemagick"
${if} $PathLaTeX != ""
StrCpy $PathPrefix "$PathPrefix;$PathLaTeX"
${EndIf}
${if} $PSVPath != ""
StrCpy $PathPrefix "$PathPrefix;$PSVPath"
${endif}
${if} $EditorPath != ""
StrCpy $PathPrefix "$PathPrefix;$EditorPath"
${endif}
${if} $ImageEditorPath != ""
StrCpy $PathPrefix "$PathPrefix;$ImageEditorPath"
${endif}
${if} $GhostscriptPath != ""
StrCpy $PathPrefix "$PathPrefix;$GhostscriptPath"
${endif}
${if} $SVGPath != ""
StrCpy $PathPrefix "$PathPrefix;$SVGPath"
${endif}
${if} $GnumericPath != ""
StrCpy $PathPrefix "$PathPrefix;$GnumericPath"
${endif}
${if} $PathBibTeXEditor != ""
StrCpy $PathPrefix "$PathPrefix;$PathBibTeXEditor"
${EndIf}
${if} $LilyPondPath != ""
StrCpy $PathPrefix "$PathPrefix;$LilyPondPath"
${endif}
# Set the path prefix in lyxrc.dist
ClearErrors
Delete "$INSTDIR\Resources\lyxrc.dist"
FileOpen $R1 "$INSTDIR\Resources\lyxrc.dist" w
# set the format
FileWrite $R1 'Format 1$\r$\n'
# set some general things
FileWrite $R1 '\screen_zoom 120$\r$\n'
${if} "$PathPrefix" != ""
FileWrite $R1 '\path_prefix "$PathPrefix"$\r$\n'
${endif}
# use pdfview for all types of PDF files
FileWrite $R1 '\format "pdf5" "pdf" "PDF (LuaTeX)" "u" "pdfview" "" "document,vector,menu=export"$\r$\n\
\format "pdf4" "pdf" "PDF (XeTeX)" "X" "pdfview" "" "document,vector,menu=export"$\r$\n\
\format "pdf3" "pdf" "PDF (dvipdfm)" "m" "pdfview" "" "document,vector,menu=export"$\r$\n\
\format "pdf2" "pdf" "PDF (pdflatex)" "F" "pdfview" "" "document,vector,menu=export"$\r$\n\
\format "pdf" "pdf" "PDF (ps2pdf)" "P" "pdfview" "" "document,vector,menu=export"$\r$\n'
# if LilyPondPath was found
# we need to add these entris because python scripts can only be executed
# if the full path is given
${if} $LilyPondPath != ""
FileWrite $R1 '\format "lilypond-book" "lytex" "LilyPond book (LaTeX)" "" "" "auto" "document,menu=export"$\r$\n\
\converter "lilypond-book" "pdflatex" "python \"$LilyPondPath\\lilypond-book.py\" --safe --pdf --latex-program=pdflatex --lily-output-dir=ly-pdf $$$$i" ""$\r$\n\
\converter "lilypond-book" "xetex" "python \"$LilyPondPath\\lilypond-book.py\" --safe --pdf --latex-program=xelatex --lily-output-dir=ly-pdf $$$$i" ""$\r$\n\
\converter "lilypond-book" "luatex" "python \"$LilyPondPath\\lilypond-book.py\" --safe --pdf --latex-program=lualatex --lily-output-dir=ly-pdf $$$$i" ""$\r$\n\
\converter "lilypond-book" "latex" "python \"$LilyPondPath\\lilypond-book.py\" --safe --lily-output-dir=ly-eps $$$$i" ""$\r$\n'
${endif}
FileClose $R1
IfErrors 0 +2
MessageBox MB_OK|MB_ICONEXCLAMATION "$(ModifyingConfigureFailed)"
ClearErrors
SectionEnd
#--------------------------------
# Postscript printer for metafile to EPS converter
Section -PSPrinter
${if} $MultiUser.Privileges == "Admin"
${orif} $MultiUser.Privileges == "Power"
# Delete printer
ExecWait '$PrinterConf /q /dl /n "Metafile to EPS Converter"'
# Install printer and driver
ExecWait '$PrinterConf /if /f "$WINDIR\inf\ntprint.inf" /b "Metafile to EPS Converter" /r "FILE:" /m "MS Publisher Imagesetter"'
${else}
MessageBox MB_OK|MB_ICONINFORMATION "$(MetafileNotAvailable)"
${endif}
SectionEnd
#--------------------------------
# Run the LyX configure.py script, so MiKTeX can download its packages
Var ConfigureReturn
Section -ConfigureScript
SetOutPath "$INSTDIR\Resources"
# ask to update MiKTeX
${if} $LaTeXInstalled == "MiKTeX"
Call UpdateMiKTeX # function from latex.nsh
# install all necessary packages at once
DetailPrint $(TEXT_CONFIGURE_LYX)
${if} $MultiUser.Privileges != "Admin"
${andif} $MultiUser.Privileges != "Power"
# call the non-admin version
nsExec::ExecToLog '"$PathLaTeX\mpm.exe" "--verbose" "--install-some=$INSTDIR\Resources\Packages.txt"'
${else}
${if} $MiKTeXUser != "HKCU" # call the admin version
nsExec::ExecToLog '"$PathLaTeX\mpm.exe" "--admin" "--verbose" "--install-some=$INSTDIR\Resources\Packages.txt"'
${else}
nsExec::ExecToLog '"$PathLaTeX\mpm.exe" "--verbose" "--install-some=$INSTDIR\Resources\Packages.txt"'
${endif}
${endif}
${endif}
DetailPrint $(TEXT_CONFIGURE_LYX)
nsExec::ExecToLog '"$INSTDIR\Python\python.exe" "$INSTDIR\Resources\configure.py"'
# $ConfigureReturn is "0" if successful, otherwise "1"
Pop $ConfigureReturn # Return value
SectionEnd
#--------------------------------
# Desktop shortcut
Function StartLyX
# run LyX in a command line window to give the users feedback about
# the time consuming LaTeX package installation
#Exec 'cmd /K " "$INSTDIR\bin\lyx.exe""'
Exec "$INSTDIR\${APP_RUN}"
FunctionEnd
/*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"
${NSD_SetState} $mui.FinishPage.ShowReadme ${BST_CHECKED}
${EndIf}
FunctionEnd
Function CreateDesktopShortcut
# Desktop icon creation is an option on the finish page
SetOutPath "$INSTDIR\bin"
CreateShortCut "$DESKTOP\${APP_NAME} ${APP_SERIES_NAME}.lnk" "$INSTDIR\${APP_RUN}" "" "$INSTDIR\${APP_RUN}" "" "" "" "${APP_INFO}"
FunctionEnd*/