2 # -*- encoding: utf-8 -*-
3 ##############################################################################
5 # OpenERP, Open Source Management Solution
6 # Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
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.
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.
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/>.
22 ##############################################################################
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>
35 from stat import ST_MODE
37 from distutils.core import setup, Command
38 from distutils.command.install import install
39 #from distutils.command.install_scripts import install_scripts
40 from distutils.file_util import copy_file
45 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), "bin"))
49 execfile(opj('bin', 'release.py'))
51 # get python short version
52 py_short_version = '%s.%s' % sys.version_info[:2]
55 ('psycopg', 'PostgreSQL module'),
56 ('xml', 'XML Tools for python'),
57 ('libxml2', 'libxml2 python bindings'),
58 ('libxslt', 'libxslt python bindings'),
59 ('reportlab', 'reportlab module'),
60 ('pychart', 'pychart module'),
61 ('pydot', 'pydot module'),
66 for modname, desc in required_modules:
68 exec('import %s' % modname)
71 print 'Error: python module %s (%s) is required' % (modname, desc)
77 for (dp, dn, names) in os.walk(opj('bin', 'addons')):
78 for dirpath, dirnames, filenames in os.walk(dp):
79 if '__init__.py' in filenames:
80 modname = dirpath.replace(os.path.sep, '.')
81 yield modname.replace('bin', 'openerp-server', 1)
84 '''Build list of data files to be installed'''
88 for (dp,dn,names) in os.walk('addons'):
89 files.append((dp, map(lambda x: opj('bin', dp, x), names)))
90 for (dp,dn,names) in os.walk('i18n'):
91 files.append((dp, map(lambda x: opj('bin', dp, x), names)))
93 for (dp,dn,names) in os.walk('doc'):
94 files.append((dp, map(lambda x: opj(dp, x), names)))
95 files.append(('.', [('bin/import_xml.rng')]))
97 man_directory = opj('share', 'man')
98 files.append((opj(man_directory, 'man1'), ['man/openerp-server.1']))
99 files.append((opj(man_directory, 'man5'), ['man/openerp_serverrc.5']))
101 doc_directory = opj('share', 'doc', 'openerp-server-%s' % version)
102 files.append((doc_directory, [f for f in glob.glob('doc/*') if os.path.isfile(f)]))
103 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)]))
104 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)]))
106 openerp_site_packages = opj('lib', 'python%s' % py_short_version, 'site-packages', 'openerp-server')
108 files.append((opj(openerp_site_packages, 'i18n'), glob.glob('bin/i18n/*')))
109 files.append((opj(openerp_site_packages, 'addons', 'custom'),
110 glob.glob('bin/addons/custom/*xml') + glob.glob('bin/addons/custom/*rml') + glob.glob('bin/addons/custom/*xsl')))
112 files.append((openerp_site_packages, [('bin/import_xml.rng')]))
114 for addon in find_addons():
115 add_path = addon.replace('.', os.path.sep).replace('openerp-server', 'bin', 1)
116 addon_path = opj('lib', 'python%s' % py_short_version, 'site-packages', add_path.replace('bin', 'openerp-server', 1))
121 glob.glob(opj(add_path, '*xml')) +
122 glob.glob(opj(add_path, '*csv')) +
123 glob.glob(opj(add_path, '*sql'))
126 opj(addon_path, 'data'),
127 glob.glob(opj(add_path, 'data', '*xml'))
130 opj(addon_path, 'report'),
131 glob.glob(opj(add_path, 'report', '*xml')) +
132 glob.glob(opj(add_path, 'report', '*rml')) +
133 glob.glob(opj(add_path, 'report', '*sxw')) +
134 glob.glob(opj(add_path, 'report', '*xsl'))
137 opj(addon_path, 'security'),
138 glob.glob(opj(add_path, 'security', '*csv')) +
139 glob.glob(opj(add_path, 'security', '*xml'))
142 opj(addon_path, 'rng'),
143 glob.glob(opj(add_path, 'rng', '*rng'))
146 files.extend(pathfiles)
152 class openerp_server_install(install):
154 # create startup script
155 start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n" % (opj(self.install_libbase, "openerp-server"), sys.executable)
157 f = open('openerp-server', 'w')
158 f.write(start_script)
167 "packages": ["lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
168 "lxml.objectify", "decimal", "xml", "xml.dom", "xml.xpath",
169 "encodings","mx.DateTime","wizard","pychart","PIL", "pyparsing",
170 "pydot","asyncore","asynchat", "reportlab", "vobject", "HTMLParser"],
171 "excludes" : ["Tkconstants","Tkinter","tcl"],
177 description = description,
178 long_description = long_desc,
181 author_email = author_email,
182 classifiers = filter(None, classifiers.split("\n")),
184 data_files = data_files(),
185 cmdclass = { 'install' : openerp_server_install },
186 scripts = ['openerp-server'],
187 packages = ['openerp-server',
188 'openerp-server.addons',
190 'openerp-server.osv',
191 'openerp-server.ssl',
192 'openerp-server.service',
193 'openerp-server.tools',
194 'openerp-server.report',
195 'openerp-server.report.printscreen',
196 'openerp-server.report.render',
197 'openerp-server.report.render.rml2pdf',
198 'openerp-server.report.render.rml2html',
199 'openerp-server.wizard',
200 'openerp-server.workflow'] + \
202 package_dir = {'openerp-server': 'bin'},
204 { "script" : "bin\\openerp-server.py",
206 (1,"pixmaps\\openerp-icon.ico")
214 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: