SF.net SVN: geany-plugins:[797] trunk/geany-plugins/build/geany-plugins.nsi
eht16 at users.sourceforge.net
eht16 at xxxxx
Tue Jun 30 20:56:42 UTC 2009
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/nsis/setup.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/nsis/setup.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.
More information about the Plugins-Commits
mailing list