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'),
107 join('bin', 'server.pkey'),
108 join('bin', 'server.cert')]))
110 man_directory = join('share', 'man')
111 files.append((join(man_directory, 'man1'), ['man/openerp-server.1']))
112 files.append((join(man_directory, 'man5'), ['man/openerp_serverrc.5']))
114 doc_directory = join('share', 'doc', 'openerp-server-%s' % version)
115 files.append((doc_directory, filter(isfile, glob.glob('doc/*'))))
116 files.append((join(doc_directory, 'migrate', '3.3.0-3.4.0'),
117 filter(isfile, glob.glob('doc/migrate/3.3.0-3.4.0/*'))))
118 files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'),
119 filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*'))))
121 openerp_site_packages = join(get_python_lib(prefix=''), 'openerp-server')
123 files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),
124 join('bin', 'server.pkey'),
125 join('bin', 'server.cert')]))
127 if sys.version_info[0:2] == (2,5):
128 files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'),
129 join('python25-compat','SimpleXMLRPCServer.py'),
130 join('python25-compat','SocketServer.py')]))
132 for addonname, add_path in find_addons():
133 addon_path = join(get_python_lib(prefix=''), 'openerp-server','addons', addonname)
134 for root, dirs, innerfiles in os.walk(add_path):
135 innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles)
137 res = os.path.normpath(join(addon_path, root.replace(join(add_path), '.')))
138 files.extend(((res, map(lambda fil: join(root, fil),
143 f = file('openerp-server','w')
145 echo "Error: the content of this file should have been replaced during "
146 echo "installation\n"
151 def find_package_dirs():
152 package_dirs = {'openerp-server': 'bin'}
153 for mod, path in find_addons():
154 package_dirs['openerp-server.addons.' + mod] = path
157 class openerp_server_install(install):
159 # create startup script
160 start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\
161 % (join(self.install_libbase, "openerp-server"), sys.executable)
163 f = open('openerp-server', 'w')
164 f.write(start_script)
176 "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
177 "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath",
178 "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing",
179 "pydot", "asyncore","asynchat", "reportlab", "vobject",
180 "HTMLParser", "select", "mako", "poplib",
181 "imaplib", "smtplib", "email", "yaml", "DAV",
183 "excludes" : ["Tkconstants","Tkinter","tcl"],
189 return official_setup(**kwargs)
193 description = description,
194 long_description = long_desc,
197 author_email = author_email,
198 classifiers = filter(None, classifiers.split("\n")),
200 data_files = data_files(),
202 'install' : openerp_server_install,
204 scripts = ['openerp-server'],
206 '.'.join(['openerp-server'] + package.split('.')[1:])
207 for package in find_packages()
209 include_package_data = True,
211 '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'],
213 package_dir = find_package_dirs(),
216 "script": join("bin", "openerp-server.py"),
217 "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))]
241 'SSL' : ['pyopenssl'],