Name "PyGtk Windows Installer" # Defines !define REGKEY "SOFTWARE\$(^Name)" # MUI defines !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-colorful.ico" !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM !define MUI_STARTMENUPAGE_NODISABLE !define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup !define MUI_STARTMENUPAGE_DEFAULTFOLDER "PyGtk Windows Installer" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" !define MUI_UNFINISHPAGE_NOAUTOCLOSE # Included files !include Sections.nsh !include MUI.nsh # Variables Var StartMenuGroup # Installer pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES # Installer languages !insertmacro MUI_LANGUAGE English !insertmacro MUI_LANGUAGE Afrikaans !insertmacro MUI_LANGUAGE Albanian !insertmacro MUI_LANGUAGE Arabic !insertmacro MUI_LANGUAGE Basque !insertmacro MUI_LANGUAGE Belarusian !insertmacro MUI_LANGUAGE Bosnian !insertmacro MUI_LANGUAGE Breton !insertmacro MUI_LANGUAGE Bulgarian !insertmacro MUI_LANGUAGE Catalan !insertmacro MUI_LANGUAGE Croatian !insertmacro MUI_LANGUAGE Czech !insertmacro MUI_LANGUAGE Danish !insertmacro MUI_LANGUAGE Dutch !insertmacro MUI_LANGUAGE Estonian !insertmacro MUI_LANGUAGE Farsi !insertmacro MUI_LANGUAGE Finnish !insertmacro MUI_LANGUAGE French !insertmacro MUI_LANGUAGE Galician !insertmacro MUI_LANGUAGE German !insertmacro MUI_LANGUAGE Greek !insertmacro MUI_LANGUAGE Hebrew !insertmacro MUI_LANGUAGE Hungarian !insertmacro MUI_LANGUAGE Icelandic !insertmacro MUI_LANGUAGE Indonesian !insertmacro MUI_LANGUAGE Irish !insertmacro MUI_LANGUAGE Italian !insertmacro MUI_LANGUAGE Japanese !insertmacro MUI_LANGUAGE Korean !insertmacro MUI_LANGUAGE Kurdish !insertmacro MUI_LANGUAGE Latvian !insertmacro MUI_LANGUAGE Lithuanian !insertmacro MUI_LANGUAGE Luxembourgish !insertmacro MUI_LANGUAGE Macedonian !insertmacro MUI_LANGUAGE Malay !insertmacro MUI_LANGUAGE Mongolian !insertmacro MUI_LANGUAGE Norwegian !insertmacro MUI_LANGUAGE NorwegianNynorsk !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 SpanishInternational !insertmacro MUI_LANGUAGE Swedish !insertmacro MUI_LANGUAGE Thai !insertmacro MUI_LANGUAGE TradChinese !insertmacro MUI_LANGUAGE Turkish !insertmacro MUI_LANGUAGE Ukrainian !insertmacro MUI_LANGUAGE Uzbek !insertmacro MUI_LANGUAGE Welsh # Installer attributes OutFile pygtk_windows_installer.exe InstallDir "$PROGRAMFILES\PyGtk Windows Installer" CRCCheck on XPStyle on ShowInstDetails show InstallDirRegKey HKLM "${REGKEY}" Path ShowUninstDetails show # Installer sections Section "Gtk+, Glade, OpenGL, GtkGlExt, Gl2Ps" SEC0000 SetOutPath $INSTDIR SetOverwrite on File gtk_installer.exe ExecWait "$INSTDIR\gtk_installer.exe" WriteRegStr HKLM "${REGKEY}\Components" "Gtk+, Glade, OpenGL, GtkGlExt, Gl2Ps" 1 SectionEnd Section PyGObject SEC0001 SetOutPath $INSTDIR SetOverwrite on File pygobject-2.14.2-2.win32-py2.5.exe ExecWait "$INSTDIR\pygobject-2.14.2-2.win32-py2.5.exe" WriteRegStr HKLM "${REGKEY}\Components" PyGObject 1 SectionEnd Section PyCairo SEC0002 SetOutPath $INSTDIR SetOverwrite on File pycairo-1.4.12-2.win32-py2.5.exe ExecWait "$INSTDIR\pycairo-1.4.12-2.win32-py2.5.exe" WriteRegStr HKLM "${REGKEY}\Components" PyCairo 1 SectionEnd Section PyGtk SEC0003 SetOutPath $INSTDIR SetOverwrite on File pygtk-2.12.1-3.win32-py2.5.exe ExecWait "$INSTDIR\pygtk-2.12.1-3.win32-py2.5.exe" WriteRegStr HKLM "${REGKEY}\Components" PyGtk 1 SectionEnd Section PyOpenGL SEC0004 SetOutPath $INSTDIR SetOverwrite on File PyOpenGL-3.0.0.win32.exe ExecWait "$INSTDIR\PyOpenGL-3.0.0.win32.exe" WriteRegStr HKLM "${REGKEY}\Components" PyOpenGL 1 SectionEnd Section PyGtkGlExt SEC0005 SetOutPath $INSTDIR SetOverwrite on File pygtkglext-1.1.0.win32-py2.5.exe ExecWait "$INSTDIR\pygtkglext-1.1.0.win32-py2.5.exe" WriteRegStr HKLM "${REGKEY}\Components" PyGtkGlExt 1 SectionEnd Section PyWin32 SEC0006 SetOutPath $INSTDIR SetOverwrite on File pywin32-212.win32-py2.5.exe ExecWait "$INSTDIR\pywin32-212.win32-py2.5.exe" WriteRegStr HKLM "${REGKEY}\Components" PyWin32 1 SectionEnd Section -post SEC0007 WriteRegStr HKLM "${REGKEY}" Path $INSTDIR SetOutPath $INSTDIR WriteUninstaller $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_BEGIN Application SetOutPath $SMPROGRAMS\$StartMenuGroup CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_END WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 SectionEnd # Macro for selecting uninstaller sections !macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID Push $R0 ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}" StrCmp $R0 1 0 next${UNSECTION_ID} !insertmacro SelectSection "${UNSECTION_ID}" GoTo done${UNSECTION_ID} next${UNSECTION_ID}: !insertmacro UnselectSection "${UNSECTION_ID}" done${UNSECTION_ID}: Pop $R0 !macroend # Uninstaller sections Section /o -un.PyWin32 UNSEC0006 Delete /REBOOTOK $INSTDIR\pywin32-212.win32-py2.5.exe DeleteRegValue HKLM "${REGKEY}\Components" PyWin32 SectionEnd Section /o -un.PyGtkGlExt UNSEC0005 Delete /REBOOTOK $INSTDIR\pygtkglext-1.1.0.win32-py2.5.exe DeleteRegValue HKLM "${REGKEY}\Components" PyGtkGlExt SectionEnd Section /o -un.PyOpenGL UNSEC0004 Delete /REBOOTOK $INSTDIR\PyOpenGL-3.0.0.win32.exe DeleteRegValue HKLM "${REGKEY}\Components" PyOpenGL SectionEnd Section /o -un.PyGtk UNSEC0003 Delete /REBOOTOK $INSTDIR\pygtk-2.12.1-3.win32-py2.5.exe DeleteRegValue HKLM "${REGKEY}\Components" PyGtk SectionEnd Section /o -un.PyCairo UNSEC0002 Delete /REBOOTOK $INSTDIR\pycairo-1.4.12-2.win32-py2.5.exe DeleteRegValue HKLM "${REGKEY}\Components" PyCairo SectionEnd Section /o -un.PyGObject UNSEC0001 Delete /REBOOTOK $INSTDIR\pygobject-2.14.2-2.win32-py2.5.exe DeleteRegValue HKLM "${REGKEY}\Components" PyGObject SectionEnd Section /o "-un.Gtk+, Glade, OpenGL, GtkGlExt, Gl2Ps" UNSEC0000 Delete /REBOOTOK $INSTDIR\gtk_installer.exe DeleteRegValue HKLM "${REGKEY}\Components" "Gtk+, Glade, OpenGL, GtkGlExt, Gl2Ps" SectionEnd Section -un.post UNSEC0007 DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" Delete /REBOOTOK $INSTDIR\uninstall.exe DeleteRegValue HKLM "${REGKEY}" StartMenuGroup DeleteRegValue HKLM "${REGKEY}" Path DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components" DeleteRegKey /IfEmpty HKLM "${REGKEY}" RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup RmDir /REBOOTOK $INSTDIR SectionEnd # Installer functions Function .onInit InitPluginsDir FunctionEnd # Uninstaller functions Function un.onInit ReadRegStr $INSTDIR HKLM "${REGKEY}" Path !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup !insertmacro SELECT_UNSECTION "Gtk+, Glade, OpenGL, GtkGlExt, Gl2Ps" ${UNSEC0000} !insertmacro SELECT_UNSECTION PyGObject ${UNSEC0001} !insertmacro SELECT_UNSECTION PyCairo ${UNSEC0002} !insertmacro SELECT_UNSECTION PyGtk ${UNSEC0003} !insertmacro SELECT_UNSECTION PyOpenGL ${UNSEC0004} !insertmacro SELECT_UNSECTION PyGtkGlExt ${UNSEC0005} !insertmacro SELECT_UNSECTION PyWin32 ${UNSEC0006} FunctionEnd # Section Descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC0000} $(SEC0000_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SEC0001} $(SEC0001_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SEC0002} $(SEC0002_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SEC0003} $(SEC0003_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SEC0004} $(SEC0004_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SEC0005} $(SEC0005_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SEC0006} $(SEC0006_DESC) !insertmacro MUI_FUNCTION_DESCRIPTION_END # Installer Language Strings # TODO Update the Language Strings with the appropriate translations. LangString ^UninstallLink ${LANG_ENGLISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_AFRIKAANS} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_ALBANIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_ARABIC} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_BASQUE} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_BELARUSIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_BOSNIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_BRETON} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_BULGARIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_CATALAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_CROATIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_CZECH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_DANISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_DUTCH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_ESTONIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_FARSI} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_FINNISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_FRENCH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_GALICIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_GERMAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_GREEK} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_HEBREW} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_HUNGARIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_ICELANDIC} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_INDONESIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_IRISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_ITALIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_JAPANESE} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_KOREAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_KURDISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_LATVIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_LITHUANIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_LUXEMBOURGISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_MACEDONIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_MALAY} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_MONGOLIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_NORWEGIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_NORWEGIANNYNORSK} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_POLISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_PORTUGUESE} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_PORTUGUESEBR} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_ROMANIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_RUSSIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SERBIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SERBIANLATIN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SIMPCHINESE} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SLOVAK} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SLOVENIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SPANISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SPANISHINTERNATIONAL} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_SWEDISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_THAI} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_TRADCHINESE} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_TURKISH} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_UKRAINIAN} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_UZBEK} "Uninstall $(^Name)" LangString ^UninstallLink ${LANG_WELSH} "Uninstall $(^Name)"