BUG: Fix un-install of desktop icon which is currently broken BUG: Intermittent failure of dependencies check in installer based on how long gcheck.py takes to run ENHANCEMENT: Add Gramps un-install info to Windows Add/Remove programs ENHANCEMENT: Option to remove existing installation of gramps prior to installing new version svn: r11283
		
			
				
	
	
		
			777 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			NSIS
		
	
	
	
	
	
			
		
		
	
	
			777 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			NSIS
		
	
	
	
	
	
| #
 | |
| # Gramps - a GTK+ based genealogy program
 | |
| #
 | |
| # Copyright (C) 2006-2008 Steve Hall <digitect dancingpaper com>
 | |
| # Copyright (C) 2008 Stephen George
 | |
| #
 | |
| # 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:
 | |
| #
 | |
| # Requires:    NSIS version 2.0 or later.
 | |
| # Notes:
 | |
| # o WARNING: if you make changes to this script, look out for $INSTDIR
 | |
| #   to be valid, because this line is very dangerous:  RMDir /r $INSTDIR
 | |
| # o WARNING: Except the uninstaller. That re-paths for some reason.
 | |
| #
 | |
| 
 | |
| # ToDo {{{1
 | |
| #
 | |
| # o More refined dependency checking (versioning)
 | |
| # o Add .gramps and .gpkg as extensions
 | |
| #   * => Need separate icons for them?
 | |
| #
 | |
| # 1}}}
 | |
| #               Installer Attributes
 | |
| # 0. Base Settings {{{1
 | |
| 
 | |
| # version numbers
 | |
| !define GRAMPS_VER_MAJOR $%VERSION%
 | |
| !define GRAMPS_VER_MINOR $%VERSIONSUB%
 | |
| !define GRAMPS_VER_POINT $%VERSIONPT%
 | |
| !define GRAMPS_VER_BUILD $%VERSIONBUILD%
 | |
| 
 | |
| ; HM NIS Edit Wizard helper defines
 | |
| !define PRODUCT_NAME "GRAMPS"
 | |
| !define PRODUCT_VERSION ${GRAMPS_VER_MAJOR}.${GRAMPS_VER_MINOR}.${GRAMPS_VER_POINT}-${GRAMPS_VER_BUILD}
 | |
| !define PRODUCT_PUBLISHER "The GRAMPS project"
 | |
| !define PRODUCT_WEB_SITE "http://gramps-project.org"
 | |
| !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
 | |
| !define PRODUCT_UNINST_ROOT_KEY "HKLM"
 | |
| 
 | |
| !define DESKTOP_LINK "$DESKTOP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk"
 | |
| 
 | |
| # adds Native Language Support
 | |
| !define HAVE_NLS
 | |
| 
 | |
| # output file
 | |
| Name ${PRODUCT_NAME}
 | |
| OutFile gramps-${PRODUCT_VERSION}.exe
 | |
| 
 | |
| # self ensure we don't have a corrupted file
 | |
| CRCCheck on
 | |
| 
 | |
| # compression
 | |
| SetCompress auto
 | |
| # zlib good, bzip2 better, lzma best (and slowest, whew.)
 | |
| SetCompressor lzma
 | |
| # reference existing store if possible
 | |
| SetDatablockOptimize on
 | |
| # UPX
 | |
| # comment next line if you don't have UPX (http://upx.sourceforge.net)
 | |
| !packhdr temp.dat "upx --best --compress-icons=0 temp.dat"
 | |
| 
 | |
| SetOverwrite try
 | |
| 
 | |
| # don't allow installation into C:\ directory
 | |
| AllowRootDirInstall false
 | |
| 
 | |
| # install details color scheme
 | |
| InstallColors /windows
 | |
| # background
 | |
| BGGradient off
 | |
| 
 | |
| # adds an XP manifest
 | |
| XPStyle on
 | |
| 
 | |
| # default install path
 | |
| InstallDir $PROGRAMFILES\gramps
 | |
| 
 | |
| # Remember install folder
 | |
| InstallDirRegKey HKCU "Software\${PRODUCT_NAME}" ""
 | |
| 
 | |
| # Remember the installer language
 | |
| !define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
 | |
| !define MUI_LANGDLL_REGISTRY_KEY "Software\${PRODUCT_NAME}"
 | |
