[IMP] Account: Add extended groups to menus
[odoo/odoo.git] / setup.py
index 28f2e0a..2e004e7 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -1,9 +1,9 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 ##############################################################################
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 ##############################################################################
-#    
+#
 #    OpenERP, Open Source Management Solution
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -16,7 +16,7 @@
 #    GNU Affero General Public License for more details.
 #
 #    You should have received a copy of the GNU Affero General Public License
 #    GNU Affero General Public License for more details.
 #
 #    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
 
 #
 ##############################################################################
 
@@ -29,6 +29,7 @@
 import imp
 import sys
 import os
 import imp
 import sys
 import os
+from os.path import join, isfile, basename
 import glob
 
 from distutils.core import setup, Command
 import glob
 
 from distutils.core import setup, Command
@@ -39,11 +40,9 @@ if os.name == 'nt':
     import py2exe
     has_py2exe = True
 
     import py2exe
     has_py2exe = True
 
-sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), "bin"))
-
-opj = os.path.join
+sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "bin"))
 
 
-execfile(opj('bin', 'release.py'))
+execfile(join('bin', 'release.py'))
 
 if sys.argv[1] == 'bdist_rpm':
     version = version.split('-')[0]
 
 if sys.argv[1] == 'bdist_rpm':
     version = version.split('-')[0]
@@ -53,12 +52,14 @@ py_short_version = '%s.%s' % sys.version_info[:2]
 
 required_modules = [
     ('lxml', 'lxml module: pythonic libxml2 and libxslt bindings'),
 
 required_modules = [
     ('lxml', 'lxml module: pythonic libxml2 and libxslt bindings'),
-    ('mx', "egenix's mx library for its extended DateTime module"),
+    ('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'),
     ('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'),
 ]
 
 def check_modules():
 ]
 
 def check_modules():
@@ -74,103 +75,96 @@ def check_modules():
         print '\n'.join(errors)
         sys.exit(1)
 
         print '\n'.join(errors)
         sys.exit(1)
 
-def _find_addons():
-    for (dp, dn, names) in os.walk(opj('bin', 'addons')):
-        if '__terp__.py' in names:
-            modname = os.path.basename(dp)
-            yield (modname, dp)
+def find_addons():
+    for root, _, names in os.walk(join('bin', 'addons')):
+        if '__openerp__.py' in names or '__terp__.py' in names:
+            yield basename(root), root
     #look for extra modules
     try:
     #look for extra modules
     try:
-        empath = os.getenv('EXTRA_MODULES_PATH','../addons/')
-        f = open(opj(empath,'server_modules.list'),'r')
-        # print 'Getting modules from:' , opj(empath,'server_modules.list')
-        mods = f.readlines()
-        for mname in mods:
+        empath = os.getenv('EXTRA_MODULES_PATH', '../addons/')
+        for mname in open(join(empath, 'server_modules.list')):
             mname = mname.strip()
             if not mname:
                 continue
             mname = mname.strip()
             if not mname:
                 continue
-            if os.path.exists(opj(empath,mname,'__terp__.py')):
-                yield ( mname, opj(empath,mname) )
+
+            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
 
             else:
                 print "Module %s specified, but no valid path." % mname
     except:
         pass
 
-__found_addons = None
-
-# Cache the results of _find_addons() and return them
-def find_addons(found_addons = None):
-    if not found_addons:
-        found_addons = _find_addons()
-    return found_addons
-
 def data_files():
     '''Build list of data files to be installed'''
     files = []
     if os.name == 'nt':
 def data_files():
     '''Build list of data files to be installed'''
     files = []
     if os.name == 'nt':
-        os.chdir('bin')
-        for (dp,dn,names) in os.walk('addons'):
-            files.append((dp, map(lambda x: opj('bin', dp, x), names)))
-        os.chdir('..')
-        for (dp,dn,names) in os.walk('doc'):
-            files.append((dp, map(lambda x: opj(dp, x), names)))
-        files.append(('.', [opj('bin', 'import_xml.rng'),
-                            opj('bin', 'server.pkey'),
-                            opj('bin', 'server.cert')]))
+        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')]))
     else:
     else:
