svn commit: rev 22823 - avalon/trunk/runtime/merlin/cli/etc/nsi

[email protected]
Newsgroups gmane.comp.jakarta.avalon.cvs
Message-ID <[email protected]>
Author: mcconnell
Date: Sun Jul 11 15:29:34 2004
New Revision: 22823

Added:
   avalon/trunk/runtime/merlin/cli/etc/nsi/
   avalon/trunk/runtime/merlin/cli/etc/nsi/PathMunge.nsh
   avalon/trunk/runtime/merlin/cli/etc/nsi/README.txt   (contents, props changed)
   avalon/trunk/runtime/merlin/cli/etc/nsi/WriteEnvStr.nsh
   avalon/trunk/runtime/merlin/cli/etc/nsi/merlin.nsi
Log:
add nsis scripts - not working but added anyhow

Added: avalon/trunk/runtime/merlin/cli/etc/nsi/PathMunge.nsh
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/merlin/cli/etc/nsi/PathMunge.nsh	Sun Jul 11 15:29:34 2004
@@ -0,0 +1,236 @@
+!verbose 3
+!include "WinMessages.NSH"
+!verbose 4
+
+; AddToPath - Adds the given dir to the search path.
+;        Input - head of the stack
+;        Note - Win9x systems requires reboot
+
+Function AddToPath
+  Exch $0
+  Push $1
+  Push $2
+  Push $3
+
+  # don't add if the path doesn't exist
+  IfFileExists $0 "" AddToPath_done
+
+  ReadEnvStr $1 PATH
+  Push "$1;"
+  Push "$0;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+  Push "$1;"
+  Push "$0\;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+  GetFullPathName /SHORT $3 $0
+  Push "$1;"
+  Push "$3;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+  Push "$1;"
+  Push "$3\;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+
+  Call IsNT
+  Pop $1
+  StrCmp $1 1 AddToPath_NT
+    ; Not on NT
+    StrCpy $1 $WINDIR 2
+    FileOpen $1 "$1\autoexec.bat" a
+    FileSeek $1 -1 END
+    FileReadByte $1 $2
+    IntCmp $2 26 0 +2 +2 # DOS EOF
+      FileSeek $1 -1 END # write over EOF
+    FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
+    FileClose $1
+    SetRebootFlag true
+    Goto AddToPath_done
+
+  AddToPath_NT:
+    ReadRegStr $1 HKCU "Environment" "PATH"
+    StrCpy $2 $1 1 -1 # copy last char
+    StrCmp $2 ";" 0 +2 # if last char == ;
+      StrCpy $1 $1 -1 # remove last char
+    StrCmp $1 "" AddToPath_NTdoIt
+      StrCpy $0 "$1;$0"
+    AddToPath_NTdoIt:
+      WriteRegExpandStr HKCU "Environment" "PATH" $0
+      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+  AddToPath_done:
+    Pop $3
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+
+; RemoveFromPath - Remove a given dir from the path
+;     Input: head of the stack
+
+Function un.RemoveFromPath
+  Exch $0
+  Push $1
+  Push $2
+  Push $3
+  Push $4
+  Push $5
+  Push $6
+
+  IntFmt $6 "%c" 26 # DOS EOF
+
+  Call un.IsNT
+  Pop $1
+  StrCmp $1 1 unRemoveFromPath_NT
+    ; Not on NT
+    StrCpy $1 $WINDIR 2
+    FileOpen $1 "$1\autoexec.bat" r
+    GetTempFileName $4
+    FileOpen $2 $4 w
+    GetFullPathName /SHORT $0 $0
+    StrCpy $0 "SET PATH=%PATH%;$0"
+    Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoop:
+      FileRead $1 $3
+      StrCpy $5 $3 1 -1 # read last char
+      StrCmp $5 $6 0 +2 # if DOS EOF
+        StrCpy $3 $3 -1 # remove DOS EOF so we can compare
+      StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
+      StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
+      StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
+      StrCmp $3 "" unRemoveFromPath_dosLoopEnd
+      FileWrite $2 $3
+      Goto unRemoveFromPath_dosLoop
+      unRemoveFromPath_dosLoopRemoveLine:
+        SetRebootFlag true
+        Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoopEnd:
+      FileClose $2
+      FileClose $1
+      StrCpy $1 $WINDIR 2
+      Delete "$1\autoexec.bat"
+      CopyFiles /SILENT $4 "$1\autoexec.bat"
+      Delete $4
+      Goto unRemoveFromPath_done
+
+  unRemoveFromPath_NT:
+    ReadRegStr $1 HKCU "Environment" "PATH"
+    StrCpy $5 $1 1 -1 # copy last char
+    StrCmp $5 ";" +2 # if last char != ;
+      StrCpy $1 "$1;" # append ;
+    Push $1
+    Push "$0;"
+    Call un.StrStr ; Find `$0;` in $1
+    Pop $2 ; pos of our dir
+    StrCmp $2 "" unRemoveFromPath_done
+      ; else, it is in path
+      # $0 - path to add
+      # $1 - path var
+      StrLen $3 "$0;"
+      StrLen $4 $2
+      StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
+      StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
+      StrCpy $3 $5$6
+
+      StrCpy $5 $3 1 -1 # copy last char
+      StrCmp $5 ";" 0 +2 # if last char == ;
+        StrCpy $3 $3 -1 # remove last char
+
+      WriteRegExpandStr HKCU "Environment" "PATH" $3
+      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+  unRemoveFromPath_done:
+    Pop $6
+    Pop $5
+    Pop $4
+    Pop $3
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+
+###########################################
+#            Utility Functions            #
+###########################################
+
+; IsNT
+; no input
+; output, top of the stack = 1 if NT or 0 if not
+;
+; Usage:
+;   Call IsNT
+;   Pop $R0
+;  ($R0 at this point is 1 or 0)
+
+!macro IsNT un
+Function ${un}IsNT
+  Push $0
+  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+  StrCmp $0 "" 0 IsNT_yes
+  ; we are not NT.
+  Pop $0
+  Push 0
+  Return
+
+  IsNT_yes:
+    ; NT!!!
+    Pop $0
+    Push 1
+FunctionEnd
+!macroend
+!insertmacro IsNT ""
+!insertmacro IsNT "un."
+
+; StrStr
+; input, top of stack = string to search for
+;        top of stack-1 = string to search in
+; output, top of stack (replaces with the portion of the string remaining)
+; modifies no other variables.
+;
+; Usage:
+;   Push "this is a long ass string"
+;   Push "ass"
+;   Call StrStr
+;   Pop $R0
+;  ($R0 at this point is "ass string")
+
+!macro StrStr un
+Function ${un}StrStr
+Exch $R1 ; st=haystack,old$R1, $R1=needle
+  Exch    ; st=old$R1,haystack
+  Exch $R2 ; st=old$R1,old$R2, $R2=haystack
+  Push $R3
+  Push $R4
+  Push $R5
+  StrLen $R3 $R1
+  StrCpy $R4 0
+  ; $R1=needle
+  ; $R2=haystack
+  ; $R3=len(needle)
+  ; $R4=cnt
+  ; $R5=tmp
+  loop:
+    StrCpy $R5 $R2 $R3 $R4
+    StrCmp $R5 $R1 done
+    StrCmp $R5 "" done
+    IntOp $R4 $R4 + 1
+    Goto loop
+done:
+  StrCpy $R1 $R2 "" $R4
+  Pop $R5
+  Pop $R4
+  Pop $R3
+  Pop $R2
+  Exch $R1
+FunctionEnd
+!macroend
+!insertmacro StrStr ""
+!insertmacro StrStr "un."
\ No newline at end of file

