From 4379ebcba8b4b640d5ea97e7c9d2750227a8e9ff Mon Sep 17 00:00:00 2001
From: Brian Matherly <brian@gramps-project.org>
Date: Tue, 28 Oct 2008 04:01:14 +0000
Subject: [PATCH] More Windows install updates contributed by Steve Hall and
 Stephen George <steve_geo@optusnet.com.au>.

svn: r11205
---
 windows/nsis/gcheck.py  |   1 +
 windows/nsis/gramps.nsi | 687 +++++++++++++++++++++-------------------
 2 files changed, 366 insertions(+), 322 deletions(-)

diff --git a/windows/nsis/gcheck.py b/windows/nsis/gcheck.py
index 8e48ef00e..86b870f6b 100644
--- a/windows/nsis/gcheck.py
+++ b/windows/nsis/gcheck.py
@@ -1,6 +1,7 @@
 #
 # Gramps - a GTK+/GNOME based genealogy program
 #
+# Copyright (C) 2008       Steve Hall
 # Copyright (C) 2008       Stephen George
 #
 # This program is free software; you can redistribute it and/or modify
diff --git a/windows/nsis/gramps.nsi b/windows/nsis/gramps.nsi
index c52432a96..5cfa7bcb4 100644
--- a/windows/nsis/gramps.nsi
+++ b/windows/nsis/gramps.nsi
@@ -1,9 +1,25 @@
 #
-# Filename: gramps.nsi
+# Gramps - a GTK+ based genealogy program
+#
+# Copyright (C) 2008 Steve Hall [ digitect dancingpaper com ]
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# $Id:  $
 #
 # Description: Nullsoft Installer (NSIS) file to build Windows installer:
-# Updated:     2007-06-18 07:09:38-0400
-# Author:      Steve Hall [ digitect dancingpaper com ]
 #
 # Requires:    NSIS version 2.0 or later.
 # Notes:
@@ -43,7 +59,7 @@ CRCCheck on
 
 # compression
 SetCompress auto
-# zlib good, bzip2 better, lzma best (and slowest, whew.) 
+# zlib good, bzip2 better, lzma best (and slowest, whew.)
 SetCompressor lzma
 # reference existing store if possible
 SetDatablockOptimize on
@@ -134,8 +150,47 @@ SilentInstall normal
 # 4. Custom functions {{{1
 
 # 5. Language files {{{1
+# Languages
+# TODO: These are pretty badly broken at the moment.
+# Note: This appears to be due to building on Win95 which does not
+#       support Unicode:
+#       (http://nsis.sf.net/archive/nsisweb.php?page=247&instances=0,235)
+#
+#   So what happens if we use only ASCII?
+#
+#!insertmacro MUI_LANGUAGE "Arabic"
+#!insertmacro MUI_LANGUAGE "Bulgarian"
+#!insertmacro MUI_LANGUAGE "Catalan"
+#!insertmacro MUI_LANGUAGE "Croatian"
+#!insertmacro MUI_LANGUAGE "Czech"
+#!insertmacro MUI_LANGUAGE "Default"
+#!insertmacro MUI_LANGUAGE "Estonian"
+#!insertmacro MUI_LANGUAGE "Farsi"
+#!insertmacro MUI_LANGUAGE "Finnish"
+#!insertmacro MUI_LANGUAGE "Greek"
+#!insertmacro MUI_LANGUAGE "Hebrew"
+#!insertmacro MUI_LANGUAGE "Hungarian"
+#!insertmacro MUI_LANGUAGE "Indonesian"
+#!insertmacro MUI_LANGUAGE "Japanese"
+#!insertmacro MUI_LANGUAGE "Korean"
+#!insertmacro MUI_LANGUAGE "Latvian"
+#!insertmacro MUI_LANGUAGE "Lithuanian"
+#!insertmacro MUI_LANGUAGE "Macedonian"
+#!insertmacro MUI_LANGUAGE "Norwegian"
+#!insertmacro MUI_LANGUAGE "Polish"
+#!insertmacro MUI_LANGUAGE "Romanian"
+#!insertmacro MUI_LANGUAGE "Russian"
+#!insertmacro MUI_LANGUAGE "Serbian"
+#!insertmacro MUI_LANGUAGE "SerbianLatin"
+#!insertmacro MUI_LANGUAGE "SimpChinese"
+#!insertmacro MUI_LANGUAGE "Slovak"
+#!insertmacro MUI_LANGUAGE "Slovenian"
+#!insertmacro MUI_LANGUAGE "Swedish"
+#!insertmacro MUI_LANGUAGE "Thai"
+#!insertmacro MUI_LANGUAGE "TradChinese"
+#!insertmacro MUI_LANGUAGE "Turkish"
+#!insertmacro MUI_LANGUAGE "Ukrainian"
 
