lyx_mirror/development/Win32/packaging/installer/include/detection.nsh
Joost Verburg 6fa7502129 locate local MiKTeX root and install dvipost
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24074 a592a061-630c-0410-9148-cb99ea01b6c8
2008-03-31 15:31:09 +00:00

162 lines
3.5 KiB
Plaintext

/*
detection.nsh
Detection of external component locations
*/
Function SearchExternal
Call SearchLaTeX
Call SearchGhostscript
Call SearchImageMagick
FunctionEnd
#--------------------------------
# MiKTeX
Var ReportReturn
Var CommandLineOutput
Var LastChar
Var PathLength
!macro SEARCH_MIKTEX25
# Search location of MiKTeX installation using initexmf
# Works for version 2.5 and later
nsExec::ExecToStack "initexmf.exe --report"
Pop $ReportReturn
Pop $CommandLineOutput
${WordFind2X} $CommandLineOutput "BinDir: " "$\r" "+1" $PathLaTeX
${WordFind2X} $CommandLineOutput "CommonData: " "$\r" "+1" $PathLaTeXLocal # Local root
!macroend
!macro SEARCH_MIKTEX24 ROOTKEY
ReadRegStr $PathLaTeX ${ROOTKEY} "Software\MiK\MiKTeX\CurrentVersion\MiKTeX" "Install Root"
${If} $PathLaTeX != ""
StrCpy $LastChar $PathLaTeX 1 -1
${If} $LastChar == "\"
# Trim backslash
StrLen $PathLength $PathLaTeX
IntOp $PathLength $PathLength - 1
StrCpy $PathLaTeX $PathLaTeX $PathLength
${EndIf}
StrCpy $PathLaTeX "$PathLaTeX\miktex\bin"
#Local root
ReadRegStr $PathLaTeXLocal ${ROOTKEY} "Software\MiK\MiKTeX\CurrentVersion\MiKTeX" "Local Root"
${EndIf}
!macroend
Function SearchLaTeX
# Search where MikTeX is installed
!insertmacro SEARCH_MIKTEX25
${IfNot} ${FileExists} "$PathLaTeX\${BIN_LATEX}"
!insertmacro SEARCH_MIKTEX24 HKCU
${EndIf}
${IfNot} ${FileExists} "$PathLaTeX\${BIN_LATEX}"
!insertmacro SEARCH_MIKTEX24 HKLM
${EndIf}
${IfNot} ${FileExists} "$PathLaTeX\${BIN_LATEX}"
StrCpy $PathLateX ""
${EndIf}
FunctionEnd
#--------------------------------
# Ghostscript
Var Counter
Var EnumReturn
Var CompareReturn
Var AFPLVersion
Var GPLVersion
Function SearchGhostscript
# Search where Ghostscript is installed
# Find the latest version of AFPL Ghostscript installed
StrCpy $Counter 0
${do}
EnumRegKey $EnumReturn HKLM "Software\AFPL Ghostscript" $Counter
${If} $EnumReturn != ""
${VersionCompare} $EnumReturn $AFPLVersion $CompareReturn
${If} $CompareReturn == "1"
StrCpy $AFPLVersion $EnumReturn
${EndIf}
IntOp $Counter $Counter + 1
${EndIf}
${loopuntil} $EnumReturn == ""
# The same for GPL Ghostscript
StrCpy $Counter 0
${do}
EnumRegKey $EnumReturn HKLM "Software\GPL Ghostscript" $Counter
${If} $EnumReturn != ""
${VersionCompare} $EnumReturn $GPLVersion $CompareReturn
${If} $CompareReturn == "1"
StrCpy $GPLVersion $EnumReturn
${EndIf}
IntOp $Counter $Counter + 1
${EndIf}
${loopuntil} $EnumReturn == ""
# Take the latest one
${VersionCompare} $AFPLVersion $GPLVersion $CompareReturn
${If} $CompareReturn = 1
# AFPL is newer
ReadRegStr $PathGhostscript HKLM "Software\AFPL Ghostscript\$R3" "GS_DLL"
${Else}
# GPL is newer or equal
ReadRegStr $PathGhostscript HKLM "Software\GPL Ghostscript\$R4" "GS_DLL"
${EndIf}
# Trim the DLL filename to get the path
${GetParent} $PathGhostscript $PathGhostscript
${IfNot} ${FileExists} "$PathGhostscript\${BIN_GHOSTSCRIPT}"
StrCpy $PathGhostscript ""
${EndIf}
FunctionEnd
#--------------------------------
# ImageMagick
Function SearchImageMagick
# Search where ImageMagick is installed
ReadRegStr $PathImageMagick HKLM "Software\ImageMagick\Current" "BinPath"
${IfNot} ${FileExists} "$PathImageMagick\${BIN_IMAGEMAGICK}"
StrCpy $PathImageMagick ""
${EndIf}
FunctionEnd