* windows/nsis/gramps-build.bat: Add windows building scripts. * windows/nsis/gramps.nsi: Add windows building scripts. * windows/nsis/gcheck.py: Add windows building scripts. * windows/nsis/ped24.ico: Add windows icon. svn: r7082
		
			
				
	
	
		
			432 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			NSIS
		
	
	
	
	
	
			
		
		
	
	
			432 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			NSIS
		
	
	
	
	
	
#
 | 
						|
# Filename: gramps.nsi
 | 
						|
#
 | 
						|
# Description: Nullsoft Installer (NSIS) file to build Windows installer:
 | 
						|
# Updated:     2006-07-26 13:12:28-0400
 | 
						|
# Author:      Steve Hall [ digitect dancingpaper com ]
 | 
						|
#
 | 
						|
# 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.
 | 
						|
#
 | 
						|
 | 
						|
#               Installer Attributes
 | 
						|
# 0. Base Settings {{{1
 | 
						|
 | 
						|
# version numbers
 | 
						|
!define GRAMPS_VER_MAJOR $%VERSION%
 | 
						|
!define GRAMPS_VER_MINOR $%VERSIONSUB%
 | 
						|
!define GRAMPS_VER_POINT $%VERSIONPT%
 | 
						|
 | 
						|
# adds Native Language Support
 | 
						|
!define HAVE_NLS
 | 
						|
 | 
						|
# output file
 | 
						|
Name "GRAMPS"
 | 
						|
OutFile gramps-${GRAMPS_VER_MAJOR}.${GRAMPS_VER_MINOR}.${GRAMPS_VER_POINT}.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"
 | 
						|
 | 
						|
# don't allow installation into C:\
 | 
						|
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\${MUI_PRODUCT}" ""
 | 
						|
 | 
						|
# Remember the installer language
 | 
						|
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
 | 
						|
!define MUI_LANGDLL_REGISTRY_KEY "Software\${MUI_PRODUCT}"
 | 
						|
!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 "python"
 | 
						|
!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 "Danish"
 | 
						|
#!insertmacro MUI_LANGUAGE "Default"
 | 
						|
!insertmacro MUI_LANGUAGE "Dutch"
 | 
						|
!insertmacro MUI_LANGUAGE "English"
 | 
						|
#!insertmacro MUI_LANGUAGE "Estonian"
 | 
						|
#!insertmacro MUI_LANGUAGE "Farsi"
 | 
						|
#!insertmacro MUI_LANGUAGE "Finnish"
 | 
						|
!insertmacro MUI_LANGUAGE "French"
 | 
						|
!insertmacro MUI_LANGUAGE "German"
 | 
						|
#!insertmacro MUI_LANGUAGE "Greek"
 | 
						|
#!insertmacro MUI_LANGUAGE "Hebrew"
 | 
						|
#!insertmacro MUI_LANGUAGE "Hungarian"
 | 
						|
#!insertmacro MUI_LANGUAGE "Indonesian"
 | 
						|
!insertmacro MUI_LANGUAGE "Italian"
 | 
						|
#!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 "Portuguese"
 | 
						|
!insertmacro MUI_LANGUAGE "PortugueseBR"
 | 
						|
#!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 "Spanish"
 | 
						|
#!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}}}
 | 
						|
#               7a. Sections
 | 
						|
#    Program Files {{{1
 | 
						|
######################################################################
 | 
						|
 | 
						|
Section "Program files (required)" Main
 | 
						|
SectionIn 1 2 3 RO
 | 
						|
 | 
						|
	Call WarnDirExists
 | 
						|
 | 
						|
	SetOutPath $INSTDIR
 | 
						|
	File /r ..\src\*.*
 | 
						|
	#File /r ..\nsis\gramps.ico
 | 
						|
 | 
						|
SectionEnd
 | 
						|
 | 
						|
#    Icons, menus and shortcuts {{{1
 | 
						|
 | 
						|
SubSection "Icons, menus and shortcuts" MenusAndIcons
 | 
						|
 | 
						|
Section "Add GRAMPS to the Start Menu" MenuStart
 | 
						|
SectionIn 1 3
 | 
						|
	# determines "Start In" location for shortcuts
 | 
						|
	SetOutPath $INSTDIR
 | 
						|
 | 
						|
	CreateDirectory "$SMPROGRAMS\GRAMPS\"
 | 
						|
	CreateShortCut "$SMPROGRAMS\GRAMPS\GRAMPS.lnk" "$3" "$\"$INSTDIR\gramps.py$\"" "$INSTDIR\images\ped24.ico" "0" "" "" "GRAMPS"
 | 
						|
	WriteINIStr "$SMPROGRAMS\GRAMPS\GRAMPS Website.url" "InternetShortcut" "URL" "http://www.gramps-project.org/"
 | 
						|
	CreateShortCut "$SMPROGRAMS\GRAMPS\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\GRAMPS.lnk" "$3" "$\"$INSTDIR\gramps.py$\"" "$INSTDIR\images\ped24.ico" "0" "" "" "GRAMPS"
 | 
						|