-        man_directory = opj('share', 'man')
-        files.append((opj(man_directory, 'man1'), ['man/openerp-server.1']))
-        files.append((opj(man_directory, 'man5'), ['man/openerp_serverrc.5']))
+        man_directory = join('share', 'man')
+        files.append((join(man_directory, 'man1'), ['man/openerp-server.1']))
+        files.append((join(man_directory, 'man5'), ['man/openerp_serverrc.5']))
 
 
-        doc_directory = opj('share', 'doc', 'openerp-server-%s' % version)
-        files.append((doc_directory, [f for f in glob.glob('doc/*') if os.path.isfile(f)]))
-        files.append((opj(doc_directory, 'migrate', '3.3.0-3.4.0'), [f for f in glob.glob('doc/migrate/3.3.0-3.4.0/*') if os.path.isfile(f)]))
-        files.append((opj(doc_directory, 'migrate', '3.4.0-4.0.0'), [f for f in glob.glob('doc/migrate/3.4.0-4.0.0/*') if os.path.isfile(f)]))
+        doc_directory = join('share', 'doc', 'openerp-server-%s' % version)
+        files.append((doc_directory, filter(isfile, glob.glob('doc/*'))))
+        files.append((join(doc_directory, 'migrate', '3.3.0-3.4.0'),
+                      filter(isfile, glob.glob('doc/migrate/3.3.0-3.4.0/*'))))
+        files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'),
+                      filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*'))))
 
 
-        openerp_site_packages = opj('lib', 'python%s' % py_short_version, 'site-packages', 'openerp-server')
+        openerp_site_packages = join('lib', 'python%s' % py_short_version, 'site-packages', 'openerp-server')
 
 
-        files.append((openerp_site_packages, [opj('bin', 'import_xml.rng'),
-                                              opj('bin', 'server.pkey'),
-                                              opj('bin', 'server.cert')]))
+        files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),
+                                              join('bin', 'server.pkey'),
+                                              join('bin', 'server.cert')]))
 
         if sys.version_info[0:2] == (2,5):
 
         if sys.version_info[0:2] == (2,5):
-            files.append((openerp_site_packages, [ opj('python25-compat','BaseHTTPServer.py'),
-                                                   opj('python25-compat','SimpleXMLRPCServer.py'),
-                                                   opj('python25-compat','SocketServer.py')]))
+            files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'),
+                                                   join('python25-compat','SimpleXMLRPCServer.py'),
+                                                   join('python25-compat','SocketServer.py')]))
 
 
-        for (addonname, add_path) in find_addons():
-            addon_path = opj('lib', 'python%s' % py_short_version, 'site-packages', 'openerp-server','addons', addonname)
-            pathfiles = []
+        for addonname, add_path in find_addons():
+            addon_path = join('lib', 'python%s' % py_short_version, 'site-packages', 'openerp-server','addons', addonname)
             for root, dirs, innerfiles in os.walk(add_path):
                 innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles)
                 if innerfiles:
             for root, dirs, innerfiles in os.walk(add_path):
                 innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles)
                 if innerfiles:
-                    res = os.path.normpath(opj(addon_path, root.replace(opj(add_path), '.')))
-                    pathfiles.extend(((res, map(lambda fil: opj(root, fil), innerfiles)),))
-            files.extend(pathfiles)
+                    res = os.path.normpath(join(addon_path, root.replace(join(add_path), '.')))
+                    files.extend(((res, map(lambda fil: join(root, fil),
+                                            innerfiles)),))
 
 
-    # for tup in files:
-    #    print "Files:", tup[0], tup[1]
     return files
 
     return files
 
-if not os.getenv('NO_CHECK_MODULES',False) :
+if not os.getenv('NO_CHECK_MODULES') :
     check_modules()
 
 f = file('openerp-server','w')
     check_modules()
 
 f = file('openerp-server','w')
-start_script = """#!/bin/sh\necho "OpenERP Setup - The content of this file is generated at the install stage\n" """
-f.write(start_script)
+f.write("""#!/bin/sh
+echo "Error: the content of this file should have been replaced during "
+echo "installation\n"
+exit 1
+""")
 f.close()
 
 def find_package_dirs():
 f.close()
 
 def find_package_dirs():