-# Latin1
 !insertmacro MUI_LANGUAGE "Danish"
 !insertmacro MUI_LANGUAGE "Dutch"
 !insertmacro MUI_LANGUAGE "English"
@@ -146,40 +201,6 @@ SilentInstall normal
 !insertmacro MUI_LANGUAGE "PortugueseBR"
 !insertmacro MUI_LANGUAGE "Spanish"
 
-# non-Latin1 below (bugs in NSIS?)
-!insertmacro MUI_LANGUAGE "Arabic"
-!insertmacro MUI_LANGUAGE "Bulgarian"
-!insertmacro MUI_LANGUAGE "Catalan"
-!insertmacro MUI_LANGUAGE "Croatian"
-!insertmacro MUI_LANGUAGE "Czech"
-#!insertmacro MUI_LANGUAGE "Default"  <= WHAT IS THIS?
-!insertmacro MUI_LANGUAGE "Estonian"
-!insertmacro MUI_LANGUAGE "Farsi"
-!insertmacro MUI_LANGUAGE "Finnish"
-!insertmacro MUI_LANGUAGE "Greek"
-!insertmacro MUI_LANGUAGE "Hebrew"
-!insertmacro MUI_LANGUAGE "Hungarian"
-!insertmacro MUI_LANGUAGE "Indonesian"
-!insertmacro MUI_LANGUAGE "Japanese"
-!insertmacro MUI_LANGUAGE "Korean"
-!insertmacro MUI_LANGUAGE "Latvian"
-!insertmacro MUI_LANGUAGE "Lithuanian"
-!insertmacro MUI_LANGUAGE "Macedonian"
-!insertmacro MUI_LANGUAGE "Norwegian"
-!insertmacro MUI_LANGUAGE "Polish"
-!insertmacro MUI_LANGUAGE "Romanian"
-!insertmacro MUI_LANGUAGE "Russian"
-!insertmacro MUI_LANGUAGE "Serbian"
-!insertmacro MUI_LANGUAGE "SerbianLatin"
-!insertmacro MUI_LANGUAGE "SimpChinese"
-!insertmacro MUI_LANGUAGE "Slovak"
-!insertmacro MUI_LANGUAGE "Slovenian"
-!insertmacro MUI_LANGUAGE "Swedish"
-!insertmacro MUI_LANGUAGE "Thai"
-!insertmacro MUI_LANGUAGE "TradChinese"
-!insertmacro MUI_LANGUAGE "Turkish"
-!insertmacro MUI_LANGUAGE "Ukrainian"
-
 # 6. Reserve Files  {{{1
 
 # 1}}}
@@ -190,11 +211,11 @@ SilentInstall normal
 Section "Program files (required)" Main
 SectionIn 1 2 3 RO
 
-	Call WarnDirExists
+    Call WarnDirExists
 
-	SetOutPath $INSTDIR
-	File /r ..\src\*.*
-	#File /r ..\nsis\gramps.ico
+    SetOutPath $INSTDIR
+    File /r ..\src\*.*
+    #File /r ..\nsis\gramps.ico
 
 SectionEnd
 
@@ -204,19 +225,19 @@ SubSection "Menus and shortcuts" MenusAndIcons
 
 Section "Add GRAMPS to the Start Menu" MenuStart
 SectionIn 1 3
-	# determines "Start In" location for shortcuts
-	SetOutPath $INSTDIR
-	
-	StrCpy $0 "GRAMPS"
+    # determines "Start In" location for shortcuts
+    SetOutPath $INSTDIR
+   
+    StrCpy $0 "GRAMPS"
 
-	IfFileExists "$SMPROGRAMS\$0" 0 skipStartMenuRemove
-	RMDir /r "$SMPROGRAMS\$0\"
-	skipStartMenuRemove:
+    IfFileExists "$SMPROGRAMS\$0" 0 skipStartMenuRemove
+    RMDir /r "$SMPROGRAMS\$0\"
+    skipStartMenuRemove:
 
