[FIX] Add the HTMLParser
[odoo/odoo.git] / setup.py
1 #!/usr/bin/env python
2 # -*- encoding: utf-8 -*-
3 ##############################################################################
4 #
5 #    OpenERP, Open Source Management Solution   
6 #    Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
7 #    $Id$
8 #
9 #    This program is free software: you can redistribute it and/or modify
10 #    it under the terms of the GNU General Public License as published by
11 #    the Free Software Foundation, either version 3 of the License, or
12 #    (at your option) any later version.
13 #
14 #    This program is distributed in the hope that it will be useful,
15 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
16 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 #    GNU General Public License for more details.
18 #
19 #    You should have received a copy of the GNU General Public License
20 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
21 #
22 ##############################################################################
23
24 # setup from TinERP
25 #   taken from straw http://www.nongnu.org/straw/index.html
26 #   taken from gnomolicious http://www.nongnu.org/gnomolicious/
27 #   adapted by Nicolas Évrard <nicoe@altern.org>
28 #
29
30 import imp
31 import sys
32 import os
33 import glob
34
35 from stat import ST_MODE
36
37 from distutils.core import setup, Command
38 from distutils.command.install_scripts import install_scripts
39 from distutils.file_util import copy_file
40
41 if os.name == 'nt':
42     import py2exe
43
44 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), "bin"))
45
46 opj = os.path.join
47
48 execfile(opj('bin', 'release.py'))
49
50 # get python short version
51 py_short_version = '%s.%s' % sys.version_info[:2]
52
53 required_modules = [
54     ('psycopg', 'PostgreSQL module'),
55     ('xml', 'XML Tools for python'),
56     ('libxml2', 'libxml2 python bindings'),
57     ('libxslt', 'libxslt python bindings'),
58     ('reportlab', 'reportlab module'),
59     ('pychart', 'pychart module'),
60     ('pydot', 'pydot module'),
61 ]
62
63 def check_modules():
64     ok = True
65     for modname, desc in required_modules:
66         try:
67             exec('import %s' % modname)
68         except ImportError:
69             ok = False
70             print 'Error: python module %s (%s) is required' % (modname, desc)
71
72     if not ok:
73         sys.exit(1)
74
75 def find_addons():
76     for (dp, dn, names) in os.walk(opj('bin', 'addons')):
77         for dirpath, dirnames, filenames in os.walk(dp):
78             if '__init__.py' in filenames:
79                 modname = dirpath.replace(os.path.sep, '.')
80                 yield modname.replace('bin', 'openerp-server', 1)
81
82 def data_files():
83     '''Build list of data files to be installed'''
84     files = []
85     if os.name == 'nt':
86         os.chdir('bin')
87         for (dp,dn,names) in os.walk('addons'):
88             files.append((dp, map(lambda x: opj('bin', dp, x), names)))
89         for (dp,dn,names) in os.walk('i18n'):
90             files.append((dp, map(lambda x: opj('bin', dp, x), names)))
91         os.chdir('..')
92         for (dp,dn,names) in os.walk('doc'):
93             files.append((dp, map(lambda x: opj(dp, x), names)))
94         files.append(('.', [('bin/import_xml.rng')]))
95     else:
96         man_directory = opj('share', 'man')
97         files.append((opj(man_directory, 'man1'), ['man/openerp-server.1']))
98         files.append((opj(man_directory, 'man5'), ['man/openerp_serverrc.5']))
99
100         doc_directory = opj('share', 'doc', 'openerp-server-%s' % version)
101         files.append((doc_directory, [f for f in glob.glob('doc/*') if os.path.isfile(f)]))
102         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)]))
103         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)]))
104
105         openerp_site_packages = opj('lib', 'python%s' % py_short_version, 'site-packages', 'openerp-server')
106
107         files.append((opj(openerp_site_packages, 'i18n'), glob.glob('bin/i18n/*')))
108         files.append((opj(openerp_site_packages, 'addons', 'custom'),
109             glob.glob('bin/addons/custom/*xml') + glob.glob('bin/addons/custom/*rml') + glob.glob('bin/addons/custom/*xsl')))
110
111         files.append((openerp_site_packages, [('bin/import_xml.rng')]))
112
113         for addon in find_addons():
114             add_path = addon.replace('.', os.path.sep).replace('openerp-server', 'bin', 1)
115             addon_path = opj('lib', 'python%s' % py_short_version, 'site-packages', add_path.replace('bin', 'openerp-server', 1))
116
117             pathfiles = [
118                 (
119                     addon_path, 
120                     glob.glob(opj(add_path, '*xml')) + 
121                     glob.glob(opj(add_path, '*csv')) + 
122                     glob.glob(opj(add_path, '*sql'))
123                 ),
124                 (
125                     opj(addon_path, 'data'), 
126                     glob.glob(opj(add_path, 'data', '*xml'))
127                 ), 
128                 (
129                     opj(addon_path, 'report'),
130                     glob.glob(opj(add_path, 'report', '*xml')) +
131                     glob.glob(opj(add_path, 'report', '*rml')) +
132                     glob.glob(opj(add_path, 'report', '*sxw')) +
133                     glob.glob(opj(add_path, 'report', '*xsl'))
134                 ),
135                 (   
136                     opj(addon_path, 'security'),
137                     glob.glob(opj(add_path, 'security', '*csv')) +
138                     glob.glob(opj(add_path, 'security', '*xml'))
139                 ),
140                 (   
141                     opj(addon_path, 'rng'), 
142                     glob.glob(opj(add_path, 'rng', '*rng'))
143                 )
144             ]
145             files.extend(pathfiles)
146     return files
147
148 check_modules()
149
150 # create startup script
151 start_script = \
152 "#!/bin/sh\n\
153 cd %s/lib/python%s/site-packages/openerp-server\n\
154 exec %s ./openerp-server.py $@\n" % (sys.prefix, py_short_version, sys.executable)
155 # write script
156 f = open('openerp-server', 'w')
157 f.write(start_script)
158 f.close()
159
160 options = {
161     "py2exe": {
162         "compressed": 1,
163         "optimize": 2, 
164         "packages": ["lxml", "lxml.builder", "lxml._elementpath", "lxml.etree", 
165                      "lxml.objectify", "decimal", "xml", "xml.dom", "xml.xpath", 
166                      "encodings","mx.DateTime","wizard","pychart","PIL", "pyparsing", 
167                      "pydot","asyncore","asynchat", "reportlab", "vobject", "HTMLParser"],
168         "excludes" : ["Tkconstants","Tkinter","tcl"],
169     }
170 }
171
172 setup(name             = name,
173       version          = version,
174       description      = description,
175       long_description = long_desc,
176       url              = url,
177       author           = author,
178       author_email     = author_email,
179       classifiers      = filter(None, classifiers.split("\n")),
180       license          = license,
181       data_files       = data_files(),
182       scripts          = ['openerp-server'],
183       packages         = ['openerp-server', 
184                           'openerp-server.addons',
185                           'openerp-server.ir',
186                           'openerp-server.osv',
187                           'openerp-server.ssl',
188                           'openerp-server.service', 
189                           'openerp-server.tools',
190                           'openerp-server.report',
191                           'openerp-server.report.printscreen',
192                           'openerp-server.report.render',
193                           'openerp-server.report.render.rml2pdf',
194                           'openerp-server.report.render.rml2html',
195                           'openerp-server.wizard', 
196                           'openerp-server.workflow'] + \
197                          list(find_addons()),
198       package_dir      = {'openerp-server': 'bin'},
199       console = [ 
200           { "script" : "bin\\openerp-server.py", 
201             "icon_resources" : [
202                 (1,"pixmaps\\openerp-icon.ico")
203             ]
204           }
205       ],
206       options = options,
207       )
208
209
210 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
211