SectionEnd
 | 
						|
 | 
						|
SubSectionEnd
 | 
						|
 | 
						|
#    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
 | 
						|
 | 
						|
	unEnd:
 | 
						|
 | 
						|
SectionEnd
 | 
						|
 | 
						|
# 1}}}
 | 
						|
#               7b. Functions
 | 
						|
#    Installer {{{1
 | 
						|
#####################################################################
 | 
						|
 | 
						|
Function .onInit
 | 
						|
 | 
						|
	; test for dependencies
 | 
						|
	MessageBox MB_OK "Testing dependencies..."
 | 
						|
 | 
						|
	; look for python.exe
 | 
						|
	; NOTE: This is set to $3 if it exists.
 | 
						|
 | 
						|
	; on path
 | 
						|
	SearchPath $3 python.exe
 | 
						|
#MessageBox MB_OK "DEBUG: Testing python.exe on path...$\n$\nFound:  $\"$3$\""
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
 | 
						|
    ; registry keys (these are confirmed possibilities)
 | 
						|
	; reg key
 | 
						|
	ReadRegStr $3 HKCR 'Applications\python.exe\shell\open\command' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
	ReadRegStr $3 HKLM 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\python.exe' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
	ReadRegStr $3 HKLM 'SOFTWARE\Python\PythonCore\2.4\InstallPath' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
    ReadRegStr $3 HKCR 'Python.File\shell\open\command' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
    ReadRegStr $3 HKCU 'Software\Classes\Python.File\shell\open\command' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
    ReadRegStr $3 HKCU 'Software\Microsoft\Windows\Current version\App Paths\Python.exe' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
    ReadRegStr $3 HKCU 'Software\Microsoft\Windows\ShellNoRoam\MUICache (data:python)' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
    ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.4\InstallPath' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
	; reg key
 | 
						|
    ReadRegStr $3 HKCU 'Software\Python\PythonCore\2.4\PythonPath' ""
 | 
						|
	StrCpy $3 "$3python.exe"  ; append "python.exe"
 | 
						|
	IfFileExists $3 HavePython 0
 | 
						|
 | 
						|
 | 
						|
	; TODO: request path from user/browse (can NSIS do this?)
 | 
						|
		MessageBox MB_OK "Python not found, unable to continue."
 | 
						|
		Abort
 | 
						|
		HavePython:
 | 
						|
 | 
						|
	; 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"
 | 
						|
#MessageBox MB_OK "DEBUG: Attempting to run:$\n$\n  $\"$3$\" $TEMP\gcheck.py $1"
 | 
						|
	; run gcheck
 | 
						|
	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..."
 | 
						|
	Sleep 1000
 | 
						|
	
 | 
						|
 | 
						|
	; verify INI created
 | 
						|
	IfFileExists $1 YesINI 0
 | 
						|
		MessageBox MB_OK "Dependency test INI creation failed, unable to continue."
 | 
						|
		Abort
 | 
						|
		YesINI:
 | 
						|
 | 
						|
	; verify environment test results
 | 
						|
	; GTK+
 | 
						|
	ReadINIStr $0 $1 tests gtk
 | 
						|
	StrCmp $0 "yes" HaveGTK 0
 | 
						|
		MessageBox MB_OK "GTK+ not installed, unable to continue."
 | 
						|
		Abort
 | 
						|
		HaveGTK:
 | 
						|
	; pygtk
 | 
						|
	ReadINIStr $0 $1 tests pygtk
 | 
						|
	StrCmp $0 "yes" Havepygtk 0
 | 
						|
		MessageBox MB_OK "pygtk not installed, unable to continue."
 | 
						|
		Abort
 | 
						|
		Havepygtk:
 | 
						|
	; 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:
 | 
						|
 | 
						|
	#!insertmacro MUI_LANGDLL_DISPLAY
 | 
						|
 | 
						|
	# default install directory ($INSTDIR)
 | 
						|
	StrCpy $INSTDIR $PROGRAMFILES\gramps
 | 
						|
 | 
						|
FunctionEnd
 | 
						|
 | 
						|
Function .onInstSuccess
 | 
						|
	# write uninstaller
 | 
						|
	WriteUninstaller $INSTDIR\uninstall.exe
 | 
						|
FunctionEnd
 | 
						|
 | 
						|
Function .onInstFailed
 | 
						|
	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:
 | 
						|
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\GRAMPS.lnk" 0 unNoDesktop
 | 
						|
	Delete "$DESKTOP\GRAMPS.lnk"
 | 
						|
	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_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 ${Prog} $(DESC_Prog)
 | 
						|
 | 
						|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
 | 
						|
 | 
						|
# 1}}}
 | 
						|
# vim:foldmethod=marker:noexpandtab
 |