-	CreateDirectory "$SMPROGRAMS\$0\"
-	CreateShortCut "$SMPROGRAMS\$0\GRAMPS ${GRAMPS_VER_MAJOR}.${GRAMPS_VER_MINOR}.${GRAMPS_VER_POINT}-${GRAMPS_VER_BUILD}.lnk" "$3" "$\"$INSTDIR\gramps.py$\"" "$INSTDIR\images\ped24.ico" "0" "" "" "GRAMPS"
-	WriteINIStr "$SMPROGRAMS\$0\GRAMPS Website.url" "InternetShortcut" "URL" "http://www.gramps-project.org/"
-	CreateShortCut "$SMPROGRAMS\$0\Uninstall GRAMPS.lnk" "$\"$INSTDIR\uninstall.exe$\"" "" "" "0" "" "" "Uninstall GRAMPS"
+    CreateDirectory "$SMPROGRAMS\$0\"
+    CreateShortCut "$SMPROGRAMS\$0\GRAMPS ${GRAMPS_VER_MAJOR}.${GRAMPS_VER_MINOR}.${GRAMPS_VER_POINT}-${GRAMPS_VER_BUILD}.lnk" "$3" "$\"$INSTDIR\gramps.py$\"" "$INSTDIR\images\ped24.ico" "0" "" "" "GRAMPS"
+    WriteINIStr "$SMPROGRAMS\$0\GRAMPS Website.url" "InternetShortcut" "URL" "http://www.gramps-project.org/"
+    CreateShortCut "$SMPROGRAMS\$0\Uninstall GRAMPS.lnk" "$\"$INSTDIR\uninstall.exe$\"" "" "" "0" "" "" "Uninstall GRAMPS"
 
 SectionEnd
 
@@ -232,20 +253,22 @@ SubSectionEnd
 #    Language Files {{{1
 
 Section "Language Files" LangFiles
+# off by default
+#SectionIn 1 3
 
-	#CreateDirectory $INSTDIR\lang
-	SetOutPath $INSTDIR
-	File /r ..\po\*.mo
+    #CreateDirectory $INSTDIR\lang
+    SetOutPath $INSTDIR
+    File /r ..\po\*.mo
 
-	#MessageBox MB_OK "Setting up languages..."
-	# setup
-	; switches:
-	; -c 
-	; -t :: setup the language files
-	; -r
-	;
-	; pythonw grampsSetup.py -c -t
-	#Exec '"$3" $\"$INSTDIR\grampsSetup.py -c -t -r$\"'
+    #MessageBox MB_OK "Setting up languages..."
+    # setup
+    ; switches:
+    ; -c
+    ; -t :: setup the language files
+    ; -r
+    ;
+    ; pythonw grampsSetup.py -c -t
+    #Exec '"$3" $\"$INSTDIR\grampsSetup.py -c -t -r$\"'
 
 SectionEnd
 
@@ -266,9 +289,9 @@ SectionEnd
 ;
 ;   Example:
 ;   !insertmacro APP_ASSOCIATE \
-;	  "txt" \
-;	  "myapp.textfile" \
-;	  "myapp tiny description" \
+;      "txt" \
+;      "myapp.textfile" \
+;      "myapp tiny description" \
 ;     "$INSTDIR\myapp.exe,0" \
 ;     "Open with myapp" \
 ;     "$INSTDIR\myapp.exe $\"%1$\""
@@ -308,54 +331,54 @@ SectionEnd
 ;
 
 !macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND
-	; Backup the previously associated file class
-	ReadRegStr $R0 HKCR ".${EXT}" ""
-	WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0"
+    ; Backup the previously associated file class
+    ReadRegStr $R0 HKCR ".${EXT}" ""
+    WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0"
 
-	WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}"
-	WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}`
-	WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}`
-	WriteRegStr HKCR "${FILECLASS}\shell" "" "open"
-	WriteRegStr HKCR "${FILECLASS}\shell\open" "" `${COMMANDTEXT}`
-	WriteRegStr HKCR "${FILECLASS}\shell\open\command" "" `${COMMAND}`
+    WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}"
+    WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}`
+    WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}`
+    WriteRegStr HKCR "${FILECLASS}\shell" "" "open"
+    WriteRegStr HKCR "${FILECLASS}\shell\open" "" `${COMMANDTEXT}`
+    WriteRegStr HKCR "${FILECLASS}\shell\open\command" "" `${COMMAND}`
 !macroend
 
 !macro APP_ASSOCIATE_EX EXT FILECLASS DESCRIPTION ICON VERB DEFAULTVERB SHELLNEW COMMANDTEXT COMMAND
-	; Backup the previously associated file class
-	ReadRegStr $R0 HKCR ".${EXT}" ""
-	WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0"
+    ; Backup the previously associated file class
+    ReadRegStr $R0 HKCR ".${EXT}" ""
+    WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0"
 
-	WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}"
-	StrCmp "${SHELLNEW}" "0" +2
-	WriteRegStr HKCR ".${EXT}\ShellNew" "NullFile" ""
+    WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}"
+    StrCmp "${SHELLNEW}" "0" +2
+    WriteRegStr HKCR ".${EXT}\ShellNew" "NullFile" ""
 