| !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
 | |
| 
 | |
| # types of installs we can perform
 | |
| InstType Typical
 | |
| InstType Minimal
 | |
| InstType Full
 | |
| 
 | |
| SilentInstall normal
 | |
| 
 | |
| # 1. Header file (Begin Modern User Interface)  {{{1
 | |
| !include "MUI.nsh"
 | |
| 
 | |
| # 2. Interface Configuration {{{1
 | |
| 
 | |
| # installer/uninstaller icons (these must match in size!)
 | |
| #!define MUI_ICON "classic-install.ico"
 | |
| #!define MUI_UNICON "classic-uninstall.ico"
 | |
| 
 | |
| # splash, header graphics (same for both!)
 | |
| !define MUI_HEADERIMAGE
 | |
| #!define MUI_HEADERIMAGE_BITMAP "win.bmp"
 | |
| #!define MUI_WELCOMEFINISHPAGE_BITMAP "nsis-splash.bmp"
 | |
| 
 | |
| !define MUI_LICENSEPAGE_BUTTON $(^AgreeBtn)
 | |
| !define MUI_LICENSEPAGE_RADIOBUTTONS
 | |
| !define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT $(^AcceptBtn)
 | |
| !define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE $(^DontAcceptBtn)
 | |
| 
 | |
| #!define MUI_COMPONENTSPAGE_CHECKBITMAP "nsis-checkboxes.bmp"
 | |
| # use small description box below components (not adjacent)
 | |
| !define MUI_COMPONENTSPAGE_SMALLDESC
 | |
| 
 | |
| !define MUI_DIRECTORYPAGE_TEXT_TOP $(^DirText)
 | |
| !define MUI_DIRECTORYPAGE_TEXT_DESTINATION $(^DirBrowseText)
 | |
| !define MUI_DIRECTORYPAGE_VERIFYONLEAVE
 | |
| 
 | |
| !define MUI_FINISHPAGE_RUN "$3"
 | |
| !define MUI_FINISHPAGE_RUN_PARAMETERS "$\"$INSTDIR\gramps.py$\""
 | |
| 
 | |
| !define MUI_ABORTWARNING
 | |
| 
 | |
| # 3. Pages {{{1
 | |
| 
 | |
| !insertmacro MUI_PAGE_WELCOME
 | |
| 
 | |
| !insertmacro MUI_PAGE_LICENSE "..\COPYING"
 | |
| 
 | |
| !insertmacro MUI_PAGE_COMPONENTS
 | |
| !insertmacro MUI_PAGE_DIRECTORY
 | |
| !insertmacro MUI_PAGE_INSTFILES
 | |
| !insertmacro MUI_PAGE_FINISH
 | |
| 
 | |
| 
 | |
| # Uninstaller
 | |
| 
 | |
| !insertmacro MUI_UNPAGE_CONFIRM
 | |
| !insertmacro MUI_UNPAGE_INSTFILES
 | |
| 
 | |
| # 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"
 | |
| 
 | |
| !insertmacro MUI_LANGUAGE "Danish"
 | |
| !insertmacro MUI_LANGUAGE "Dutch"
 | |
| !insertmacro MUI_LANGUAGE "English"
 | |
| !insertmacro MUI_LANGUAGE "French"
 | |
| !insertmacro MUI_LANGUAGE "German"
 | |
| !insertmacro MUI_LANGUAGE "Italian"
 | |
| !insertmacro MUI_LANGUAGE "Portuguese"
 | |
| !insertmacro MUI_LANGUAGE "PortugueseBR"
 | |
| !insertmacro MUI_LANGUAGE "Spanish"
 | |
| 
 | |
| # 6. Reserve Files  {{{1
 | |
| 
 | |
| # 1}}}
 | |
| #               7a. Sections
 | |
| #    Program Files {{{1
 | |
| ######################################################################
 | |
| 
 | |
| Section "Program files (required)" Main
 | |
| SectionIn 1 2 3 RO
 | |
| 
 | |
|     Call WarnDirExists
 | |
| 
 | |
|     SetOutPath $INSTDIR
 | |
|     File /r ..\src\*.*
 | |
|     File ..\COPYING
 | |
|     File ..\NEWS
 | |
|     File ..\FAQ
 | |
|     File ..\AUTHORS
 | |