Added: avalon/trunk/runtime/merlin/cli/etc/nsi/README.txt
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/merlin/cli/etc/nsi/README.txt	Sun Jul 11 15:29:34 2004
@@ -0,0 +1,29 @@
+MERLIN NSIS Installer Script
+
+You will need the Nullsoft Installation System to compile this script
+see: http://nsis.sourceforge.net/
+
+Features:
+  - Installs the base Merlin platform
+  - Optionally installs the docs, tutorials, plugins and service
+  - Creates a MERLIN_HOME env variable for ALL USERS
+  - Installs the Merlin NT service
+  - Adds Merlin to the PATH
+  - Installs the plugins into MAVEN_HOME/plugins or if maven is
+    not installed into MERLIN_HOME/plugins
+
+To Do:
+  - Check for JVM and version.  Install endorsed libs if needed
+  - All install for one user or many
+  - Install a default app that includes the merlin facilities
+  - Add desktop and start menu shortcuts (to what?)
+
+To compile:
+
+   1. check out the meta, util, repository, tutorials, and merlin CVS modules
+   2. use maven to build the merlin 
+   3. use maven to build merlin docs (maven site:generate)
+   4. use maven to build the tutorials (maven avalon:build)
+   5. compile the NSIS script
+
+ 

Added: avalon/trunk/runtime/merlin/cli/etc/nsi/WriteEnvStr.nsh
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/merlin/cli/etc/nsi/WriteEnvStr.nsh	Sun Jul 11 15:29:34 2004
@@ -0,0 +1,106 @@
+!include WinMessages.nsh
+
+!ifdef ALL_USERS
+  !define WriteEnvStr_RegKey \
+     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+!else
+  !define WriteEnvStr_RegKey 'HKCU "Environment"'
+!endif
+
+#
+# WriteEnvStr - Writes an environment variable
+# Note: Win9x systems requires reboot
+#
+# Example:
+#  Push "HOMEDIR"           # name
+#  Push "C:\New Home Dir\"  # value
+#  Call WriteEnvStr
+#
+Function WriteEnvStr
+  Exch $1 ; $1 has environment variable value
+  Exch
+  Exch $0 ; $0 has environment variable name
+  Push $2
+  
+  Call IsNT
+  Pop $2
+  StrCmp $2 1 WriteEnvStr_NT
+    ; Not on NT
+    StrCpy $2 $WINDIR 2 ; Copy drive of windows (c:)
+    FileOpen $2 "$2\autoexec.bat" a
+    FileSeek $2 0 END
+    FileWrite $2 "$\r$\nSET $0=$1$\r$\n"
+    FileClose $2
+    SetRebootFlag true
+    Goto WriteEnvStr_done
+
+  WriteEnvStr_NT:
+      WriteRegExpandStr ${WriteEnvStr_RegKey} $0 $1
+      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} \
+        0 "STR:Environment" /TIMEOUT=5000
+  
+  WriteEnvStr_done:
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+
+#
+# un.DeleteEnvStr - Removes an environment variable
+# Note: Win9x systems requires reboot
+#
+# Example:
+#  Push "HOMEDIR"           # name
+#  Call un.DeleteEnvStr
+#
+Function un.DeleteEnvStr
+  Exch $0 ; $0 now has the name of the variable
+  Push $1
+  Push $2
+  Push $3
+  Push $4
+  Push $5
+  
+  Call un.IsNT
+  Pop $1
+  StrCmp $1 1 DeleteEnvStr_NT
+    ; Not on NT
+    StrCpy $1 $WINDIR 2
+    FileOpen $1 "$1\autoexec.bat" r
+    GetTempFileName $4
+    FileOpen $2 $4 w
+    StrCpy $0 "SET $0="
+    SetRebootFlag true
+    
+    DeleteEnvStr_dosLoop:
+      FileRead $1 $3
+      StrLen $5 $0
+      StrCpy $5 $3 $5
+      StrCmp $5 $0 DeleteEnvStr_dosLoop
+      StrCmp $5 "" DeleteEnvStr_dosLoopEnd
+      FileWrite $2 $3
+      Goto DeleteEnvStr_dosLoop
+    
+    DeleteEnvStr_dosLoopEnd:
+      FileClose $2
+      FileClose $1
+      StrCpy $1 $WINDIR 2
+      Delete "$1\autoexec.bat"
+      CopyFiles /SILENT $4 "$1\autoexec.bat"
+      Delete $4
+      Goto DeleteEnvStr_done
+
+  DeleteEnvStr_NT:
+    DeleteRegValue ${WriteEnvStr_RegKey} $0
+    SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} \
+      0 "STR:Environment" /TIMEOUT=5000
+  
+  DeleteEnvStr_done:
+    Pop $5
+    Pop $4
+    Pop $3
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+