-	WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}`
-	WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}`
-	WriteRegStr HKCR "${FILECLASS}\shell" "" `${DEFAULTVERB}`
-	WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}`
-	WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}`
+    WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}`
+    WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}`
+    WriteRegStr HKCR "${FILECLASS}\shell" "" `${DEFAULTVERB}`
+    WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}`
+    WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}`
 !macroend
 
 !macro APP_ASSOCIATE_ADDVERB FILECLASS VERB COMMANDTEXT COMMAND
-	WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}`
-	WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}`
+    WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}`
+    WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}`
 !macroend
 
 !macro APP_ASSOCIATE_REMOVEVERB FILECLASS VERB
-	DeleteRegKey HKCR `${FILECLASS}\shell\${VERB}`
+    DeleteRegKey HKCR `${FILECLASS}\shell\${VERB}`
 !macroend
 
 
 !macro APP_UNASSOCIATE EXT FILECLASS
-	; Backup the previously associated file class
-	ReadRegStr $R0 HKCR ".${EXT}" `${FILECLASS}_backup`
-	WriteRegStr HKCR ".${EXT}" "" "$R0"
+    ; Backup the previously associated file class
+    ReadRegStr $R0 HKCR ".${EXT}" `${FILECLASS}_backup`
+    WriteRegStr HKCR ".${EXT}" "" "$R0"
 
-	DeleteRegKey HKCR `${FILECLASS}`
+    DeleteRegKey HKCR `${FILECLASS}`
 !macroend
 
 !macro APP_ASSOCIATE_GETFILECLASS OUTPUT EXT
-	ReadRegStr ${OUTPUT} HKCR ".${EXT}" ""
+    ReadRegStr ${OUTPUT} HKCR ".${EXT}" ""
 !macroend
 
 
@@ -372,7 +395,7 @@ SectionEnd
 !macro UPDATEFILEASSOC
 ; Using the system.dll plugin to call the SHChangeNotify Win32 API function so we
 ; can update the shell.
-	System::Call "shell32::SHChangeNotify(i,i,i,i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_FLUSH}, 0, 0)"
+    System::Call "shell32::SHChangeNotify(i,i,i,i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_FLUSH}, 0, 0)"
 !macroend
 
 ;EOF
@@ -383,41 +406,41 @@ Section "File Association" FileAssoc
 SectionIn 1 3
 # depends on FileAssoc.nsh, by Saivert (http://nsis.sourceforge.net/FileAssoc)
 
-	# .grdb
-	!insertmacro APP_ASSOCIATE \
-	  "grdb" \
-	  "application/x-gramps-database" \
-	  "GRAMPS database file" \
-	 "$INSTDIR\images\ped24.ico" \
-	 "Open with GRAMPS" \
-	 "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
+    # .grdb
+    !insertmacro APP_ASSOCIATE \
+      "grdb" \
+      "application/x-gramps-database" \
+      "GRAMPS database file" \
+     "$INSTDIR\images\ped24.ico" \
+     "Open with GRAMPS" \
+     "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
 
-	# .gramps
-	!insertmacro APP_ASSOCIATE \
-	  "gramps" \
-	  "application/x-gramps-file" \
-	  "GRAMPS application file" \
-	 "$INSTDIR\images\ped24.ico" \
-	 "Open with GRAMPS" \
-	 "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
+    # .gramps
+    !insertmacro APP_ASSOCIATE \
+      "gramps" \
+      "application/x-gramps-file" \
+      "GRAMPS application file" \
+     "$INSTDIR\images\ped24.ico" \
+     "Open with GRAMPS" \
+     "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
 
-	# .gpkg
-	!insertmacro APP_ASSOCIATE \
-	  "gpkg" \
-	  "application/x-gramps-package" \
-	  "GRAMPS package file" \
-	 "$INSTDIR\images\ped24.ico" \
-	 "Open with GRAMPS" \
-	 "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
+    # .gpkg
+    !insertmacro APP_ASSOCIATE \
+      "gpkg" \
+      "application/x-gramps-package" \
+      "GRAMPS package file" \
+     "$INSTDIR\images\ped24.ico" \
+     "Open with GRAMPS" \
+     "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
 
