added modules and scripts for Windows deployment/installer
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2502 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
fc85114608
commit
2c6cdafe10
7 changed files with 330 additions and 5 deletions
|
@ -1,7 +1,5 @@
|
||||||
# -*- coding: UTF-8 -*-
|
|
||||||
# -*- Mode: Python; py-indent-offset: 4 -*-
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -22,5 +20,3 @@
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#from loops.base import Loops
|
|
||||||
|
|
BIN
deploy/library.zip
Normal file
BIN
deploy/library.zip
Normal file
Binary file not shown.
118
deploy/loops.nsi
Normal file
118
deploy/loops.nsi
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
; Script generated by the HM NIS Edit Script Wizard.
|
||||||
|
|
||||||
|
; HM NIS Edit Wizard helper defines
|
||||||
|
!define PRODUCT_NAME "loops"
|
||||||
|
!define PRODUCT_VERSION "0.4"
|
||||||
|
!define PRODUCT_PUBLISHER "cyberconcepts"
|
||||||
|
!define PRODUCT_WEB_SITE "http://www.cyberconcepts.de"
|
||||||
|
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\loops.exe"
|
||||||
|
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||||
|
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
||||||
|
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
|
||||||
|
!define PRODUCT_ROOT "Z:\home\helmutm\deploy\loops\windows\loops"
|
||||||
|
|
||||||
|
; MUI 1.67 compatible ------
|
||||||
|
!include "MUI.nsh"
|
||||||
|
|
||||||
|
; MUI Settings
|
||||||
|
!define MUI_ABORTWARNING
|
||||||
|
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
|
||||||
|
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
||||||
|
|
||||||
|
; Welcome page
|
||||||
|
!insertmacro MUI_PAGE_WELCOME
|
||||||
|
; License page
|
||||||
|
;!insertmacro MUI_PAGE_LICENSE "${PRODUCT_ROOT}\license.txt"
|
||||||
|
; Directory page
|
||||||
|
!insertmacro MUI_PAGE_DIRECTORY
|
||||||
|
; Start menu page
|
||||||
|
var ICONS_GROUP
|
||||||
|
!define MUI_STARTMENUPAGE_NODISABLE
|
||||||
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "loops"
|
||||||
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
|
||||||
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
|
||||||
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
|
||||||
|
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
|
||||||
|
; Instfiles page
|
||||||
|
!insertmacro MUI_PAGE_INSTFILES
|
||||||
|
; Finish page
|
||||||
|
!define MUI_FINISHPAGE_RUN "$INSTDIR\loopsw.exe"
|
||||||
|
!insertmacro MUI_PAGE_FINISH
|
||||||
|
|
||||||
|
; Uninstaller pages
|
||||||
|
!insertmacro MUI_UNPAGE_INSTFILES
|
||||||
|
|
||||||
|
; Language files
|
||||||
|
!insertmacro MUI_LANGUAGE "English"
|
||||||
|
!insertmacro MUI_LANGUAGE "German"
|
||||||
|
|
||||||
|
; MUI end ------
|
||||||
|
|
||||||
|
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
||||||
|
OutFile "Setup.exe"
|
||||||
|
InstallDir "$PROGRAMFILES\loops"
|
||||||
|
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
|
||||||
|
ShowInstDetails show
|
||||||
|
ShowUnInstDetails show
|
||||||
|
|
||||||
|
Section "Hauptgruppe" SEC01
|
||||||
|
SetOutPath "$INSTDIR"
|
||||||
|
SetOverwrite ifnewer
|
||||||
|
File /r "${PRODUCT_ROOT}\*"
|
||||||
|
|
||||||
|
; Shortcuts
|
||||||
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||||
|
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
|
||||||
|
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\loops.lnk" "$INSTDIR\loopsw.exe"
|
||||||
|
;CreateShortCut "$DESKTOP\LearnSim.lnk" "$INSTDIR\learnsimw.exe"
|
||||||
|
!insertmacro MUI_STARTMENU_WRITE_END
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section -AdditionalIcons
|
||||||
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||||
|
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
|
||||||
|
;CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
|
||||||
|
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"
|
||||||
|
!insertmacro MUI_STARTMENU_WRITE_END
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section -Post
|
||||||
|
WriteUninstaller "$INSTDIR\uninst.exe"
|
||||||
|
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\AppMainExe.exe"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\start.exe"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
||||||
|
;WriteRegStr ${PRODUCT_UNINSTs_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
|
||||||
|
Function un.onUninstSuccess
|
||||||
|
HideWindow
|
||||||
|
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) wurde erfolgreich deinstalliert."
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
Function un.onInit
|
||||||
|
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "M<EFBFBD>hten Sie $(^Name) und alle seinen Komponenten deinstallieren?" IDYES +2
|
||||||
|
Abort
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
Section Uninstall
|
||||||
|
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
|
||||||
|
Delete "$INSTDIR\${PRODUCT_NAME}.url"
|
||||||
|
Delete "$INSTDIR\uninst.exe"
|
||||||
|
Delete "$INSTDIR\start.exe"
|
||||||
|
|
||||||
|
Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
|
||||||
|
;Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk"
|
||||||
|
;Delete "$DESKTOP\LearnSim.lnk"
|
||||||
|
Delete "$SMPROGRAMS\$ICONS_GROUP\loopsm.lnk"
|
||||||
|
|
||||||
|
RMDir "$SMPROGRAMS\$ICONS_GROUP"
|
||||||
|
RMDir "$INSTDIR"
|
||||||
|
|
||||||
|
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
||||||
|
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
|
||||||
|
SetAutoClose true
|
||||||
|
SectionEnd
|
39
deploy/make_setup
Executable file
39
deploy/make_setup
Executable file
|
@ -0,0 +1,39 @@
|
||||||
|
#! /bin/bash
|
||||||
|
#
|
||||||
|
# produce Setup.exe
|
||||||
|
# call this script directly from the deploy directory
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
|
||||||
|
DEVELOPMENT_INSTANCE=/home/33zope/mz
|
||||||
|
LIB_SOURCE=$DEVELOPMENT_INSTANCE/lib/python
|
||||||
|
LIB_DEST=instance/lib/python
|
||||||
|
NSIS_EXE=c:\\programme\\nsis\\makensis.exe
|
||||||
|
|
||||||
|
cd ../loops
|
||||||
|
|
||||||
|
echo removing $LIB_DEST directories
|
||||||
|
rm -rf $LIB_DEST/cybertools
|
||||||
|
rm -rf $LIB_DEST/loops
|
||||||
|
|
||||||
|
echo copying $LIB_SOURCE to $LIB_DEST
|
||||||
|
cp -pr $LIB_SOURCE/cybertools $LIB_DEST
|
||||||
|
cp -pr $LIB_SOURCE/loops $LIB_DEST
|
||||||
|
|
||||||
|
echo removing $LIB_DEST/loops/deploy
|
||||||
|
rm -rf $LIB_DEST/loops/deploy
|
||||||
|
|
||||||
|
echo removing .py files from $LIB_DEST
|
||||||
|
python ../deploy/remove_sourcefiles.py $LIB_DEST/cybertools
|
||||||
|
python ../deploy/remove_sourcefiles.py $LIB_DEST/loops
|
||||||
|
|
||||||
|
echo inserting main.pyc into library.zip
|
||||||
|
cp $LIB_DEST/loops/main.pyc .
|
||||||
|
zip library.zip main.pyc
|
||||||
|
rm main.pyc
|
||||||
|
|
||||||
|
cd ../deploy
|
||||||
|
|
||||||
|
#echo creating setup.exe with NSIS
|
||||||
|
#wine $NSIS_EXE loops.nsi
|
54
deploy/remove_sourcefiles.py
Executable file
54
deploy/remove_sourcefiles.py
Executable file
|
@ -0,0 +1,54 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
Remove .py and (if .pyo files present) .pyc from the directory given.
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
|
||||||
|
|
||||||
|
def removeSourceFiles(path):
|
||||||
|
for root, dirs, files in os.walk(path):
|
||||||
|
for d in dirs:
|
||||||
|
if d == '.svn':
|
||||||
|
removeDirectory(os.path.join(root, d))
|
||||||
|
for f in list(files):
|
||||||
|
if f == 'README.txt':
|
||||||
|
os.unlink(os.path.join(root, f))
|
||||||
|
continue
|
||||||
|
name, ext = os.path.splitext(f)
|
||||||
|
pyc = name + '.pyc'
|
||||||
|
pycPath = os.path.join(root, pyc)
|
||||||
|
pyo = name + '.pyo'
|
||||||
|
pyoPath = os.path.join(root, pyo)
|
||||||
|
py = name + '.py'
|
||||||
|
pyPath = os.path.join(root, py)
|
||||||
|
if ext == '.pyc':
|
||||||
|
if pyo in files:
|
||||||
|
print pyoPath,
|
||||||
|
files.remove(pyo)
|
||||||
|
os.unlink(pyoPath)
|
||||||
|
if py in files:
|
||||||
|
print pyPath,
|
||||||
|
files.remove(py)
|
||||||
|
os.unlink(pyPath)
|
||||||
|
elif ext == '.pyo':
|
||||||
|
if py in files:
|
||||||
|
print pyPath,
|
||||||
|
files.remove(py)
|
||||||
|
os.unlink(pyPath)
|
||||||
|
|
||||||
|
def removeDirectory(path):
|
||||||
|
for root, dirs, files in os.walk(path):
|
||||||
|
for f in files:
|
||||||
|
os.unlink(os.path.join(root, f))
|
||||||
|
for d in dirs:
|
||||||
|
removeDirectory(os.path.join(root, d))
|
||||||
|
os.rmdir(path)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
removeSourceFiles(sys.argv[1])
|
||||||
|
|
10
deploy/start.py
Executable file
10
deploy/start.py
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
|
||||||
|
""" Start script using a standardized entry point: main.main()
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
"""
|
||||||
|
|
||||||
|
from main import main
|
||||||
|
main()
|
||||||
|
|
108
main.py
Normal file
108
main.py
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
"""
|
||||||
|
Entry point for the loops application.
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
|
||||||
|
|
||||||
|
softwareHome = None
|
||||||
|
instanceHome = configFile = None
|
||||||
|
|
||||||
|
|
||||||
|
def setWindowsEnvironment():
|
||||||
|
global softwareHome, instanceHome, configFile
|
||||||
|
basedir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
if basedir.endswith('library.zip'):
|
||||||
|
basedir = os.path.dirname(basedir)
|
||||||
|
libdir = os.path.join(basedir, 'Lib')
|
||||||
|
softwareHome = os.path.join(libdir, 'site-packages')
|
||||||
|
instanceHome = os.path.join(basedir, 'instance')
|
||||||
|
configFile = os.path.join(instanceHome, 'etc', 'zope.conf')
|
||||||
|
sys.path.insert(0, libdir)
|
||||||
|
sys.path.insert(0, softwareHome)
|
||||||
|
sys.path.insert(0, os.path.join(basedir, 'DLLs'))
|
||||||
|
sys.path.insert(0, os.path.join(instanceHome, 'lib', 'python'))
|
||||||
|
|
||||||
|
|
||||||
|
def setZopeEnvironment():
|
||||||
|
global softwareHome, instanceHome, configFile
|
||||||
|
curdir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
#for i in range(5):
|
||||||
|
for i in range(3):
|
||||||
|
curdir = os.path.dirname(curdir)
|
||||||
|
instanceHome = curdir
|
||||||
|
if softwareHome is None:
|
||||||
|
softwareHome = os.path.join(os.path.dirname(instanceHome), 'lib', 'python')
|
||||||
|
configFile = os.path.join(instanceHome, 'etc', 'zope.conf')
|
||||||
|
sys.path[:] = sys.path[1:] # remove script directory
|
||||||
|
sys.path.insert(0, softwareHome)
|
||||||
|
sys.path.insert(0, os.path.join(instanceHome, 'lib', 'python'))
|
||||||
|
os.environ['USE_RLIBRARY'] = '' # do not use the R statistics library
|
||||||
|
|
||||||
|
|
||||||
|
def setInstanceHomeInZopeConf():
|
||||||
|
zc = open(configFile)
|
||||||
|
l1 = zc.readline()
|
||||||
|
rest = zc.read()
|
||||||
|
zc.close()
|
||||||
|
command, key, value = [w.strip() for w in l1.split()]
|
||||||
|
if command == '%define' and key == 'INSTANCE' and value != instanceHome:
|
||||||
|
print 'INSTANCE variable changed from %s to %s.' % (value, instanceHome)
|
||||||
|
l1 = ' '.join((command, key, instanceHome)) + '\n'
|
||||||
|
zc = open(configFile, 'w')
|
||||||
|
zc.write(l1)
|
||||||
|
zc.write(rest)
|
||||||
|
zc.close()
|
||||||
|
|
||||||
|
|
||||||
|
def startZope(configFile):
|
||||||
|
# set up the agent application
|
||||||
|
from cybertools.agent.main import setup
|
||||||
|
#setup()
|
||||||
|
# start Zope using the twisted server
|
||||||
|
from zope.app.twisted.main import main
|
||||||
|
try:
|
||||||
|
main(["-C", configFile])
|
||||||
|
except IOError, e:
|
||||||
|
if str(e) == '[Errno 11] Resource temporarily unavailable':
|
||||||
|
print 'WARNING: Background process already running.'
|
||||||
|
#from startup import openBrowser
|
||||||
|
#openBrowser(None)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
""" Called from loops.exe (=deploy/start.py). """
|
||||||
|
setWindowsEnvironment()
|
||||||
|
setInstanceHomeInZopeConf()
|
||||||
|
startZope(configFile)
|
||||||
|
|
||||||
|
|
||||||
|
def mainZope():
|
||||||
|
""" Start in a regular Zope instance. """
|
||||||
|
setZopeEnvironment()
|
||||||
|
startZope(configFile)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
mainZope()
|
Loading…
Add table
Reference in a new issue