|     #File /r ..\nsis\gramps.ico
 | |
|     WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "" "$INSTDIR"
 | |
|     WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "version" ${PRODUCT_VERSION}
 | |
| 
 | |
| SectionEnd
 | |
| 
 | |
| #    Menus and shortcuts {{{1
 | |
| 
 | |
| 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"
 | |
| 
 | |
|     IfFileExists "$SMPROGRAMS\$0" 0 skipStartMenuRemove
 | |
|     RMDir /r "$SMPROGRAMS\$0\"
 | |
|     skipStartMenuRemove:
 | |
| 
 | |
|     CreateDirectory "$SMPROGRAMS\$0\"
 | |
|     CreateShortCut "$SMPROGRAMS\$0\GRAMPS ${PRODUCT_VERSION}.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
 | |
| 
 | |
| Section "Add Desktop icon" Desktop
 | |
| #SectionIn 1 3
 | |
| # determines "Start In" location for shortcuts
 | |
| SetOutPath $INSTDIR
 | |
| CreateShortCut "${DESKTOP_LINK}" "$3" "$\"$INSTDIR\gramps.py$\"" "$INSTDIR\images\ped24.ico" "0" "" "" "GRAMPS"
 | |
| SectionEnd
 | |
| 
 | |
| SubSectionEnd
 | |
| 
 | |
| #    Language Files {{{1
 | |
| 
 | |
| Section "Language Files" LangFiles
 | |
| # off by default
 | |
| #SectionIn 1 3
 | |
| 
 | |
|     #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$\"'
 | |
| 
 | |
| SectionEnd
 | |
| 
 | |
| #    File Association {{{1
 | |
| 
 | |
| #    FileAssoc.nsh macro {{{2
 | |
| ;
 | |
| ; FileAssoc.nsh (http://nsis.sourceforge.net/FileAssoc)
 | |
| ; File association helper macros
 | |
| ; Written by Saivert
 | |
| ;
 | |
| ; Features automatic backup system and UPDATEFILEASSOC macro for
 | |
| ; shell change notification.
 | |
| ;
 | |
| ; |> How to use <|
 | |
| ; To associate a file with an application so you can double-click it in explorer, use
 | |
| ; the APP_ASSOCIATE macro like this:
 | |
| ;
 | |
| ;   Example:
 | |
| ;   !insertmacro APP_ASSOCIATE \
 | |
| ;      "txt" \
 | |
| ;      "myapp.textfile" \
 | |
| ;      "myapp tiny description" \
 | |
| ;     "$INSTDIR\myapp.exe,0" \
 | |
| ;     "Open with myapp" \
 | |
| ;     "$INSTDIR\myapp.exe $\"%1$\""
 | |
| ;
 | |
| ; Never insert the APP_ASSOCIATE macro multiple times, it is only ment
 | |
| ; to associate an application with a single file and using the
 | |
| ; the "open" verb as default. To add more verbs (actions) to a file
 | |
| ; use the APP_ASSOCIATE_ADDVERB macro.
 | |
| ;
 | |
| ;   Example:
 | |
| ;   !insertmacro APP_ASSOCIATE_ADDVERB "myapp.textfile" "edit" "Edit with myapp" \
 | |
| ;     "$INSTDIR\myapp.exe /edit $\"%1$\""
 | |
| ;
 | |
| ; To have access to more options when registering the file association use the
 | |
| ; APP_ASSOCIATE_EX macro. Here you can specify the verb and what verb is to be the
 | |
| ; standard action (default verb).
 | |
| ;
 | |
| ; And finally: To remove the association from the registry use the APP_UNASSOCIATE
 | |
| ; macro. Here is another example just to wrap it up:
 | |
| ;   !insertmacro APP_UNASSOCIATE "txt" "myapp.textfile"
 | |
| ;
 | |
| ; |> Note <|
 | |
| ; When defining your file class string always use the short form of your application title
 | |
| ; then a period (dot) and the type of file. This keeps the file class sort of unique.
 | |
| ;   Examples:
 | |
| ;   Winamp.Playlist
 | |
| ;   NSIS.Script
 | |
| ;   Photoshop.JPEGFile
 | |
| ;
 | |
| ; |> Tech info <|
 | |
| ; The registry key layout for a file association is:
 | |
| ; HKEY_CLASSES_ROOT
 | |
| ;     <applicationID> = <"description">
 | |
| ;         shell
 | |
| ;             <verb> = <"menu-item text">
 | |
| ;                 command = <"command string">
 | |
| ;
 | |
| 
 | |
| !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"
 | |
| 
 | |
|     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"
 | |
| 
 | |
|     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}`
 | |
| !macroend
 | |
| 
 | |
| !macro APP_ASSOCIATE_ADDVERB FILECLASS VERB COMMANDTEXT 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}`
 | |