-	# .ged
-	!insertmacro APP_ASSOCIATE \
-	  "ged" \
-	  "application/x-gramps-gedcom" \
-	  "GEnealogical Data COMmunication (GEDCOM) file" \
-	 "$INSTDIR\images\ped24.ico" \
-	 "Open with GRAMPS" \
-	 "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
+    # .ged
+    !insertmacro APP_ASSOCIATE \
+      "ged" \
+      "application/x-gramps-gedcom" \
+      "GEnealogical Data COMmunication (GEDCOM) file" \
+     "$INSTDIR\images\ped24.ico" \
+     "Open with GRAMPS" \
+     "$\"$3$\" $\"$INSTDIR\gramps.py$\" $\"%1$\""
 
 SectionEnd
 
@@ -426,22 +449,22 @@ SectionEnd
 
 Section Uninstall
 
-	# ask first
-	MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 \
-		"Completely remove installation? $\n\
-		(Delete folder $INSTDIR ) " \
-		IDNO unQuit IDYES unContinue
+    # ask first
+    MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 \
+        "Completely remove installation? $\n\
+        (Delete folder $INSTDIR ) " \
+        IDNO unQuit IDYES unContinue
 
-	unQuit:
-	Abort
+    unQuit:
+    Abort
 
-	unContinue:
-	ClearErrors
-	RMDir /r $INSTDIR
-	Call un.StartMenu
-	Call un.Desktop
+    unContinue:
+    ClearErrors
+    RMDir /r $INSTDIR
+    Call un.StartMenu
+    Call un.Desktop
 
-	unEnd:
+    unEnd:
 
 SectionEnd
 
@@ -454,196 +477,216 @@ Function .onInit
 
 #MessageBox MB_OK "Testing dependencies..."
 
-	; look for pythonw.exe
-	; NOTE: This is set to $3 if it exists.
+    ; look for pythonw.exe
+    ; NOTE: This is set to $3 if it exists.
 
-	; on path
-	SearchPath $3 pythonw.exe
+    ; on path
+    SearchPath $3 pythonw.exe
 #MessageBox MB_OK "DEBUG: Testing pythonw.exe on path...$\n$\nFound:  $\"$3$\""
-	IfFileExists $3 HavePython 0
+    IfFileExists $3 HavePython 0
 
-	; registry keys (these are confirmed possibilities)
-	; reg key
-	ReadRegStr $3 HKLM 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\python.exe' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key (updated on 2.5 upgrade)
-	ReadRegStr $3 HKCR 'Python.File\shell\open\command' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key (updated on 2.5 upgrade)
-	ReadRegStr $3 HKCU 'Software\Classes\Python.File\shell\open\command' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKCU 'Software\Microsoft\Windows\Current version\App Paths\Python.exe' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKCU 'Software\Microsoft\Windows\ShellNoRoam\MUICache (data:python)' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key (Python version 2.5)
-	ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.5\InstallPath' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key (Python version 2.4)
-	ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.4\InstallPath' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	# these hold compound paths
-	#; reg key (Python version 2.5)
-	#ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.5\PythonPath' ""
-	#StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	#IfFileExists $3 HavePython 0
-	#; reg key (Python version 2.4)
-	#ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.4\PythonPath' ""
-	#StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	#IfFileExists $3 HavePython 0
+    ; registry keys (these are confirmed possibilities)
+    ; reg key
+    ReadRegStr $3 HKLM 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\python.exe' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key (updated on 2.5 upgrade)
+    ReadRegStr $3 HKCR 'Python.File\shell\open\command' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key (updated on 2.5 upgrade)
+    ReadRegStr $3 HKCU 'Software\Classes\Python.File\shell\open\command' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKCU 'Software\Microsoft\Windows\Current version\App Paths\Python.exe' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKCU 'Software\Microsoft\Windows\ShellNoRoam\MUICache (data:python)' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key (Python version 2.5)
+    ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.5\InstallPath' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key (Python version 2.4)
+    ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.4\InstallPath' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    # these hold compound paths
+    #; reg key (Python version 2.5)
+    #ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.5\PythonPath' ""
+    #StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    #IfFileExists $3 HavePython 0
+    #; reg key (Python version 2.4)
+    #ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.4\PythonPath' ""
+    #StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    #IfFileExists $3 HavePython 0
 
