# # 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: # # 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 Option to remove existing installation prior to installing new # o More refined dependency checking (versioning) # o Add .gramps and .gpkg as extensions # * => Need separate icons for them? # o Add uninstall to Windows XP manifest list # # 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% # adds Native Language Support !define HAVE_NLS # output file Name "GRAMPS" OutFile gramps-${GRAMPS_VER_MAJOR}.${GRAMPS_VER_MINOR}.${GRAMPS_VER_POINT}-${GRAMPS_VER_BUILD}.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:\ 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 "$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 /r ..\nsis\gramps.ico 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 ${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 Section "Add Desktop icon" Desktop #SectionIn 1 3 # determines "Start In" location for shortcuts SetOutPath $INSTDIR CreateShortCut "$DESKTOP\GRAMPS ${GRAMPS_VER_MAJOR}.${GRAMPS_VER_MINOR}.${GRAMPS_VER_POINT}-${GRAMPS_VER_BUILD}.lnk" "$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 ; = <"description"> ; shell ; = <"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 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: #MessageBox MB_OK "DEBUG: Final path for pythonw.exe...$\n$\nFound: $\"$3$\"" ; 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' #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 1000 ; 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: # 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_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_FUNCTION_DESCRIPTION_END # 1}}} # vim:foldmethod=marker:noexpandtab