| !macroend
 | |
| 
 | |
| 
 | |
| !macro APP_UNASSOCIATE EXT FILECLASS
 | |
|     ; Backup the previously associated file class
 | |
|     ReadRegStr $R0 HKCR ".${EXT}" `${FILECLASS}_backup`
 | |
|     WriteRegStr HKCR ".${EXT}" "" "$R0"
 | |
| 
 | |
|     DeleteRegKey HKCR `${FILECLASS}`
 | |
| !macroend
 | |
| 
 | |
| !macro APP_ASSOCIATE_GETFILECLASS OUTPUT EXT
 | |
|     ReadRegStr ${OUTPUT} HKCR ".${EXT}" ""
 | |
| !macroend
 | |
| 
 | |
| 
 | |
| ; !defines for use with SHChangeNotify
 | |
| !ifdef SHCNE_ASSOCCHANGED
 | |
| !undef SHCNE_ASSOCCHANGED
 | |
| !endif
 | |
| !define SHCNE_ASSOCCHANGED 0x08000000
 | |
| !ifdef SHCNF_FLUSH
 | |
| !undef SHCNF_FLUSH
 | |
| !endif
 | |
| !define SHCNF_FLUSH        0x1000
 | |
| 
 | |
| !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)"
 | |
| !macroend
 | |
| 
 | |
| ;EOF
 | |
| 
 | |
| # 2}}}
 | |
| 
 | |
| 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$\""
 | |
| 
 | |
|     # .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$\""
 | |
| 
 | |
|     # .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
 | |
| 
 | |
| #    Uninstall {{{1
 | |
| ######################################################################
 | |
| 
 | |
| Section Uninstall
 | |
| 
 | |
|     # ask first
 | |
|     MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 \
 | |
|         "Completely remove installation? $\n\
 | |
|         (Delete folder $INSTDIR ) " \
 | |
|         IDNO unQuit IDYES unContinue
 | |
| 
 | |
|     unQuit:
 | |
|     Abort
 | |
| 
 | |
|     unContinue:
 | |
|     ClearErrors
 | |
|     RMDir /r $INSTDIR
 | |
|     Call un.StartMenu
 | |
|     Call un.Desktop
 | |
|     DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
 | |
|    
 | |
|     DeleteRegKey HKLM "SOFTWARE\${PRODUCT_NAME}"   
 | |
| 
 | |
|     unEnd:
 | |
| 
 | |
| SectionEnd
 | |
| 
 | |
| # 1}}}
 | |
| #               7b. Functions
 | |
| #    Installer {{{1
 | |
| #####################################################################
 | |
| 
 | |
| Function .onInit
 | |
| 
 | |
| #MessageBox MB_OK "Testing dependencies..."
 | |
| 
 | |
|     ; look for pythonw.exe
 | |
|     ; NOTE: This is set to $3 if it exists.
 | |
| 
 | |
|     ; on path
 | |
|     SearchPath $3 pythonw.exe
 | |
| #MessageBox MB_OK "DEBUG: Testing pythonw.exe on path...$\n$\nFound:  $\"$3$\""
 | |
|     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
 | |
| 
 | |
| 
 | |
|     ; 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:
 | |
| 
 | |
| 
 | |
|     ; extract gcheck
 | |
|     SetOutPath $TEMP
 | |
| 
 | |
|     File gcheck.py
 | |
|     ; set INI output location ($1)
 | |
|     StrCpy $1 "$TEMP\gramps-install.ini"
 | |
| 
 | |
|     ; run gcheck
 | |
|     ExecWait '"$3" $TEMP\gcheck.py $1'
 | |
| 
 | |
|     ; 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
 | |
| 
 | |
|         ; 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 "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:
 | |
| 
 | |
|     # 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
 | |
|         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
 | |
| 
 | |