-	; Keys not prone to be properly updated on upgrades	
-	; reg key 
-	ReadRegStr $3 HKCR 'Applications\python.exe\shell\open\command' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key (not updated on 2.5 upgrade)
-	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.5\PythonPath' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4\PythonPath' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.5' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.5\InstallPath' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
-	; reg key
-	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4\InstallPath' ""
-	StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
-	IfFileExists $3 HavePython 0
+    ; Keys not prone to be properly updated on upgrades   
+    ; reg key
+    ReadRegStr $3 HKCR 'Applications\python.exe\shell\open\command' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key (not updated on 2.5 upgrade)
+    ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.5\PythonPath' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4\PythonPath' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.5' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.5\InstallPath' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
+    ; reg key
+    ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4\InstallPath' ""
+    StrCpy $3 "$3pythonw.exe"  ; append "pythonw.exe"
+    IfFileExists $3 HavePython 0
 
 
-	; TODO: request path from user/browse (can NSIS do this?)
-		MessageBox MB_OK "GRAMPS requires Python to be installed, please see:$\n \
-		  $\n \
-		  http://gramps-project.org/windows/ $\n \
-		  $\n \
-		  for installation help. Unable to continue installation."
-		Abort
-		HavePython:
+    ; TODO: request path from user/browse (can NSIS do this?)
+        #MessageBox MB_OK "GRAMPS requires Python to be installed, please see:$\n \
+        #  $\n \
+        #  http://gramps-project.org/windows/ $\n \
+        #  $\n \
+        #  for installation help. Unable to continue installation."
+        #Abort
+        MessageBox MB_OK "Python not found."
+        StrCpy $4 "flag"
+        HavePython:
 #MessageBox MB_OK "DEBUG: Final path for pythonw.exe...$\n$\nFound:  $\"$3$\""
 
-	; extract gcheck
-	SetOutPath $TEMP
+    ; extract gcheck
+    SetOutPath $TEMP
 #MessageBox MB_OK "DEBUG: $$TEMP location found:$\n$\n  $TEMP"
-	File gcheck.py
-	; set INI output location ($1)
-	StrCpy $1 "$TEMP\gramps-install.ini"
+    File gcheck.py
+    ; set INI output location ($1)
+    StrCpy $1 "$TEMP\gramps-install.ini"
 #MessageBox MB_OK "DEBUG: Attempting to run:$\n$\n  $\"$3$\" $TEMP\gcheck.py $1"
-	; run gcheck
-	Exec '"$3" $TEMP\gcheck.py $1'
+    ; run gcheck
+    Exec '"$3" $TEMP\gcheck.py $1'
+    #Exec '"$3" "$TEMP\gcheck.py" "$1"'
+    #Exec '$\"$3$\" $\"$TEMP\gcheck.py$\" $\"$1$\"'
 
-	; Note The Exec above is a fork, meaning the following file test
-	;      will fail because it happens faster than the Exec can run
-	;      to create it!
-	DetailPrint "Pausing for gcheck.py exectution..."
-	; sleep
-	Sleep 6000
+    #; Note The Exec above is a fork, meaning the following file test
+    #;      will fail because it happens faster than the Exec can run
+    #;      to create it!
+    DetailPrint "Pausing for gcheck.py exectution..."
+    #; sleep
+    Sleep 1000
 
-	; verify INI created
-	IfFileExists $1 YesINI 0
-		MessageBox MB_OK "Dependency test INI creation failed, unable to continue."
-		Abort
-		YesINI:
+    ; verify INI created
+    IfFileExists $1 YesINI 0
+        #MessageBox MB_OK "Dependency test INI creation failed, unable to continue."
+        #Abort
+        MessageBox MB_OK "Dependency test INI creation failed."
+        StrCpy $4 "flag"
+        YesINI:
 
-	; verify environment test results
-	; GTK+ and pygtk
-	ReadINIStr $0 $1 tests gtk
-	StrCmp $0 "yes" HaveGTK 0
+    ; verify environment test results
+    ; GTK+ and pygtk
+    ReadINIStr $0 $1 tests gtk
+    StrCmp $0 "yes" HaveGTK 0
 
-		; TODO: if no, perhaps just have GTK+ installed, check registry
-		; reg key
-		ReadRegStr $3 HKCU 'Environment\GTK_BASEPATH' ""
-		IfFileExists $3\*.* NoHavePyGTK 0
-		; reg key
-		ReadRegStr $3 HKCU 'Software\GTK\2.0\Path' ""
-		IfFileExists $3\*.* NoHavePyGTK 0
-		; reg key
-		ReadRegStr $3 HKLM 'Software\GTK\2.0\Path' ""
-		IfFileExists $3\*.* NoHavePyGTK 0
-		; reg key
-		ReadRegStr $3 HKLM 'Software\GTK\2.0\DllPath' ""
-		IfFileExists $3\*.* NoHavePyGTK 0
-		
-		; if we make it this far, we don't have GTK+
-		MessageBox MB_OK "GRAMPS requires GTK+ and PyGTK to be installed, please see:$\n \
-		  $\n \
-		  http://gramps-project.org/windows/ $\n \
-		  $\n \
-		  for installation help. Unable to continue installation."
-		Abort
+        ; TODO: if no, perhaps just have GTK+ installed, check registry
+        ; reg key
+        ReadRegStr $3 HKCU 'Environment\GTK_BASEPATH' ""
+        IfFileExists $3\*.* NoHavePyGTK 0
+        ; reg key
+        ReadRegStr $3 HKCU 'Software\GTK\2.0\Path' ""
+        IfFileExists $3\*.* NoHavePyGTK 0
+        ; reg key
+        ReadRegStr $3 HKLM 'Software\GTK\2.0\Path' ""
+        IfFileExists $3\*.* NoHavePyGTK 0
+        ; reg key
+        ReadRegStr $3 HKLM 'Software\GTK\2.0\DllPath' ""
+        IfFileExists $3\*.* NoHavePyGTK 0
+       
+        ; if we make it this far, we don't have GTK+
+        #MessageBox MB_OK "GRAMPS requires GTK+ and PyGTK to be installed, please see:$\n \
+        #  $\n \
+        #  http://gramps-project.org/windows/ $\n \
+        #  $\n \
+        #  for installation help. Unable to continue installation."
+        #Abort
+        MessageBox MB_OK "GTK+ and PyGTK not found."
+        StrCpy $4 "flag"
 
