X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=setup.py;h=894c7f7c11e8d54fecedaa2beed1b1951466a0a4;hb=27ae6f3522474b2093f4cb4a8a046d67cdb04ffa;hp=3f09be81e676e121cfe90cec8dc20138d9320b47;hpb=b7f884614ffcb134e37988a8ccdc56b75bbb1ebc;p=odoo%2Fodoo.git diff --git a/setup.py b/setup.py index 3f09be8..894c7f7 100755 --- a/setup.py +++ b/setup.py @@ -26,14 +26,15 @@ # adapted by Nicolas Évrard # -import imp import sys import os from os.path import join, isfile, basename import glob -from distutils.core import setup, Command -from distutils.command.install import install +from pprint import pprint as pp + +from setuptools import setup as official_setup, find_packages +from setuptools.command.install import install from distutils.sysconfig import get_python_lib has_py2exe = False @@ -51,66 +52,58 @@ if 'bdist_rpm' in sys.argv: # get python short version py_short_version = '%s.%s' % sys.version_info[:2] -required_modules = [ - ('lxml', 'lxml module: pythonic libxml2 and libxslt bindings'), - ('mako', 'Mako template engine'), - ('dateutil', "Extensions to the standard datetime module"), - ('psycopg2', 'PostgreSQL module'), - ('pychart', 'pychart module'), - ('pydot', 'pydot module'), - ('pytz', 'Timezone handling library for Python'), - ('reportlab', 'reportlab module'), - ('yaml', 'YAML parser and emitter for Python'), - ('DAV', 'PyWebDAV is a standards compliant WebDAV server and library written in Python'), -] - -def check_modules(): - errors = [] - for modname, desc in required_modules: - try: - imp.find_module(modname) - except ImportError: - errors.append( - 'Error: python module %s (%s) is required' % (modname, desc)) +# backports os.walk with followlinks from python 2.6 +def walk_followlinks(top, topdown=True, onerror=None, followlinks=False): + from os.path import join, isdir, islink + from os import listdir, error - if errors: - print '\n'.join(errors) - sys.exit(1) + try: + names = listdir(top) + except error, err: + if onerror is not None: + onerror(err) + return + + dirs, nondirs = [], [] + for name in names: + if isdir(join(top, name)): + dirs.append(name) + else: + nondirs.append(name) + + if topdown: + yield top, dirs, nondirs + for name in dirs: + path = join(top, name) + if followlinks or not islink(path): + for x in walk_followlinks(path, topdown, onerror, followlinks): + yield x + if not topdown: + yield top, dirs, nondirs + +if sys.version_info < (2, 6): + os.walk = walk_followlinks def find_addons(): - for root, _, names in os.walk(join('bin', 'addons')): + for root, _, names in os.walk(join('bin', 'addons'), followlinks=True): if '__openerp__.py' in names or '__terp__.py' in names: yield basename(root), root - #look for extra modules - try: - empath = os.getenv('EXTRA_MODULES_PATH', '../addons/') - for mname in open(join(empath, 'server_modules.list')): - mname = mname.strip() - if not mname: - continue - - terp = join(empath, mname, '__openerp__.py') - if not os.path.exists(terp): - terp = join(empath, mname, '__terp__.py') - - if os.path.exists(terp): - yield mname, join(empath, mname) - else: - print "Module %s specified, but no valid path." % mname - except: - pass def data_files(): '''Build list of data files to be installed''' files = [] if os.name == 'nt': - for root, _, names in os.walk(join('bin','addons')): - files.append((root, [join(root, name) for name in names])) + os.chdir('bin') + for (dp, dn, names) in os.walk('addons'): + files.append((dp, map(lambda x: join('bin', dp, x), names))) + os.chdir('..') + #for root, _, names in os.walk(join('bin','addons')): + # files.append((root, [join(root, name) for name in names])) for root, _, names in os.walk('doc'): files.append((root, [join(root, name) for name in names])) - files.append(('.', [join('bin', 'import_xml.rng'), - join('bin', 'server.pkey'), - join('bin', 'server.cert')])) + #for root, _, names in os.walk('pixmaps'): + # files.append((root, [join(root, name) for name in names])) + files.append(('.', [join('bin', 'import_xml.rng'),])) else: man_directory = join('share', 'man') files.append((join(man_directory, 'man1'), ['man/openerp-server.1'])) @@ -125,9 +118,7 @@ def data_files(): openerp_site_packages = join(get_python_lib(prefix=''), 'openerp-server') - files.append((openerp_site_packages, [join('bin', 'import_xml.rng'), - join('bin', 'server.pkey'), - join('bin', 'server.cert')])) + files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),])) if sys.version_info[0:2] == (2,5): files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'), @@ -145,9 +136,6 @@ def data_files(): return files -if not os.getenv('NO_CHECK_MODULES') : - check_modules() - f = file('openerp-server','w') f.write("""#!/bin/sh echo "Error: the content of this file should have been replaced during " @@ -173,6 +161,8 @@ class openerp_server_install(install): f.close() install.run(self) + + options = { "py2exe": { "compressed": 1, @@ -184,12 +174,16 @@ options = { "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing", "pydot", "asyncore","asynchat", "reportlab", "vobject", "HTMLParser", "select", "mako", "poplib", - "imaplib", "smtplib", "email", "yaml","pywebdav", + "imaplib", "smtplib", "email", "yaml", "DAV", ], "excludes" : ["Tkconstants","Tkinter","tcl"], } } +def setup(**kwargs): + #pp(kwargs) + return official_setup(**kwargs) + setup(name = name, version = version, description = description, @@ -201,62 +195,46 @@ setup(name = name, license = license, data_files = data_files(), cmdclass = { - 'install' : openerp_server_install, + 'install' : openerp_server_install, }, scripts = ['openerp-server'], - packages = ['openerp-server', - 'openerp-server.addons', - 'openerp-server.ir', - 'openerp-server.osv', - 'openerp-server.pychart', - 'openerp-server.pychart.afm', - 'openerp-server.report', - 'openerp-server.report.printscreen', - 'openerp-server.report.pyPdf', - 'openerp-server.report.render', - 'openerp-server.report.render.html2html', - 'openerp-server.report.render.makohtml2html', - 'openerp-server.report.render.odt2odt', - 'openerp-server.report.render.rml2html', - 'openerp-server.report.render.rml2pdf', - 'openerp-server.report.render.rml2txt', - 'openerp-server.service', - 'openerp-server.tools', - 'openerp-server.wizard', - 'openerp-server.workflow'] + \ - [('openerp-server.addons.' + name) - for name, _ in find_addons()], + packages = [ + '.'.join(['openerp-server'] + package.split('.')[1:]) + for package in find_packages() + ], + include_package_data = True, + package_data = { + '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'], + }, package_dir = find_package_dirs(), - console = [{"script": join("bin", "openerp-server.py"), - "icon_resources": [(1,join("pixmaps","openerp-icon.ico"))] - }], + console = [ + { + "script": join("bin", "openerp-server.py"), + "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))] + } + ], options = options, - ) - -if has_py2exe: - # Sometime between pytz-2008a and pytz-2008i common_timezones started to - # include only names of zones with a corresponding data file in zoneinfo. - # pytz installs the zoneinfo directory tree in the same directory - # as the pytz/__init__.py file. These data files are loaded using - # pkg_resources.resource_stream. py2exe does not copy this to library.zip so - # resource_stream can't find the files and common_timezones is empty when - # read in the py2exe executable. - # This manually copies zoneinfo into the zip. See also - # http://code.google.com/p/googletransitdatafeed/issues/detail?id=121 - import pytz - import zipfile - # Make sure the layout of pytz hasn't changed - assert (pytz.__file__.endswith('__init__.pyc') or - pytz.__file__.endswith('__init__.py')), pytz.__file__ - zoneinfo_dir = join(os.path.dirname(pytz.__file__), 'zoneinfo') - # '..\\Lib\\pytz\\__init__.py' -> '..\\Lib' - disk_basedir = os.path.dirname(os.path.dirname(pytz.__file__)) - zipfile_path = join(options['py2exe']['dist_dir'], 'library.zip') - z = zipfile.ZipFile(zipfile_path, 'a') - for absdir, directories, filenames in os.walk(zoneinfo_dir): - assert absdir.startswith(disk_basedir), (absdir, disk_basedir) - zip_dir = absdir[len(disk_basedir):] - for f in filenames: - z.write(join(absdir, f), join(zip_dir, f)) - z.close() + install_requires = [ + 'lxml', + 'mako', + 'python-dateutil', + 'psycopg2', + 'pychart', + 'pydot', + 'pytz', + 'reportlab', + 'caldav', + 'pyyaml', + #'django', + 'pywebdav' + #'cx_Oracle', + #'mysqldb', + 'feedparser', + #'bsddb3', + 'egenix-mx-base' + ], + extras_require={ + 'SSL' : ['pyopenssl'], + } +)