; ; NSIS script for GtkGLExt Win32 binary installer. ; ; written by Naofumi Yasufuku ; ; about NSIS, see http://nsis.sourceforge.net/ ; !define GTKGLEXT_VERSION @GTKGLEXT_VERSION@ !define GTKGLEXT_API_VERSION @GTKGLEXT_API_VERSION@ !define GTKGLEXT_PUBLISHER "GtkGLExt" !define GTKGLEXT_URL_INFO_ABOUT "http://gtkglext.sourceforge.net/" !define GTKGLEXT_URL_UPDATE_INFO "http://sourceforge.net/projects/gtkglext/" !define GTKGLEXT_HELP_LINK "mailto:gtkglext-list@gnome.org" ;-------------------------------- ;Configuration OutFile gtkglext-win32-${GTKGLEXT_VERSION}.exe SetCompressor lzma InstType "Full (Runtime w/ Development and Examples)" InstType "Runtime (w/o Development and Examples)" ShowInstDetails show ShowUninstDetails show SetDateSave on ; the default installation drive is changed by .onInit InstallDir C:\GtkGLExt\${GTKGLEXT_API_VERSION} InstallDirRegKey HKLM SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION} "Path" ;-------------------------------- ;Header Files !include "MUI.nsh" ;-------------------------------- ;Configuration ; Names Name "GtkGLExt" Caption "GtkGLExt ${GTKGLEXT_VERSION} Setup" ;-------------------------------- ;Variables Var MUI_TEMP Var STARTMENU_FOLDER ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE ;-------------------------------- ;Pages ;Welcome Page !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of GtkGLExt, OpenGL Extension to GTK.\r\n\r\n\r\n$_CLICK" !insertmacro MUI_PAGE_WELCOME ;License Page !insertmacro MUI_PAGE_LICENSE "COPYING.LIB" ;Components Page !insertmacro MUI_PAGE_COMPONENTS ;Directory Page !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page !define MUI_STARTMENUPAGE_DEFAULTFOLDER "GtkGLExt ${GTKGLEXT_API_VERSION}" !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" !define MUI_STARTMENUPAGE_REGISTRY_KEY "SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "StartMenuFolder" !insertmacro MUI_PAGE_STARTMENU StartMenu $STARTMENU_FOLDER ;Installation Page !insertmacro MUI_PAGE_INSTFILES ;Finish Page !define MUI_FINISHPAGE_NOREBOOTSUPPORT !insertmacro MUI_PAGE_FINISH ;Uninstall Welcome Page !insertmacro MUI_UNPAGE_WELCOME ;Uninstall Confirm Page !insertmacro MUI_UNPAGE_CONFIRM ;Uninstallation Page !insertmacro MUI_UNPAGE_INSTFILES ;Uninstall Finish Page !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- ;Reserve Files ;!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;-------------------------------- ;Installer Sections Section "GtkGLExt Runtime" SecRuntime SectionIn 1 2 RO SetOutPath $INSTDIR\bin File bin\*.dll ; Registry WriteRegStr HKLM "SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION}\Runtime" "Path" "$INSTDIR" WriteRegStr HKLM "SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION}\Runtime" "Version" "${GTKGLEXT_VERSION}" SectionEnd Section "GtkGLExt Development" SecDevelopment SectionIn 1 SetOutPath $INSTDIR\include\gtkglext-${GTKGLEXT_API_VERSION}\gdk File include\gtkglext-${GTKGLEXT_API_VERSION}\gdk\*.h SetOutPath $INSTDIR\include\gtkglext-${GTKGLEXT_API_VERSION}\gdk\glext File include\gtkglext-${GTKGLEXT_API_VERSION}\gdk\glext\*.h SetOutPath $INSTDIR\include\gtkglext-${GTKGLEXT_API_VERSION}\gdk\win32 File include\gtkglext-${GTKGLEXT_API_VERSION}\gdk\win32\*.h SetOutPath $INSTDIR\include\gtkglext-${GTKGLEXT_API_VERSION}\gtk File include\gtkglext-${GTKGLEXT_API_VERSION}\gtk\*.h SetOutPath $INSTDIR\lib\gtkglext-${GTKGLEXT_API_VERSION}\include File lib\gtkglext-${GTKGLEXT_API_VERSION}\include\gdkglext-config.h SetOutPath $INSTDIR\lib File lib\*.a File lib\*.lib SetOutPath $INSTDIR\lib\pkgconfig File lib\pkgconfig\*.pc SetOutPath $INSTDIR\share\aclocal File share\aclocal\*.m4 SetOutPath $INSTDIR\share\gtk-doc\html\gtkglext File share\gtk-doc\html\gtkglext\*.html File share\gtk-doc\html\gtkglext\*.sgml File share\gtk-doc\html\gtkglext\*.devhelp File share\gtk-doc\html\gtkglext\*.png ; Update .pc files ; short name will cause a problem with current libtool :-< ;GetFullPathName /SHORT $0 $INSTDIR StrCpy $0 $INSTDIR Push $0 Call ChangeDirSeparator Pop $0 DetailPrint "Updating $INSTDIR\lib\pkgconfig\gdkglext-${GTKGLEXT_API_VERSION}.pc" Push $INSTDIR\lib\pkgconfig\gdkglext-${GTKGLEXT_API_VERSION}.pc Push $0 Call UpdatePCFile DetailPrint "Done" DetailPrint "Updating $INSTDIR\lib\pkgconfig\gdkglext-win32-${GTKGLEXT_API_VERSION}.pc" Push $INSTDIR\lib\pkgconfig\gdkglext-win32-${GTKGLEXT_API_VERSION}.pc Push $0 Call UpdatePCFile DetailPrint "Done" DetailPrint "Updating $INSTDIR\lib\pkgconfig\gtkglext-${GTKGLEXT_API_VERSION}.pc" Push $INSTDIR\lib\pkgconfig\gtkglext-${GTKGLEXT_API_VERSION}.pc Push $0 Call UpdatePCFile DetailPrint "Done" DetailPrint "Updating $INSTDIR\lib\pkgconfig\gtkglext-win32-${GTKGLEXT_API_VERSION}.pc" Push $INSTDIR\lib\pkgconfig\gtkglext-win32-${GTKGLEXT_API_VERSION}.pc Push $0 Call UpdatePCFile DetailPrint "Done" ; Registry WriteRegStr HKLM "SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION}\Development" "Path" "$INSTDIR" WriteRegStr HKLM "SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION}\Development" "Version" "${GTKGLEXT_VERSION}" SectionEnd Section "GtkGLExt Examples" SecExamples SectionIn 1 SetOutPath $INSTDIR\gtkglext-examples File gtkglext-examples\Makefile.mingw File gtkglext-examples\Makefile.msc File gtkglext-examples\*.h File gtkglext-examples\*.c File gtkglext-examples\*.lwo File gtkglext-examples\*.rgb File gtkglext-examples\*.exe SectionEnd Section "Start Menu" SecStartMenu SectionIn 1 2 SetShellVarContext all !insertmacro MUI_STARTMENU_WRITE_BEGIN StartMenu CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" WriteINIStr "$SMPROGRAMS\$STARTMENU_FOLDER\GtkGLExt Website.url" "InternetShortcut" "URL" "http://gtkglext.sourceforge.net/" IfFileExists "$INSTDIR\share\gtk-doc\html\gtkglext\index.html" "" +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GtkGLExt Reference Manual.lnk" "$INSTDIR\share\gtk-doc\html\gtkglext\index.html" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall GtkGLExt.lnk" "$INSTDIR\uninst-gtkglext.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Section -post ; Write $INSTDIR\bin\gtkglext-env.sh DetailPrint "Generating $INSTDIR\bin\gtkglext-env.sh" Push $INSTDIR\bin\gtkglext-env.sh Call WriteEnvSh DetailPrint "Done" ; Write $INSTDIR\bin\gtkglext-env.bat DetailPrint "Generating $INSTDIR\bin\gtkglext-env.bat" Push $INSTDIR\bin\gtkglext-env.bat Call WriteEnvBat DetailPrint "Done" ; Registry WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "DisplayName" "GtkGLExt ${GTKGLEXT_VERSION}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "DisplayVersion" "${GTKGLEXT_VERSION}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "Publisher" "${GTKGLEXT_PUBLISHER}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "URLInfoAbout" "${GTKGLEXT_URL_INFO_ABOUT}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "URLUpdateInfo" "${GTKGLEXT_URL_UPDATE_INFO}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "HelpLink" "${GTKGLEXT_HELP_LINK}" WriteRegExpandStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" "UninstallString" "$INSTDIR\uninst-gtkglext.exe" ;; Uninstaller Delete $INSTDIR\uninst-gtkglext.exe WriteUninstaller $INSTDIR\uninst-gtkglext.exe SectionEnd ;-------------------------------- ;Descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecRuntime} "GtkGLExt runtime libraries" !insertmacro MUI_DESCRIPTION_TEXT ${SecDevelopment} "GtkGLExt development headers, libraries, and documentations" !insertmacro MUI_DESCRIPTION_TEXT ${SecExamples} "GtkGLExt example programs" !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} "Adds icons to your start menu for easy access" !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Installer Functions Function .onInit ; Change the default installation drive StrLen $R0 $INSTDIR StrCpy $R1 $INSTDIR $R0 1 StrCpy $INSTDIR $PROGRAMFILES 1 StrCpy $INSTDIR "$INSTDIR$R1" FunctionEnd ; ChangeDirSeparator ; input, top of stack (e.g. C:\Program Files\...) ; output, top of stack (replaces, with e.g. C:/Program Files/...) ; modifies no other variables. Function ChangeDirSeparator Exch $R0 Push $R1 Push $R2 Push $R3 StrCpy $R1 $R0 StrCpy $R0 "" StrCpy $R2 0 goto loop replace: StrCpy $R0 "$R0/" loop: StrCpy $R3 $R1 1 $R2 IntOp $R2 $R2 + 1 StrCmp $R3 "\" replace StrCmp $R3 "" done StrCpy $R0 "$R0$R3" goto loop done: Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd ; UpdatePCFile ; update pkg-config .pc file Function UpdatePCFile Pop $R0 ; prefix Pop $R1 ; target .pc file Push $R7 Push $R8 Push $R9 Rename $R1 $R1.orig FileOpen $R7 $R1.orig r FileOpen $R8 $R1 w FileRead $R7 $R9 ; skip original prefix FileWrite $R8 "prefix=$R0$\n" loop: FileRead $R7 $R9 StrCmp $R9 "" done FileWrite $R8 $R9 goto loop done: FileClose $R7 FileClose $R8 Delete $R1.orig Pop $R9 Pop $R8 Pop $R7 FunctionEnd ; WriteEnvSh Function WriteEnvSh Pop $R0 ; Output file Push $R8 Push $R9 GetFullPathName /SHORT $R8 $INSTDIR Push $R8 Call ChangeDirSeparator Pop $R8 FileOpen $R9 $R0 w FileWrite $R9 "#!/bin/sh$\n" FileWrite $R9 "$\n" FileWrite $R9 "export GTKGLEXT_PREFIX=$R8$\n" FileWrite $R9 "$\n" FileWrite $R9 "echo $\"Setting environment variables for GtkGLExt.$\"$\n" FileWrite $R9 "echo $\"$\"$\n" FileWrite $R9 "$\n" FileWrite $R9 "case $$TERM in$\n" FileWrite $R9 "cygwin)$\n" FileWrite $R9 " GTKGLEXT_PATH=`cygpath -u $${GTKGLEXT_PREFIX}/bin`$\n" FileWrite $R9 " ;;$\n" FileWrite $R9 "msys)$\n" FileWrite $R9 " GTKGLEXT_PATH=/$${GTKGLEXT_PREFIX%:*}$${GTKGLEXT_PREFIX#*:}/bin$\n" FileWrite $R9 " ;;$\n" FileWrite $R9 "*)$\n" FileWrite $R9 " echo $\"Unknown TERM$\"$\n" FileWrite $R9 " ;;$\n" FileWrite $R9 "esac$\n" FileWrite $R9 "$\n" FileWrite $R9 "echo $\"export PATH=\$\"$${GTKGLEXT_PATH}:\$${PATH}\$\"$\"$\n" FileWrite $R9 "export PATH=$\"$${GTKGLEXT_PATH}:$${PATH}$\"$\n" FileWrite $R9 "$\n" FileWrite $R9 "echo $\"export PKG_CONFIG_PATH=\$\"$${GTKGLEXT_PREFIX}/lib/pkgconfig;\$${PKG_CONFIG_PATH}\$\"$\"$\n" FileWrite $R9 "export PKG_CONFIG_PATH=$\"$${GTKGLEXT_PREFIX}/lib/pkgconfig;$${PKG_CONFIG_PATH}$\"$\n" FileWrite $R9 "$\n" FileWrite $R9 "echo $\"$\"$\n" FileClose $R9 Pop $R9 Pop $R8 FunctionEnd ; WriteEnvBat Function WriteEnvBat Pop $R0 ; Output file Push $R9 FileOpen $R9 $R0 w FileWrite $R9 "@set GTKGLEXT_PREFIX=$INSTDIR$\r$\n" FileWrite $R9 "$\r$\n" FileWrite $R9 "@echo Setting environment variables for GtkGLExt.$\r$\n" FileWrite $R9 "@echo.$\r$\n" FileWrite $R9 "$\r$\n" FileWrite $R9 "@echo set PATH=%GTKGLEXT_PREFIX%\bin;%%PATH%%$\r$\n" FileWrite $R9 "@set PATH=%GTKGLEXT_PREFIX%\bin;%PATH%$\r$\n" FileWrite $R9 "$\r$\n" FileWrite $R9 "@echo set PKG_CONFIG_PATH=%GTKGLEXT_PREFIX%\lib\pkgconfig;%%PKG_CONFIG_PATH%%$\r$\n" FileWrite $R9 "@set PKG_CONFIG_PATH=%GTKGLEXT_PREFIX%\lib\pkgconfig;%PKG_CONFIG_PATH%$\r$\n" FileWrite $R9 "$\r$\n" FileWrite $R9 "@echo.$\r$\n" FileClose $R9 Pop $R9 FunctionEnd ;-------------------------------- ;Uninstaller Section Section Uninstall ;Remove shortcut SetShellVarContext all !insertmacro MUI_STARTMENU_GETFOLDER StartMenu $MUI_TEMP StrCmp $MUI_TEMP "" noshortcuts Delete "$SMPROGRAMS\$MUI_TEMP\GtkGLExt Website.url" Delete "$SMPROGRAMS\$MUI_TEMP\GtkGLExt Reference Manual.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall GtkGLExt.lnk" RMDir "$SMPROGRAMS\$MUI_TEMP" ;Only if empty, so it won't delete other shortcuts noshortcuts: DeleteRegKey HKLM "SOFTWARE\GtkGLExt\${GTKGLEXT_API_VERSION}" DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GtkGLExt" Delete $INSTDIR\uninst-gtkglext.exe ; bin Delete $INSTDIR\bin\gtkglext-env.sh Delete $INSTDIR\bin\gtkglext-env.bat Delete $INSTDIR\bin\libgdkglext-win32-${GTKGLEXT_API_VERSION}-*.dll Delete $INSTDIR\bin\libgtkglext-win32-${GTKGLEXT_API_VERSION}-*.dll RMDir $INSTDIR\bin ; include RMDir /r $INSTDIR\include\gtkglext-1.0 RMDir $INSTDIR\include ; lib RMDir /r $INSTDIR\lib\gtkglext-1.0 Delete $INSTDIR\lib\libgdkglext-win32-${GTKGLEXT_API_VERSION}.dll.a Delete $INSTDIR\lib\libgtkglext-win32-${GTKGLEXT_API_VERSION}.dll.a Delete $INSTDIR\lib\gdkglext-win32-${GTKGLEXT_API_VERSION}.lib Delete $INSTDIR\lib\gtkglext-win32-${GTKGLEXT_API_VERSION}.lib Delete $INSTDIR\lib\pkgconfig\gdkglext-${GTKGLEXT_API_VERSION}.pc Delete $INSTDIR\lib\pkgconfig\gdkglext-win32-${GTKGLEXT_API_VERSION}.pc Delete $INSTDIR\lib\pkgconfig\gtkglext-${GTKGLEXT_API_VERSION}.pc Delete $INSTDIR\lib\pkgconfig\gtkglext-win32-${GTKGLEXT_API_VERSION}.pc RMDir $INSTDIR\lib\pkgconfig RMDir $INSTDIR\lib ; share Delete $INSTDIR\share\aclocal\gtkglext-${GTKGLEXT_API_VERSION}.m4 RMDir $INSTDIR\share\aclocal RMDir /r $INSTDIR\share\gtk-doc\html\gtkglext RMDir $INSTDIR\share\gtk-doc\html RMDir $INSTDIR\share\gtk-doc RMDir $INSTDIR\share ; gtkglext-examples RMDir /r $INSTDIR\gtkglext-examples ; $INSTDIR RMDir $INSTDIR SectionEnd