-		NoHavePyGTK:
-		MessageBox MB_OK "GTK+/PyGTK import failed (GTK+ found on system), please see:$\n \
-		  $\n \
-		  http://gramps-project.org/windows/ $\n \
-		  $\n \
-		  for installation help. Unable to continue installation."
-		Abort
+        NoHavePyGTK:
+        #MessageBox MB_OK "PyGTK import failed (GTK+ found on system), please see:$\n \
+        #  $\n \
+        #  http://gramps-project.org/windows/ $\n \
+        #  $\n \
+        #  for installation help. Unable to continue installation."
+        #Abort
+        MessageBox MB_OK "PyGTK not found."
+        StrCpy $4 "flag"
 
-		HaveGTK:
+        HaveGTK:
 
-	# NOTE: we can not detect just pygtk via gcheck.py
+    # NOTE: we can not detect just pygtk via gcheck.py
 
-	; glade
-	ReadINIStr $0 $1 tests glade
-	StrCmp $0 "yes" Haveglade 0
-		MessageBox MB_OK "glade not installed, unable to continue."
-		Abort
-		Haveglade:
-	; pycairo
-	ReadINIStr $0 $1 tests pycairo
-	StrCmp $0 "yes" Havepycairo 0
-		MessageBox MB_OK "pycairo not installed, unable to continue."
-		Abort
-		Havepycairo:
+    ; glade
+    ReadINIStr $0 $1 tests glade
+    StrCmp $0 "yes" Haveglade 0
+        #MessageBox MB_OK "glade not installed, unable to continue."
+        #Abort
+        MessageBox MB_OK "Glade not found."
+        StrCpy $4 "flag"
+        Haveglade:
+    ; pycairo
+    ReadINIStr $0 $1 tests pycairo
+    StrCmp $0 "yes" Havepycairo 0
+        #MessageBox MB_OK "pycairo not installed, unable to continue."
+        #Abort
+        MessageBox MB_OK "pycairo not found."
+        StrCpy $4 "flag"
+        Havepycairo:
 
-	#!insertmacro MUI_LANGDLL_DISPLAY
+    #!insertmacro MUI_LANGDLL_DISPLAY
 
-	# default install directory ($INSTDIR)
-	StrCpy $INSTDIR $PROGRAMFILES\gramps
+    StrCmp $4 "flag" +1 DependantsOK
+    MessageBox MB_OK "At least one dependency was not found, unable to continue."
+    Abort
+
+    DependantsOK:
+
+    # default install directory ($INSTDIR)
+    StrCpy $INSTDIR $PROGRAMFILES\gramps
 
 FunctionEnd
 
 Function .onInstSuccess
 
-	# write uninstaller
-	WriteUninstaller $INSTDIR\uninstall.exe
+    # write uninstaller
+    WriteUninstaller $INSTDIR\uninstall.exe
 
 FunctionEnd
 
 Function .onInstFailed
-	MessageBox MB_OK|MB_ICONEXCLAMATION "Installation failed."
+    MessageBox MB_OK|MB_ICONEXCLAMATION "Installation failed."
 FunctionEnd
 
 Function WarnDirExists
-	# warn if dir already exists
-	IfFileExists $INSTDIR\*.* DirExists DirExistsOK
-	DirExists:
-	MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 \
-		"Install over existing?" \
-		IDYES DirExistsOK
-	Quit
-	DirExistsOK:
+    # warn if dir already exists
+    IfFileExists $INSTDIR\*.* DirExists DirExistsOK
+    DirExists:
+    MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 \
+        "Install over existing?" \
+        IDYES DirExistsOK
+    Quit
+    DirExistsOK:
 FunctionEnd
 
 #    Uninstaller {{{1
