2 # -*- coding: utf-8 -*-
3 ##############################################################################
5 # OpenERP, Open Source Management Solution
6 # Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU Affero General Public License as
10 # published by the Free Software Foundation, either version 3 of the
11 # License, or (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU Affero General Public License for more details.
18 # You should have received a copy of the GNU Affero General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 ##############################################################################
24 # taken from straw http://www.nongnu.org/straw/index.html
25 # taken from gnomolicious http://www.nongnu.org/gnomolicious/
26 # adapted by Nicolas Évrard <nicoe@altern.org>
31 from os.path import join, isfile, basename
34 from pprint import pprint as pp
36 from setuptools import setup as official_setup, find_packages
37 from setuptools.command.install import install
38 from distutils.sysconfig import get_python_lib
45 sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "bin"))
47 execfile(join('bin', 'release.py'))
49 if 'bdist_rpm' in sys.argv:
50 version = version.split('-')[0]
52 # get python short version
53 py_short_version = '%s.%s' % sys.version_info[:2]
55 # backports os.walk with followlinks from python 2.6
56 def walk_followlinks(top, topdown=True, onerror=None, followlinks=False):
57 from os.path import join, isdir, islink
58 from os import listdir, error
63 if onerror is not None:
67 dirs, nondirs = [], []
69 if isdir(join(top, name)):
75 yield top, dirs, nondirs
77 path = join(top, name)
78 if followlinks or not islink(path):
79 for x in walk_followlinks(path, topdown, onerror, followlinks):
82 yield top, dirs, nondirs
84 if sys.version_info < (2, 6):
85 os.walk = walk_followlinks
88 for root, _, names in os.walk(join('bin', 'addons'), followlinks=True):
89 if '__openerp__.py' in names or '__terp__.py' in names:
90 yield basename(root), root
93 '''Build list of data files to be installed'''
97 for (dp, dn, names) in os.walk('addons'):
98 files.append((dp, map(lambda x: join('bin', dp, x), names)))
100 #for root, _, names in os.walk(join('bin','addons')):
101 # files.append((root, [join(root, name) for name in names]))
102 for root, _, names in os.walk('doc'):
103 files.append((root, [join(root, name) for name in names]))
104 #for root, _, names in os.walk('pixmaps'):
105 # files.append((root, [join(root, name) for name in names]))
106 files.append(('.', [join('bin', 'import_xml.rng'),]))
108 man_directory = join('share', 'man')
109 files.append((join(man_directory, 'man1'), ['man/openerp-server.1']))
110 files.append((join(man_directory, 'man5'), ['man/openerp_serverrc.5']))
112 doc_directory = join('share', 'doc', 'openerp-server-%s' % version)
113 files.append((doc_directory, filter(isfile, glob.glob('doc/*'))))
114 files.append((join(doc_directory, 'migrate', '3.3.0-3.4.0'),
115 filter(isfile, glob.glob('doc/migrate/3.3.0-3.4.0/*'))))
116 files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'),
117 filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*'))))
119 openerp_site_packages = join(get_python_lib(prefix=''), 'openerp-server')
121 files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),]))
123 if sys.version_info[0:2] == (2,5):
124 files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'),
125 join('python25-compat','SimpleXMLRPCServer.py'),
126 join('python25-compat','SocketServer.py')]))
128 for addonname, add_path in find_addons():
129 addon_path = join(get_python_lib(prefix=''), 'openerp-server','addons', addonname)
130 for root, dirs, innerfiles in os.walk(add_path):
131 innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles)
133 res = os.path.normpath(join(addon_path, root.replace(join(add_path), '.')))
134 files.extend(((res, map(lambda fil: join(root, fil),
139 f = file('openerp-server','w')
141 echo "Error: the content of this file should have been replaced during "
142 echo "installation\n"
147 def find_package_dirs():
148 package_dirs = {'openerp-server': 'bin'}
149 for mod, path in find_addons():
150 package_dirs['openerp-server.addons.' + mod] = path
153 class openerp_server_install(install):
155 # create startup script
156 start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\
157 % (join(self.install_libbase, "openerp-server"), sys.executable)
159 f = open('openerp-server', 'w')
160 f.write(start_script)
172 "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
173 "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath",
174 "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing",
175 "pydot", "asyncore","asynchat", "reportlab", "vobject",
176 "HTMLParser", "select", "mako", "poplib",
177 "imaplib", "smtplib", "email", "yaml", "DAV",
179 "excludes" : ["Tkconstants","Tkinter","tcl"],
185 return official_setup(**kwargs)
189 description = description,
190 long_description = long_desc,
193 author_email = author_email,
194 classifiers = filter(None, classifiers.split("\n")),
196 data_files = data_files(),
198 'install' : openerp_server_install,
200 scripts = ['openerp-server'],
202 '.'.join(['openerp-server'] + package.split('.')[1:])
203 for package in find_packages()
205 include_package_data = True,
207 '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'],
209 package_dir = find_package_dirs(),
212 "script": join("bin", "openerp-server.py"),
213 "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))]
237 'SSL' : ['pyopenssl'],