-    res = {}
-    for (mod, path) in find_addons():
-        res ['openerp-server.addons.'+ mod ] = path
-    res ['openerp-server'] = 'bin'
-    return res
+    package_dirs = {'openerp-server': 'bin'}
+    for mod, path in find_addons():
+        package_dirs['openerp-server.addons.' + mod] = path
+    return package_dirs
 
 class openerp_server_install(install):
     def run(self):
         # create startup script
 
 class openerp_server_install(install):
     def run(self):
         # create startup script
-        start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n" % (opj(self.install_libbase, "openerp-server"), sys.executable)
+        start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\
+            % (join(self.install_libbase, "openerp-server"), sys.executable)
         # write script
         f = open('openerp-server', 'w')
         f.write(start_script)
         # write script
         f = open('openerp-server', 'w')
         f.write(start_script)
@@ -183,10 +177,10 @@ options = {
         "optimize": 2,
         "dist_dir": 'dist',
         "packages": ["lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
         "optimize": 2,
         "dist_dir": 'dist',
         "packages": ["lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
-                     "lxml.objectify", "decimal", "xml", "xml.dom", "xml.xpath",
-                     "encodings","mx.DateTime","wizard","pychart","PIL", "pyparsing",
-                     "pydot","asyncore","asynchat", "reportlab", "vobject",
-                     "HTMLParser", "select"],
+                     "lxml.objectify", "decimal", "xml", "encodings",
+                     "dateutil", "wizard", "pychart", "PIL", "pyparsing",
+                     "pydot", "asyncore","asynchat", "reportlab", "vobject",
+                     "HTMLParser", "select", "yaml"],
         "excludes" : ["Tkconstants","Tkinter","tcl"],
     }
 }
         "excludes" : ["Tkconstants","Tkinter","tcl"],
     }
 }
@@ -208,9 +202,9 @@ setup(name             = name,
       packages         = ['openerp-server',
                           'openerp-server.addons',
                           'openerp-server.ir',
       packages         = ['openerp-server',
                           'openerp-server.addons',
                           'openerp-server.ir',
-                          'openerp-server.mako',
                           'openerp-server.osv',
                           'openerp-server.pychart',
                           'openerp-server.osv',
                           'openerp-server.pychart',
+                          'openerp-server.pychart.afm',
                           'openerp-server.report',
                           'openerp-server.report.printscreen',
                           'openerp-server.report.pyPdf',
                           'openerp-server.report',
                           'openerp-server.report.printscreen',
                           'openerp-server.report.pyPdf',
@@ -225,9 +219,12 @@ setup(name             = name,
                           'openerp-server.tools',
                           'openerp-server.wizard',
                           'openerp-server.workflow'] + \
                           'openerp-server.tools',
                           'openerp-server.wizard',
                           'openerp-server.workflow'] + \
-                          list(map( lambda (a, p): 'openerp-server.addons.'+ a ,find_addons())),
+                          [('openerp-server.addons.' + name)
+                           for name, _ in find_addons()],
       package_dir      = find_package_dirs(),
       package_dir      = find_package_dirs(),
-      console = [ { "script" : "bin\\openerp-server.py", "icon_resources" : [ (1,"pixmaps\\openerp-icon.ico") ] } ],
+      console = [{"script": join("bin", "openerp-server.py"),
+                  "icon_resources": [(1,join("pixmaps","openerp-icon.ico"))]
+                  }],
       options = options,
       )
 
       options = options,
       )
 
@@ -246,15 +243,15 @@ if has_py2exe:
   # Make sure the layout of pytz hasn't changed
   assert (pytz.__file__.endswith('__init__.pyc') or
           pytz.__file__.endswith('__init__.py')), pytz.__file__
   # 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 = os.path.join(os.path.dirname(pytz.__file__), 'zoneinfo')
+  zoneinfo_dir = join(os.path.dirname(pytz.__file__), 'zoneinfo')
   # '..\\Lib\\pytz\\__init__.py' -> '..\\Lib'
   disk_basedir = os.path.dirname(os.path.dirname(pytz.__file__))
   # '..\\Lib\\pytz\\__init__.py' -> '..\\Lib'
   disk_basedir = os.path.dirname(os.path.dirname(pytz.__file__))
-  zipfile_path = os.path.join(options['py2exe']['dist_dir'], 'library.zip')
+  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 = 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(os.path.join(absdir, f), os.path.join(zip_dir, f))
+      z.write(join(absdir, f), join(zip_dir, f))
   z.close()
 
   z.close()