Revision: 797 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=797&view=rev Author: eht16 Date: 2009-06-30 20:56:42 +0000 (Tue, 30 Jun 2009)
Log Message: ----------- Add Windows installer script for geany-plugins
Added Paths: ----------- trunk/geany-plugins/build/geany-plugins.nsi
Added: trunk/geany-plugins/build/geany-plugins.nsi =================================================================== --- trunk/geany-plugins/build/geany-plugins.nsi (rev 0) +++ trunk/geany-plugins/build/geany-plugins.nsi 2009-06-30 20:56:42 UTC (rev 797) @@ -0,0 +1,317 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; geany-plugins.nsi - this file is part of the geany-plugins project +; +; Copyright 2009 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> +; Copyright 2009 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +; +; Installer script for geany-plugins (Windows Installer), based on Geany's installer script +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +; Do a Cyclic Redundancy Check to make sure the installer was not corrupted by the download +CRCCheck force +RequestExecutionLevel user ; set execution level for Windows Vista + +;;;;;;;;;;;;;;;;;;; +; helper defines ; +;;;;;;;;;;;;;;;;;;; +!define PRODUCT_NAME "Geany-Plugins" +!define PRODUCT_VERSION "0.17" +!define PRODUCT_VERSION_ID "0.17.0.0" +!define PRODUCT_PUBLISHER "The Geany developer team" +!define PRODUCT_WEB_SITE "http://www.geany.org/" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall${PRODUCT_NAME}" +!define PRODUCT_DIR_REGKEY "Software\Geany-Plugins" +!define GEANY_DIR_REGKEY "Software\Geany" +!define REQUIRED_GEANY_VERSION "0.17" +!define RESOURCEDIR "geany-plugins-${PRODUCT_VERSION}" + +;;;;;;;;;;;;;;;;;;;;; +; Version resource ; +;;;;;;;;;;;;;;;;;;;;; +VIProductVersion "${PRODUCT_VERSION_ID}" +VIAddVersionKey "ProductName" "${PRODUCT_NAME}" +VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}" +VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}" +VIAddVersionKey "LegalCopyright" "Copyright 2009 by the Geany developer team" +VIAddVersionKey "FileDescription" "${PRODUCT_NAME} Installer" + +BrandingText "$(^NAME) installer (NSIS 2.45)" +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" +SetCompressor /SOLID lzma +ShowInstDetails hide +ShowUnInstDetails hide +XPStyle on +OutFile "geany-plugins-${PRODUCT_VERSION}_setup.exe" + +Var Answer +Var UserName +Var UNINSTDIR + +;;;;;;;;;;;;;;;; +; MUI Settings ; +;;;;;;;;;;;;;;;; +!include "MUI2.nsh" + +!define MUI_ABORTWARNING +; FIXME hard-coded path...should we add geany.ico to the geany-plugins repo? +!define MUI_ICON "c:\geany_svn\icons\geany.ico" +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico" + +; Welcome page +!insertmacro MUI_PAGE_WELCOME +; License page +; FIXME +!insertmacro MUI_PAGE_LICENSE "${RESOURCEDIR}\doc\plugins\addons\Copying.txt" +; Components page +!insertmacro MUI_PAGE_COMPONENTS +; Directory page +!define MUI_PAGE_CUSTOMFUNCTION_LEAVE OnDirLeave +!insertmacro MUI_PAGE_DIRECTORY +; Instfiles page +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_INSTFILES ; Uninstaller page +!insertmacro MUI_LANGUAGE "English" ; Language file + +;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Sections and InstTypes ; +;;;;;;;;;;;;;;;;;;;;;;;;;;; +InstType "Full" + +Section "!Program Files" SEC01 + SectionIn RO 1 2 + SetOverwrite ifnewer + + SetOutPath "$INSTDIR\lib" + File /r "${RESOURCEDIR}\lib*" + + SetOutPath "$INSTDIR\share\geany-plugins" + File /r "${RESOURCEDIR}\share\geany-plugins*" +SectionEnd + +Section "Language Files" SEC02 + SectionIn 1 + SetOutPath "$INSTDIR\share\locale" + File /r "${RESOURCEDIR}\share\locale*" +SectionEnd + +Section "Documentation" SEC03 + SectionIn 1 + SetOverwrite ifnewer + SetOutPath "$INSTDIR" + File /r "${RESOURCEDIR}\doc" +SectionEnd + +Section -Post + WriteUninstaller "$INSTDIR\uninst-plugins.exe" + WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" Path "$INSTDIR" + ${if} $Answer == "yes" ; if user is admin + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst-plugins.exe" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\Geany.exe" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "${PRODUCT_WEB_SITE}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" + WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001 + WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001 + ${endif} +SectionEnd + +Section Uninstall + Delete "$INSTDIR\uninst-plugins.exe" + Delete "$INSTDIR\lib\addons.dll" + Delete "$INSTDIR\lib\geanylatex.dll" + Delete "$INSTDIR\lib\geanylipsum.dll" + Delete "$INSTDIR\lib\geanylua.dll" + Delete "$INSTDIR\lib\geanysendmail.dll" + Delete "$INSTDIR\lib\geanyvc.dll" + Delete "$INSTDIR\lib\shiftcolumn.dll" + + RMDir /r "$INSTDIR\doc\plugins" + RMDir /r "$INSTDIR\lib\geany-plugins" + RMDir /r "$INSTDIR\share\geany-plugins" + + FindFirst $0 $1 "$INSTDIR\share\locale*" + loop: + StrCmp $1 "" done + Delete "$INSTDIR\share\locale$1\LC_MESSAGES\geany-plugins.mo" + RMDir "$INSTDIR\share\locale$1\LC_MESSAGES" + RMDir "$INSTDIR\share\locale$1" + FindNext $0 $1 + Goto loop + done: + FindClose $0 + + ; only if empty + RMDir "$INSTDIR\doc" + RMDir "$INSTDIR\lib" + RMDir "$INSTDIR\share\locale" + RMDir "$INSTDIR\share" + RMDir "$INSTDIR" + + DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}" + DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}" + DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}" + DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}" + + SetAutoClose true +SectionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Section descriptions ; +;;;;;;;;;;;;;;;;;;;;;;;;; +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN +!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Required plugin files. You cannot skip these files." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Various translations for the included plugins." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Various documentation files for the included plugins." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +;;;;;;;;;;;;;;;;;;;;; +; helper functions ; +;;;;;;;;;;;;;;;;;;;;; + +; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsi...) +!macro IsUserAdmin Result UName + ClearErrors + UserInfo::GetName + IfErrors Win9x + Pop $0 + StrCpy ${UName} $0 + UserInfo::GetAccountType + Pop $1 + ${if} $1 == "Admin" + StrCpy ${Result} "yes" + ${else} + StrCpy ${Result} "no" + ${endif} + Goto done + +Win9x: + StrCpy ${Result} "yes" +done: +!macroend + +Function .onInit + ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsi...) + ; If the user does *not* have administrator privileges, abort + StrCpy $Answer "" + StrCpy $UserName "" + !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh + ${if} $Answer == "yes" + SetShellVarContext all ; set that e.g. shortcuts will be created for all users + ${else} + SetShellVarContext current + ; TODO is this really what we want? $PROGRAMFILES is not much better because + ; probably the unprivileged user can't write it anyways + StrCpy $INSTDIR "$PROFILE$(^Name)" + ${endif} + + ; find and read Geany's installation directory and use it as our installation directory + ReadRegStr $INSTDIR SHCTX "${GEANY_DIR_REGKEY}" "Path" + StrCmp $INSTDIR "" 0 +3 + MessageBox MB_OK|MB_ICONSTOP "Geany could not be found. Please install Geany first." /SD IDOK + Abort + + ; check Geany's version + GetDLLVersion "$INSTDIR\bin\geany.exe" $R0 $R1 + IntOp $R2 $R0 >> 16 + IntOp $R2 $R2 & 0x0000FFFF ; $R2 now contains major version + IntOp $R3 $R0 & 0x0000FFFF ; $R3 now contains minor version + StrCpy $0 "$R2.$R3" ; $0 now contains string like "1.2.0.192" + StrCmp $0 ${REQUIRED_GEANY_VERSION} +3 0 + MessageBox MB_OK|MB_ICONSTOP \ + "You have Geany $0 installed but you need Geany ${REQUIRED_GEANY_VERSION}." \ + /SD IDOK + Abort + + ; prevent running multiple instances of the installer + System::Call 'kernel32::CreateMutexA(i 0, i 0, t "geany_plugins_installer") i .r1 ?e' + Pop $R0 + StrCmp $R0 0 +3 + MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." /SD IDOK + Abort + ; warn about a new install over an existing installation + ReadRegStr $R0 SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" + StrCmp $R0 "" finish + + MessageBox MB_YESNO|MB_ICONEXCLAMATION \ + "Geany-Plugins has already been installed. $\nDo you want to remove the previous version before installing $(^Name) ?" \ + /SD IDYES IDYES remove IDNO finish + +remove: + ; run the uninstaller + ClearErrors + ; we read the installation path of the old installation from the Registry + ReadRegStr $UNINSTDIR SHCTX "${PRODUCT_DIR_REGKEY}" "Path" + IfSilent dosilent nonsilent +dosilent: + ExecWait '$R0 /S _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file + Goto finish +nonsilent: + ExecWait '$R0 _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file +finish: +FunctionEnd + +Function un.onUninstSuccess + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." \ + /SD IDOK +FunctionEnd + +Function un.onInit + ; If the user does *not* have administrator privileges, abort + StrCpy $Answer "" + !insertmacro IsUserAdmin $Answer $UserName + ${if} $Answer == "yes" + SetShellVarContext all + ${else} + ; check if the Geany has been installed with admin permisions + ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher" + ${if} $0 != "" + MessageBox MB_OK|MB_ICONSTOP \ + "You need administrator privileges to uninstall Geany-Plugins!" /SD IDOK + Abort + ${endif} + SetShellVarContext current + ${endif} + + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 \ + "Are you sure you want to completely remove $(^Name) and all of its components?" \ + /SD IDYES IDYES +2 + Abort +FunctionEnd + +Function OnDirLeave + ClearErrors + SetOutPath "$INSTDIR" ; what about IfError creating $INSTDIR? + GetTempFileName $1 "$INSTDIR" ; creates tmp file (or fails) + FileOpen $0 "$1" "w" ; error to open? + FileWriteByte $0 "0" + IfErrors notPossible possible + +notPossible: + RMDir "$INSTDIR" ; removes folder if empty + MessageBox MB_OK "The given directory is not writeable. Please choose another one!" /SD IDOK + Abort +possible: + FileClose $0 + Delete "$1" +FunctionEnd
Property changes on: trunk/geany-plugins/build/geany-plugins.nsi ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.