|     StrCmp $4 "flag" +1 DependantsOK
 | |
|     MessageBox MB_OK "At least one dependency was not found, unable to continue."
 | |
|     Abort
 | |
| 
 | |
|     DependantsOK:
 | |
| 
 | |
|     Call RemovePrevious
 | |
|    
 | |
|     # default install directory ($INSTDIR)
 | |
|     StrCpy $INSTDIR $PROGRAMFILES\gramps
 | |
| 
 | |
| FunctionEnd
 | |
| 
 | |
| Function .onInstSuccess
 | |
| 
 | |
|     # write uninstaller
 | |
|     WriteUninstaller $INSTDIR\uninstall.exe
 | |
|     WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
 | |
|     WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"
 | |
|     WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
 | |
|     WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
 | |
|     WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
 | |
| #Does not display icon on win2000?    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\images\ped24.ico"
 | |
| FunctionEnd
 | |
| 
 | |
| Function .onInstFailed
 | |
|     MessageBox MB_OK|MB_ICONEXCLAMATION "Installation failed."
 | |
| FunctionEnd
 | |
| 
 | |
| Function RemovePrevious
 | |
|     #check if gramps exists in registry
 | |
|     ClearErrors
 | |
|     Var /GLOBAL PreviousPath
 | |
|     ReadRegStr $PreviousPath HKLM "SOFTWARE\${PRODUCT_NAME}" ""
 | |
|     # do some tests to find an installed version
 | |
|     ifErrors NoPreviousVersion
 | |
|         IfFileExists $PreviousPath\uninstall.exe 0 NoPreviousVersion #Check uninstall.exe from previous version exists on HD
 | |
|         Var /GLOBAL PreviousVersion
 | |
|         ReadRegStr $PreviousVersion HKLM "SOFTWARE\${PRODUCT_NAME}" "Version"
 | |
|         #  query OK to delete old version
 | |
|         MessageBox MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2 \
 | |
|         "${PRODUCT_NAME} $PreviousVersion is already installed$\n$\nClick 'OK' to uninstall previous version or 'Cancel' to continue anyway" \
 | |
|         IDCANCEL NoPreviousVersion
 | |
|         #  uninstall old version
 | |
|         CopyFiles $PreviousPath\uninstall.exe $TEMP
 | |
|         ExecWait '"$TEMP\uninstall.exe" _?=$PreviousPath' $0
 | |
|         StrCpy $INSTDIR $PreviousPath #set the previous path as the default install path <= worth while or not?
 | |
|         ;DetailPrint "uninstaller set error level $0"
 | |
|     NoPreviousVersion:
 | |
| FunctionEnd
 | |
| 
 | |
| Function WarnDirExists
 | |
|     # warn if dir already exists
 | |
|     IfFileExists $INSTDIR\*.* DirExists DirExistsOK
 | |
|     DirExists:
 | |
|     MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 \
 | |
|         "Install over existing installation?" \
 | |
|         IDYES DirExistsOK
 | |
|     Quit
 | |
|     DirExistsOK:
 | |
| FunctionEnd
 | |
| 
 | |
| #    Uninstaller {{{1
 | |
| #####################################################################
 | |
| 
 | |
| Function un.onUnInstSuccess
 | |
| 
 | |
| FunctionEnd
 | |
| 
 | |
| Function un.StartMenu
 | |
| 
 | |
|     IfFileExists "$SMPROGRAMS\GRAMPS" 0 unStartMenuFine
 | |
|     RMDir /r "$SMPROGRAMS\GRAMPS\"
 | |
|     unStartMenuFine:
 | |
| 
 | |
| FunctionEnd
 | |
| 
 | |
| Function un.Desktop
 | |
| 
 | |
|     IfFileExists "${DESKTOP_LINK}" 0 unNoDesktop
 | |
|     Delete "${DESKTOP_LINK}"
 | |
|     unNoDesktop:
 | |
| 
 | |
| FunctionEnd
 | |
| 
 | |
| # 1}}}
 | |
| # 8. Section Descriptions {{{1
 | |
| ######################################################################
 | |
| # (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."
 | |
| 
 | |
| !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_FUNCTION_DESCRIPTION_END
 | |
| 
 | |
| # 1}}}
 | |
| # vim:foldmethod=marker:noexpandtab
 |