Added: avalon/trunk/runtime/merlin/cli/etc/nsi/merlin.nsi
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/merlin/cli/etc/nsi/merlin.nsi	Sun Jul 11 15:29:34 2004
@@ -0,0 +1,214 @@
+; Merlin NSIS Installer
+; Copyright 2004 The Apache Software Foundation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;    http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+!define ALL_USERS
+
+!define TEMP $R0
+
+!include "WriteEnvStr.nsh"
+!include "PathMunge.nsh"
+!include "MUI.nsh"
+
+;--------------------------------
+;Configuration
+
+  ;General
+  Name "Merlin Platform 3.3.0"
+  OutFile "merlin-3.3.0-install.exe"
+
+  ;Folder selection page
+  InstallDir "C:\merlin"
+  
+  ;Remember install folder
+  InstallDirRegKey HKCU "Software\Merlin Platform 3.3" ""
+
+;--------------------------------
+;Variables
+
+  Var MUI_TEMP
+  Var STARTMENU_FOLDER
+
+;--------------------------------
+;Interface Settings
+
+  !define MUI_HEADERIMAGE
+  !define MUI_ABORTWARNING
+
+;--------------------------------
+;Pages
+
+  !insertmacro MUI_PAGE_WELCOME
+  !insertmacro MUI_PAGE_LICENSE "..\LICENSE.txt"
+  !insertmacro MUI_PAGE_COMPONENTS
+  !insertmacro MUI_PAGE_DIRECTORY
+
+  ;Start Menu Folder Page Configuration
+  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
+  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Modern UI Test"
+  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+
+  !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
+
+  !insertmacro MUI_PAGE_INSTFILES
+  !insertmacro MUI_PAGE_FINISH
+
+  !insertmacro MUI_UNPAGE_WELCOME
+  !insertmacro MUI_UNPAGE_CONFIRM
+  !insertmacro MUI_UNPAGE_INSTFILES
+  !insertmacro MUI_UNPAGE_FINISH
+  
+;--------------------------------
+;Languages
+ 
+  !insertmacro MUI_LANGUAGE "English"
+  
+;--------------------------------
+;Language Strings
+
+  ;Description
+  LangString DESC_SecMerlin   ${LANG_ENGLISH} "Installs Base Merlin Platform"
+  LangString DESC_SecDoc      ${LANG_ENGLISH} "Installs Merlin Documentation"
+  LangString DESC_SecTutorial ${LANG_ENGLISH} "Installs Merlin Tutorial"
+  LangString DESC_SecPlugins  ${LANG_ENGLISH} "Installs Maven Plugins"
+  LangString DESC_SecService  ${LANG_ENGLISH} "Installs Merlin NT Service"
+
+; LangString DESC_SecFacilities  ${LANG_ENGLISH} "Installs Maven Facilities"  
+
+;--------------------------------
+;Installer Sections
+
+Section "merlin base" SecMerlin
+
+  SetOutPath $INSTDIR\bin
+  File /r target\deliverables\bin\*
+  SetOutPath $INSTDIR\config
+  File /r target\deliverables\config\*
+  SetOutPath $INSTDIR\system
+  File /r target\deliverables\lib\*
+  SetOutPath $INSTDIR\system
+  File /r target\merlin\system\*
+  SetOutPath $INSTDIR
+  File  target\deliverables\NOTICE.TXT
+  File  target\deliverables\LICENSE.TXT
+  File  target\deliverables\INSTALL.TXT
+
+  Push "MERLIN_HOME"
+  Push $INSTDIR
+  Call WriteEnvStr
+  
+  Push $INSTDIR\bin
+  Call AddToPath
+
+  ;Store install folder
+  WriteRegStr HKCU "Software\Merlin Platform 3.3" "" $INSTDIR
+
+  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+
+    ;Create shortcuts
+    CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
+    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
+
+  !insertmacro MUI_STARTMENU_WRITE_END
+  
+  ;Create uninstaller
+  WriteUninstaller "$INSTDIR\Uninstall.exe"
+
+SectionEnd
+
+Section "plugins" SecPlugins
+
+  Push $R0
+
+  ;ReadEnvStr $R0 "MAVEN_HOME"
+  ;IfFileExists "$R0\bin\maven.bat" MavenFound  MavenNotFound
+  
+  ;MavenFound:
+  ;  SetOutPath $R0\plugins
+  ;  File /r ..\target\merlin\plugins\avalon-meta\plugins\*
+  ;  File /r ..\target\merlin\plugins\avalon-util\plugins\*
+  ;  File /r ..\target\merlin\plugins\merlin\plugins\*
+  ;  Goto Done
+  ;
+  ;MavenNotFound:
+  ;  SetOutPath $INSTDIR\plugins
+  ;  File /r ..\target\merlin\plugins\*
+
+  Done:
+    Pop $R0
+
+SectionEND
+
+Section "docs" SecDoc
+  ;SetOutPath $INSTDIR\docs
+  ;File /r ..\target\docs\*
+  ;!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+  ;
+  ;  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Merlin.lnk" "$INSTDIR\docs\index.html"
+  ;  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Basic Tutorials.lnk"   ;"$INSTDIR\docs\starting\tutorials\index.html"
+  ;  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Advanced Tutorials.lnk"     ;"$INSTDIR\docs\starting\advanced\index.html"
+  ;  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Specification.lnk" "$INSTDIR\docs\reference\index.html"
+  ;
+  '!insertmacro MUI_STARTMENU_WRITE_END
+SectionEND
+
+Section "tutorial" SecTutorial
+  SetOutPath $INSTDIR\tutorials
+  File /r ..\..\tutorials\target\tutorials\*
+SectionEND
+
+Section "merlin service" SecService
+  Exec "$INSTDIR\bin\nt\Wrapper.exe -i $INSTDIR\bin\nt\wrapper.conf"
+SectionEND
+
+;--------------------------------
+;Descriptions
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecMerlin} $(DESC_SecMerlin)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecTutorial} $(DESC_SecTutorial)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecPlugins} $(DESC_SecPlugins)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService)
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+ 
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+
+  Exec "$INSTDIR\bin\nt\Wrapper.exe -r $INSTDIR\bin\nt\wrapper.conf"
+
+  Push "MERLIN_HOME"
+  Call un.DeleteEnvStr
+
+  Push $INSTDIR\bin
+  Call un.RemoveFromPath
+
+  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
+
+  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+  RMDir /r "$SMPROGRAMS\$MUI_TEMP"
+
+  RMDir /r $INSTDIR
+  
+SectionEnd
+
+; todo:
+;    Check for JVM and Version.  Install endorsed jars if needed
+;      see  http://nsis.sourceforge.net/archive/nsisweb.php?page=543&instances=0
+;    Check for if we are installing for one user or many
+;    Install a default app that includes the facilities
+
+; eof
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.