summaryrefslogtreecommitdiff
path: root/setup
diff options
context:
space:
mode:
Diffstat (limited to 'setup')
-rwxr-xr-xsetup/package.py108
-rw-r--r--setup/win32/Makefile6
-rwxr-xr-xsetup/win32/setup.nsi39
-rw-r--r--setup/win32/win32_service.py53
-rw-r--r--setup/win32/win32_setup.py54
-rw-r--r--setup/win32/winpy_requirements.txt41
6 files changed, 135 insertions, 166 deletions
diff --git a/setup/package.py b/setup/package.py
index 03d7fe61027..d4b0a2c294b 100755
--- a/setup/package.py
+++ b/setup/package.py
@@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from __future__ import print_function
+import logging
import optparse
import os
import pexpect
@@ -10,6 +11,7 @@ import signal
import subprocess
import tempfile
import time
+import traceback
try:
from xmlrpc import client as xmlrpclib
except ImportError:
@@ -26,7 +28,7 @@ from tempfile import NamedTemporaryFile
# Utils
#----------------------------------------------------------
exec(open(join(dirname(__file__), '..', 'odoo', 'release.py'), 'rb').read())
-version = version.split('-')[0]
+version = version.split('-')[0].replace('saas~','')
docker_version = version.replace('+', '')
timestamp = time.strftime("%Y%m%d", time.gmtime())
GPGPASSPHRASE = os.getenv('GPGPASSPHRASE')
@@ -58,7 +60,7 @@ def mkdir(d):
os.makedirs(d)
def system(l, chdir=None):
- print (l)
+ logging.info("System call: {}".format(l))
if chdir:
cwd = os.getcwd()
os.chdir(chdir)
@@ -82,12 +84,12 @@ def _rpc_count_modules(addr='http://127.0.0.1', port=8069, dbname='mycompany'):
dbname, 1, 'admin', 'ir.module.module', 'search', [('state', '=', 'to install')]
)
if toinstallmodules:
- print("Package test: FAILED. Not able to install dependencies of base.")
+ logging.error("Package test: FAILED. Not able to install dependencies of base.")
raise Exception("Installation of package failed")
else:
- print("Package test: successfuly installed %s modules" % len(modules))
+ logging.info("Package test: successfuly installed %s modules" % len(modules))
else:
- print("Package test: FAILED. Not able to install base.")
+ logging.error("Package test: FAILED. Not able to install base.")
raise Exception("Installation of package failed")
def publish(o, type, extensions):
@@ -114,8 +116,9 @@ def publish(o, type, extensions):
published = []
for extension in extensions:
- release = glob("%s/odoo_*.%s" % (o.build_dir, extension))[0]
- published.append(_publish(o, release))
+ release = glob("%s/odoo_*.%s" % (o.build_dir, extension))
+ if release:
+ published.append(_publish(o, release[0]))
return published
class OdooDocker(object):
@@ -147,10 +150,10 @@ class OdooDocker(object):
try:
_rpc_count_modules(port=str(self.port))
except Exception as e:
- print('Exception during docker execution: %s:' % str(e))
- print('Error during docker execution: printing the bash output:')
+ logging.error('Exception during docker execution: %s:' % str(e))
+ logging.error('Error during docker execution: printing the bash output:')
with open(self.log_file.name) as f:
- print('\n'.join(f.readlines()))
+ print('\n'.join(f.readlines()), file=stderr)
raise
finally:
self.docker.close()
@@ -178,16 +181,16 @@ class KVM(object):
self.login = login
def timeout(self,signum,frame):
- print("vm timeout kill",self.pid)
+ logging.warning("vm timeout kill",self.pid)
os.kill(self.pid,15)
def start(self):
- l="kvm -net nic,model=rtl8139 -net user,hostfwd=tcp:127.0.0.1:10022-:22,hostfwd=tcp:127.0.0.1:18069-:8069,hostfwd=tcp:127.0.0.1:15432-:5432 -m 1024 -drive".split(" ")
+ l="kvm -cpu core2duo -smp 2,sockets=2,cores=1,threads=1 -net nic,model=rtl8139 -net user,hostfwd=tcp:127.0.0.1:10022-:22,hostfwd=tcp:127.0.0.1:18069-:8069,hostfwd=tcp:127.0.0.1:15432-:5432 -m 1024 -drive".split(" ")
#l.append('file=%s,if=virtio,index=0,boot=on,snapshot=on'%self.image)
l.append('file=%s,snapshot=on'%self.image)
#l.extend(['-vnc','127.0.0.1:1'])
l.append('-nographic')
- print( " ".join(l))
+ logging.info("Starting kvm: {}".format( " ".join(l)))
self.pid=os.spawnvp(os.P_NOWAIT, l[0], l)
time.sleep(20)
signal.alarm(2400)
@@ -203,7 +206,7 @@ class KVM(object):
l=['ssh','-o','UserKnownHostsFile=/dev/null','-o','StrictHostKeyChecking=no','-p','10022','-i',self.ssh_key,'%s@127.0.0.1'%self.login,cmd]
system(l)
- def rsync(self,args,options='--delete --exclude .bzrignore'):
+ def rsync(self,args,options='--delete --exclude .git --exclude .tx --exclude __pycache__'):
cmd ='rsync -rt -e "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022 -i %s" %s %s' % (self.ssh_key, options, args)
system(cmd)
@@ -213,17 +216,20 @@ class KVM(object):
class KVMWinBuildExe(KVM):
def run(self):
with open(join(self.o.build_dir, 'setup/win32/Makefile.version'), 'w') as f:
- f.write("VERSION=%s\n" % version)
+ f.write("VERSION=%s\n" % version.replace('~', '_'))
with open(join(self.o.build_dir, 'setup/win32/Makefile.python'), 'w') as f:
f.write("PYTHON_VERSION=%s\n" % self.o.vm_winxp_python_version.replace('.', ''))
with open(join(self.o.build_dir, 'setup/win32/Makefile.servicename'), 'w') as f:
f.write("SERVICENAME=%s\n" % nt_service_name)
+ remote_build_dir = '/cygdrive/c/odoobuild/server/'
+
self.ssh("mkdir -p build")
- self.rsync('%s/ %s@127.0.0.1:build/server/' % (self.o.build_dir, self.login))
- self.ssh("cd build/server/setup/win32;time make allinone;")
- self.rsync('%s@127.0.0.1:build/server/setup/win32/release/ %s/' % (self.login, self.o.build_dir), '')
- print("KVMWinBuildExe.run(): done")
+ logging.info("Syncing Odoo files to virtual machine...")
+ self.rsync('%s/ %s@127.0.0.1:%s' % (self.o.build_dir, self.login, remote_build_dir))
+ self.ssh("cd {}setup/win32;time make allinone;".format(remote_build_dir))
+ self.rsync('%s@127.0.0.1:%ssetup/win32/release/ %s/' % (self.login, remote_build_dir, self.o.build_dir), '')
+ logging.info("KVMWinBuildExe.run(): done")
class KVMWinTestExe(KVM):
def run(self):
@@ -242,18 +248,25 @@ class KVMWinTestExe(KVM):
# Stage: building
#----------------------------------------------------------
def _prepare_build_dir(o, win32=False):
+
cmd = ['rsync', '-a', '--exclude', '.git', '--exclude', '*.pyc', '--exclude', '*.pyo']
if not win32:
cmd += ['--exclude', 'setup/win32']
system(cmd + ['%s/' % o.odoo_dir, o.build_dir])
- try:
- for addon_path in glob(join(o.build_dir, 'addons/*')):
- if addon_path.split(os.path.sep)[-1] not in ADDONS_NOT_TO_PUBLISH:
+ for addon_path in glob(join(o.build_dir, 'addons/*')):
+ if addon_path.split(os.path.sep)[-1] not in ADDONS_NOT_TO_PUBLISH:
+ try:
shutil.move(addon_path, join(o.build_dir, 'odoo/addons'))
- except shutil.Error:
- # Thrown when the add-on is already in odoo/addons (if _prepare_build_dir
- # has already been called once)
- pass
+ except shutil.Error as e:
+ # Thrown when the add-on is already in odoo/addons (if _prepare_build_dir
+ # has already been called once)
+ logging.warning("Warning '{}' while moving addon '{}'".format(e,addon_path))
+ if addon_path.startswith(o.build_dir) and os.path.isdir(addon_path):
+ logging.info("Removing '{}'".format(addon_path))
+ try:
+ shutil.rmtree(addon_path)
+ except shutil.Error as rm_error:
+ logging.warning("Cannot remove '{}': {}".format(addon_path, rm_error))
def build_tgz(o):
system(['python3', 'setup.py', 'sdist', '--quiet', '--formats=gztar,zip'], o.build_dir)
@@ -266,7 +279,7 @@ def build_deb(o):
subprocess.call(cmd, cwd=o.build_dir)
if not o.no_debsign:
deb = pexpect.spawn('dpkg-buildpackage -rfakeroot -k%s' % GPGID, cwd=o.build_dir)
- deb.logfile = stdout
+ deb.logfile = stdout.buffer
if GPGPASSPHRASE:
deb.expect_exact('Enter passphrase: ', timeout=1200)
deb.send(GPGPASSPHRASE + '\r\n')
@@ -292,7 +305,9 @@ def build_exe(o):
# Stage: testing
#----------------------------------------------------------
def _prepare_testing(o):
+ logging.info('Preparing testing')
if not o.no_tarball:
+ logging.info('Preparing docker container instance for tarball')
subprocess.call(["mkdir", "docker_src"], cwd=o.build_dir)
subprocess.call(["cp", "package.dfsrc", os.path.join(o.build_dir, "docker_src", "Dockerfile")],
cwd=os.path.join(o.odoo_dir, "setup"))
@@ -302,6 +317,7 @@ def _prepare_testing(o):
subprocess.call(["docker", "build", "-t", "odoo-%s-src-nightly-tests" % docker_version, "."],
cwd=os.path.join(o.build_dir, "docker_src"))
if not o.no_debian:
+ logging.info('Preparing docker container instance for debian')
subprocess.call(["mkdir", "docker_debian"], cwd=o.build_dir)
subprocess.call(["cp", "package.dfdebian", os.path.join(o.build_dir, "docker_debian", "Dockerfile")],
cwd=os.path.join(o.odoo_dir, "setup"))
@@ -311,6 +327,7 @@ def _prepare_testing(o):
subprocess.call(["docker", "build", "-t", "odoo-%s-debian-nightly-tests" % docker_version, "."],
cwd=os.path.join(o.build_dir, "docker_debian"))
if not o.no_rpm:
+ logging.info('Preparing docker container instance for RPM')
subprocess.call(["mkdir", "docker_fedora"], cwd=o.build_dir)
subprocess.call(["cp", "package.dffedora", os.path.join(o.build_dir, "docker_fedora", "Dockerfile")],
cwd=os.path.join(o.odoo_dir, "setup"))
@@ -318,6 +335,7 @@ def _prepare_testing(o):
cwd=os.path.join(o.build_dir, "docker_fedora"))
def test_tgz(o):
+ logging.info('Testing tarball in docker')
with docker('odoo-%s-src-nightly-tests' % docker_version, o.build_dir, o.pub) as wheezy:
wheezy.release = '*.tar.gz'
wheezy.system("service postgresql start")
@@ -331,6 +349,7 @@ def test_tgz(o):
wheezy.system('su odoo -s /bin/bash -c "odoo --addons-path=/usr/local/lib/python2.7/dist-packages/odoo/addons -d mycompany &"')
def test_deb(o):
+ logging.info('Testing deb package in docker')
with docker('odoo-%s-debian-nightly-tests' % docker_version, o.build_dir, o.pub) as wheezy:
wheezy.release = '*.deb'
wheezy.system("service postgresql start")
@@ -341,6 +360,7 @@ def test_deb(o):
wheezy.system('su odoo -s /bin/bash -c "odoo -c /etc/odoo/odoo.conf -d mycompany &"')
def test_rpm(o):
+ logging.info('Testing rpm in docker')
with docker('odoo-%s-fedora-nightly-tests' % docker_version, o.build_dir, o.pub) as fedora24:
fedora24.release = '*.noarch.rpm'
# Start postgresql
@@ -353,6 +373,7 @@ def test_rpm(o):
fedora24.system('su odoo -s /bin/bash -c "odoo -c /etc/odoo/odoo.conf -d mycompany &"')
def test_exe(o):
+ logging.info('Testng windows installer in KVM')
KVMWinTestExe(o, o.vm_winxp_image, o.vm_winxp_ssh_key, o.vm_winxp_login).start()
#---------------------------------------------------------
@@ -379,7 +400,7 @@ def gen_deb_package(o, published_files):
]
# Generate files
for command in commands:
- _gen_file(o, *command, temp_path)
+ _gen_file(o, command[0], command[-1], temp_path)
# Remove temp directory
shutil.rmtree(temp_path)
@@ -420,6 +441,8 @@ def options():
root = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
build_dir = "%s-%s" % (root, timestamp)
+ log_levels = { "debug" : logging.DEBUG, "info": logging.INFO, "warning": logging.WARN, "error": logging.ERROR, "critical": logging.CRITICAL }
+
op.add_option("-b", "--build-dir", default=build_dir, help="build directory (%default)", metavar="DIR")
op.add_option("-p", "--pub", default=None, help="pub directory (%default)", metavar="DIR")
op.add_option("", "--no-testing", action="store_true", help="don't test the builded packages")
@@ -431,13 +454,16 @@ def options():
op.add_option("", "--no-windows", action="store_true", help="don't build the windows package")
# Windows VM
- op.add_option("", "--vm-winxp-image", default='/home/odoo/vm/win1035/win10_py35.qcow2', help="%default")
- op.add_option("", "--vm-winxp-ssh-key", default='/home/odoo/vm/win1035/id_rsa', help="%default")
+ op.add_option("", "--vm-winxp-image", default='/home/odoo/vm/win1036/win10_winpy36.qcow2', help="%default")
+ op.add_option("", "--vm-winxp-ssh-key", default='/home/odoo/vm/win1036/id_rsa', help="%default")
op.add_option("", "--vm-winxp-login", default='Naresh', help="Windows login (%default)")
- op.add_option("", "--vm-winxp-python-version", default='3.5', help="Windows Python version installed in the VM (default: %default)")
+ op.add_option("", "--vm-winxp-python-version", default='3.6', help="Windows Python version installed in the VM (default: %default)")
+
op.add_option("", "--no-remove", action="store_true", help="don't remove build dir")
+ op.add_option("", "--logging", action="store", type="choice", choices=list(log_levels.keys()), default="info", help="Logging level")
(o, args) = op.parse_args()
+ logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %I:%M:%S', level=log_levels[o.logging])
# derive other options
o.odoo_dir = root
o.pkg = join(o.build_dir, 'pkg')
@@ -459,16 +485,17 @@ def main():
test_tgz(o)
published_files = publish(o, 'tarball', ['tar.gz', 'zip'])
except Exception as e:
- print("Won't publish the tgz release.\n Exception: %s" % str(e))
+ logging.error("Won't publish the tgz release.\n Exception: %s" % str(e))
if not o.no_debian:
build_deb(o)
try:
if not o.no_testing:
test_deb(o)
- published_files = publish(o, 'debian', ['deb', 'dsc', 'changes', 'tar.gz'])
+ published_files = publish(o, 'debian', ['deb', 'dsc', 'changes', 'tar.xz'])
gen_deb_package(o, published_files)
except Exception as e:
- print("Won't publish the deb release.\n Exception: %s" % str(e))
+ logging.error("Won't publish the deb release.\n Exception: %s" % str(e))
+ traceback.print_exc()
if not o.no_rpm:
build_rpm(o)
try:
@@ -477,7 +504,7 @@ def main():
published_files = publish(o, 'redhat', ['noarch.rpm'])
gen_rpm_repo(o, published_files[0])
except Exception as e:
- print("Won't publish the rpm release.\n Exception: %s" % str(e))
+ logging.error("Won't publish the rpm release.\n Exception: %s" % str(e))
if not o.no_windows:
_prepare_build_dir(o, win32=True)
build_exe(o)
@@ -486,19 +513,20 @@ def main():
test_exe(o)
published_files = publish(o, 'windows', ['exe'])
except Exception as e:
- print("Won't publish the exe release.\n Exception: %s" % str(e))
+ logging.error("Won't publish the exe release.\n Exception: %s" % str(e))
except Exception as e:
- print('Something bad happened ! : {}'.format(e), file=stderr)
+ logging.error('Something bad happened ! : {}'.format(e))
+ traceback.print_exc()
finally:
if o.no_remove:
- print('Build dir "{}" not removed'.format(o.build_dir))
+ logging.info('Build dir "{}" not removed'.format(o.build_dir))
else:
shutil.rmtree(o.build_dir)
- print('Build dir %s removed' % o.build_dir)
+ logging.info('Build dir %s removed' % o.build_dir)
if not o.no_testing:
system("docker rm -f `docker ps -a | awk '{print $1 }'` 2>>/dev/null")
- print('Remaining dockers removed')
+ logging.info('Remaining dockers removed')
if __name__ == '__main__':
diff --git a/setup/win32/Makefile b/setup/win32/Makefile
index c0d33c904b1..2efa1db6f69 100644
--- a/setup/win32/Makefile
+++ b/setup/win32/Makefile
@@ -10,7 +10,7 @@ LAUNCH_PY2EXE=/cygdrive/c/python${PYTHON_VERSION}/python.exe setup.py py2exe
MAKENSIS_ARGUMENTS=/DVERSION=$(VERSION) /DSERVICENAME=${SERVICENAME}
-LAUNCH_MAKENSIS=/cygdrive/c/cygwin/makensis $(MAKENSIS_ARGUMENTS) setup.nsi
+LAUNCH_MAKENSIS=/cygdrive/c/tools/cygwin/makensis $(MAKENSIS_ARGUMENTS) setup.nsi
default: allinone
@@ -27,8 +27,8 @@ server_clean:
rm -rf $(SERVER_DIRECTORY)/.cyg*
allinone: server_clean
- (cd $(SERVER_DIRECTORY)/setup/win32 && $(LAUNCH_PY2EXE_SERVICE))
- (cd $(SERVER_DIRECTORY) && $(LAUNCH_PY2EXE))
+ #(cd $(SERVER_DIRECTORY)/setup/win32 && $(LAUNCH_PY2EXE_SERVICE))
+ #(cd $(SERVER_DIRECTORY) && $(LAUNCH_PY2EXE))
(cd $(SERVER_DIRECTORY)/setup/win32 && $(LAUNCH_MAKENSIS))
(cd $(SERVER_DIRECTORY)/setup/win32 && mkdir -p $(FILES_DIRECTORY))
(cd $(SERVER_DIRECTORY)/setup/win32 && cp openerp-*.exe $(FILES_DIRECTORY)/openerp-server-setup-$(VERSION).exe)
diff --git a/setup/win32/setup.nsi b/setup/win32/setup.nsi
index 8a70867e602..004ea5f398e 100755
--- a/setup/win32/setup.nsi
+++ b/setup/win32/setup.nsi
@@ -41,7 +41,7 @@
!define PUBLISHER 'Odoo S.A.'
!ifndef MAJOR_VERSION
- !define MAJOR_VERSION '10'
+ !define MAJOR_VERSION '11'
!endif
!ifndef MINOR_VERSION
@@ -49,7 +49,7 @@
!endif
!ifndef REVISION_VERSION
- !define REVISION_VERSION '0'
+ !define REVISION_VERSION 'alpha1'
!endif
!ifndef VERSION
@@ -76,11 +76,11 @@
Name '${DISPLAY_NAME}'
Caption "${PRODUCT_NAME} ${VERSION} Setup"
OutFile "openerp-allinone-setup-${VERSION}.exe"
-#SetCompressor /final /solid lzma
+SetCompressor /FINAL lzma
#SetCompress auto
ShowInstDetails show
-XPStyle on
+#XPStyle on
InstallDir "$PROGRAMFILES\Odoo ${VERSION}"
InstallDirRegKey HKCU "${REGISTRY_KEY}" ""
@@ -116,7 +116,7 @@ Var HWNDPostgreSQLPassword
!define STATIC_PATH "static"
!define PIXMAPS_PATH "${STATIC_PATH}\pixmaps"
-!define POSTGRESQL_EXE_FILENAME "postgresql-9.5.4-2-windows.exe"
+!define POSTGRESQL_EXE_FILENAME "postgresql-9.5.8-1-windows.exe"
!define POSTGRESQL_EXE "${STATIC_PATH}\${POSTGRESQL_EXE_FILENAME}"
!define MUI_ABORTWARNING
@@ -205,14 +205,20 @@ Section $(TITLE_OpenERP_Server) SectionOpenERP_Server
SectionIn 1 2
# TODO: install in a temp dir before
+
+ # Installing winpython
+ SetOutPath "$INSTDIR\python"
+ File /r /x "__pycache__" "..\..\..\WinPython\python-3.6.2\*"
+
+ SetOutPath "$INSTDIR\nssm"
+ File /r /x "src" "..\..\..\nssm-2.24\*"
SetOutPath "$INSTDIR\server"
- File /r "..\..\dist\*"
+ File /r /x "${POSTGRESQL_EXE_FILENAME}" /x "wkhtmltopdf" "..\..\*"
- SetOutPath "$INSTDIR\service"
- File /r "dist\*"
- File "start.bat"
- File "stop.bat"
+ # Install Visual C redistribuable files
+ DetailPrint "Installing Visual C++ redistributable files"
+ nsExec::Exec '"$INSTDIR\service\vcredist\vcredist_x86.exe" /q'
SetOutPath "$INSTDIR\thirdparty"
File /r "${STATIC_PATH}\wkhtmltopdf\*"
@@ -233,9 +239,11 @@ Section $(TITLE_OpenERP_Server) SectionOpenERP_Server
WriteIniStr "$INSTDIR\server\odoo.conf" "options" "pg_path" "$INSTDIR\PostgreSQL\bin"
${EndIf}
- nsExec::Exec '"$INSTDIR\server\odoo-bin.exe" --stop-after-init --logfile "$INSTDIR\server\odoo.log" -s'
- nsExec::Exec '"$INSTDIR\service\win32_service.exe" -auto -install'
-
+ DetailPrint "Installing Windows service"
+ nsExec::ExecTOLog '"$INSTDIR\python\python.exe" "$INSTDIR\server\odoo-bin" --stop-after-init --logfile "$INSTDIR\server\odoo.log" -s'
+ nsExec::ExecToLog '"$INSTDIR\nssm\win32\nssm.exe" install ${SERVICENAME} "$INSTDIR\python\python.exe" "\"$INSTDIR\server\odoo-bin\""'
+ nsExec::ExecToLog '"$INSTDIR\nssm\win32\nssm.exe" set AppDirectory "$\"$INSTDIR\server$\""'
+
nsExec::Exec "net stop ${SERVICENAME}"
sleep 2
@@ -298,12 +306,11 @@ Section "Uninstall"
ReadRegStr $0 HKLM "${UNINSTALL_REGISTRY_KEY_SERVER}" "UninstallString"
ExecWait '"$0" /S'
- nsExec::Exec "net stop odoo-server-9.0"
- nsExec::Exec "sc delete odoo-server-9.0"
+ nsExec::Exec "net stop ${SERVICENAME}"
+ nsExec::Exec "sc delete ${SERVICENAME}"
sleep 2
Rmdir /r "$INSTDIR\server"
- Rmdir /r "$INSTDIR\service"
Rmdir /r "$INSTDIR\thirdparty"
DeleteRegKey HKLM "${UNINSTALL_REGISTRY_KEY}"
SectionEnd
diff --git a/setup/win32/win32_service.py b/setup/win32/win32_service.py
deleted file mode 100644
index 8eb32bbdbb6..00000000000
--- a/setup/win32/win32_service.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import servicemanager
-import win32api
-import win32process
-import win32service
-import win32serviceutil
-
-import subprocess
-import sys
-from os.path import dirname, join, split
-
-
-exec(open(join(dirname(__file__), '..', 'server', 'odoo', 'release.py'), 'rb').read())
-
-
-class OdooService(win32serviceutil.ServiceFramework):
- _svc_name_ = nt_service_name
- _svc_display_name_ = "%s %s" % (nt_service_name, serie)
-
- def __init__(self, args):
- win32serviceutil.ServiceFramework.__init__(self, args)
- self.odooprocess = None # Reference to the server's process
-
- def SvcStop(self):
- # Before we do anything, tell the SCM we are starting the stop process.
- self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
- # Stop the running Odoo: say it's a normal exit
- win32api.TerminateProcess(int(self.odooprocess._handle), 0)
- servicemanager.LogInfoMsg("Odoo stopped correctly")
-
- def SvcDoRun(self):
- # We start Odoo as an independent process, but we keep its handle
- service_dir = dirname(sys.argv[0])
- server_dir = split(service_dir)[0]
- server_path = join(server_dir, 'server', 'odoo-bin.exe')
- self.odooprocess = subprocess.Popen(
- [server_path], cwd=server_dir, creationflags=win32process.CREATE_NO_WINDOW
- )
- servicemanager.LogInfoMsg('Odoo up and running')
- # exit with same exit code as Odoo process
- sys.exit(self.odooprocess.wait())
-
-
-def option_handler(opts):
- # configure the service to auto restart on failures...
- subprocess.call([
- 'sc', 'failure', nt_service_name, 'reset=', '0', 'actions=', 'restart/0/restart/0/restart/0'
- ])
-
-
-if __name__ == '__main__':
- win32serviceutil.HandleCommandLine(OdooService, customOptionHandler=option_handler)
diff --git a/setup/win32/win32_setup.py b/setup/win32/win32_setup.py
deleted file mode 100644
index a61081760d0..00000000000
--- a/setup/win32/win32_setup.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-import glob
-import py2exe
-from distutils.core import setup
-
-
-exec(open(os.path.join(os.path.dirname(__file__), '..', '..', 'odoo', 'release.py'), 'rb').read())
-
-
-def generate_files():
- actions = {
- 'start': ['stop', 'start'],
- 'stop': ['stop'],
- }
-
- files = []
- if os.name == 'nt':
- files.append(("Microsoft.VC90.CRT", glob.glob('C:\Microsoft.VC90.CRT\*.*')))
- for action, steps in actions.items():
- fname = action + '.bat'
- files.append(fname)
- with open(fname, 'w') as fp:
- fp.write('@PATH=%WINDIR%\system32;%WINDIR%;%WINDIR%\System32\Wbem;.\n')
- for step in steps:
- fp.write('@net %s %s\n' % (step, nt_service_name))
- return files
-
-setup(
- service=["win32_service"],
- version=version,
- license=license,
- url=url,
- author=author,
- author_email=author_email,
- data_files=generate_files(),
- options={
- "py2exe": {
- "excludes": [
- 'Tkconstants',
- 'Tkinter',
- 'tcl',
- '_imagingtk',
- 'PIL._imagingtk',
- 'ImageTk',
- 'PIL.ImageTk',
- 'FixTk'
- ],
- "skip_archive": 1,
- "optimize": 2,
- }
- },
-)
diff --git a/setup/win32/winpy_requirements.txt b/setup/win32/winpy_requirements.txt
new file mode 100644
index 00000000000..70f696459ad
--- /dev/null
+++ b/setup/win32/winpy_requirements.txt
@@ -0,0 +1,41 @@
+Babel==2.3.4
+decorator==4.0.10
+docutils==0.12
+ebaysdk==2.1.4
+feedparser==5.2.1
+gevent>=1.1.2
+greenlet>=0.4.10
+html2text==2016.9.19
+Jinja2==2.8
+lxml>=3.5.0
+Mako==1.0.4
+MarkupSafe==0.23
+mock==2.0.0
+num2words==0.5.4
+ofxparse==0.16
+passlib==1.6.5
+Pillow>=3.4.1
+psutil>=4.3.1
+psycogreen==1.0
+psycopg2==2.7.1
+pydot==1.2.3
+pyldap>=2.4.28
+pyparsing==2.1.10
+PyPDF2==1.26.0
+pyserial==3.1.1
+python-dateutil==2.5.3
+python-openid==2.2.5
+pytz==2016.7
+pyusb==1.0.0
+PyYAML==3.12
+qrcode==5.3
+reportlab>=3.3.0
+requests==2.11.1
+six==1.10.0
+suds-jurko==0.6
+vatnumber==1.2
+vobject==0.9.3
+Werkzeug>=0.11.11
+XlsxWriter==0.9.3
+xlwt==1.3.*
+xlrd==1.0.0