@@ -655,17 +698,17 @@ FunctionEnd
 
 Function un.StartMenu
 
-	IfFileExists "$SMPROGRAMS\GRAMPS" 0 unStartMenuFine
-	RMDir /r "$SMPROGRAMS\GRAMPS\"
-	unStartMenuFine:
+    IfFileExists "$SMPROGRAMS\GRAMPS" 0 unStartMenuFine
+    RMDir /r "$SMPROGRAMS\GRAMPS\"
+    unStartMenuFine:
 
 FunctionEnd
 
 Function un.Desktop
 
-	IfFileExists "$DESKTOP\GRAMPS.lnk" 0 unNoDesktop
-	Delete "$DESKTOP\GRAMPS.lnk"
-	unNoDesktop:
+    IfFileExists "$DESKTOP\GRAMPS.lnk" 0 unNoDesktop
+    Delete "$DESKTOP\GRAMPS.lnk"
+    unNoDesktop:
 
 FunctionEnd
 
@@ -674,25 +717,25 @@ FunctionEnd
 ######################################################################
 # (must be last)
 
-	LangString DESC_Main ${LANG_ENGLISH} "Main program files (required)."
-	LangString DESC_MenusAndIcons ${LANG_ENGLISH} "General Desktop and Start Menu shortcut options."
-	LangString DESC_Desktop ${LANG_ENGLISH} "Add icon to the Desktop."
-	LangString DESC_MenuStart ${LANG_ENGLISH} "Add icons to the Start Menu."
-	LangString DESC_LangFiles ${LANG_ENGLISH} "Set up non-English languages."
-	LangString DESC_FileAssoc ${LANG_ENGLISH} "Associate GRAMPS with .grdb, .gramps, .gpkg, and .ged files."
-	LangString DESC_Prog ${LANG_ENGLISH} "GRAMPS..."
+    LangString DESC_Main ${LANG_ENGLISH} "Main program files (required)."
+    LangString DESC_MenusAndIcons ${LANG_ENGLISH} "General Desktop and Start Menu shortcut options."
+    LangString DESC_Desktop ${LANG_ENGLISH} "Add icon to the Desktop."
+    LangString DESC_MenuStart ${LANG_ENGLISH} "Add icons to the Start Menu."
+    LangString DESC_LangFiles ${LANG_ENGLISH} "Set up non-English languages."
+    LangString DESC_FileAssoc ${LANG_ENGLISH} "Associate GRAMPS with .grdb, .gramps, .gpkg, and .ged files."
+    LangString DESC_Prog ${LANG_ENGLISH} "GRAMPS..."
 
 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
 
-	!insertmacro MUI_DESCRIPTION_TEXT ${Main} $(DESC_Main)
-	!insertmacro MUI_DESCRIPTION_TEXT ${MenusAndIcons} $(DESC_MenusAndIcons)
-	!insertmacro MUI_DESCRIPTION_TEXT ${Desktop} $(DESC_Desktop)
-	!insertmacro MUI_DESCRIPTION_TEXT ${MenuStart} $(DESC_MenuStart)
-	!insertmacro MUI_DESCRIPTION_TEXT ${LangFiles} $(DESC_LangFiles)
-	!insertmacro MUI_DESCRIPTION_TEXT ${FileAssoc} $(DESC_FileAssoc)
-	!insertmacro MUI_DESCRIPTION_TEXT ${Prog} $(DESC_Prog)
+    !insertmacro MUI_DESCRIPTION_TEXT ${Main} $(DESC_Main)
+    !insertmacro MUI_DESCRIPTION_TEXT ${MenusAndIcons} $(DESC_MenusAndIcons)
+    !insertmacro MUI_DESCRIPTION_TEXT ${Desktop} $(DESC_Desktop)
+    !insertmacro MUI_DESCRIPTION_TEXT ${MenuStart} $(DESC_MenuStart)
+    !insertmacro MUI_DESCRIPTION_TEXT ${LangFiles} $(DESC_LangFiles)
+    !insertmacro MUI_DESCRIPTION_TEXT ${FileAssoc} $(DESC_FileAssoc)
+    !insertmacro MUI_DESCRIPTION_TEXT ${Prog} $(DESC_Prog)
 
 !insertmacro MUI_FUNCTION_DESCRIPTION_END
 
 # 1}}}
-# vim:foldmethod=marker:noexpandtab
+# vim:foldmethod=marker:noexpandtab
\ No newline at end of file