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, 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
91 #look for extra modules
93 empath = os.getenv('EXTRA_MODULES_PATH', '../addons/')
94 for mname in open(join(empath, 'server_modules.list')):
99 terp = join(empath, mname, '__openerp__.py')
100 if not os.path.exists(terp):
101 terp = join(empath, mname, '__terp__.py')
103 if os.path.exists(terp):
104 yield mname, join(empath, mname)
106 print "Module %s specified, but no valid path." % mname
111 '''Build list of data files to be installed'''
115 for (dp, dn, names) in os.walk('addons'):
116 files.append((dp, map(lambda x: join('bin', dp, x), names)))
118 #for root, _, names in os.walk(join('bin','addons')):
119 # files.append((root, [join(root, name) for name in names]))
120 for root, _, names in os.walk('doc'):
121 files.append((root, [join(root, name) for name in names]))
122 #for root, _, names in os.walk('pixmaps'):
123 # files.append((root, [join(root, name) for name in names]))
124 files.append(('.', [join('bin', 'import_xml.rng'),]))
126 man_directory = join('share', 'man')
127 files.append((join(man_directory, 'man1'), ['man/openerp-server.1']))
128 files.append((join(man_directory, 'man5'), ['man/openerp_serverrc.5']))
130 doc_directory = join('share', 'doc', 'openerp-server-%s' % version)
131 files.append((doc_directory, filter(isfile, glob.glob('doc/*'))))
132 files.append((join(doc_directory, 'migrate', '3.3.0-3.4.0'),
133 filter(isfile, glob.glob('doc/migrate/3.3.0-3.4.0/*'))))
134 files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'),
135 filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*'))))
137 openerp_site_packages = join(get_python_lib(prefix=''), 'openerp-server')
139 files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),]))
141 if sys.version_info[0:2] == (2,5):
142 files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'),
143 join('python25-compat','SimpleXMLRPCServer.py'),
144 join('python25-compat','SocketServer.py')]))
146 for addonname, add_path in find_addons():
147 addon_path = join(get_python_lib(prefix=''), 'openerp-server','addons', addonname)
148 for root, dirs, innerfiles in os.walk(add_path):
149 innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles)
151 res = os.path.normpath(join(addon_path, root.replace(join(add_path), '.')))
152 files.extend(((res, map(lambda fil: join(root, fil),
157 f = file('openerp-server','w')
159 echo "Error: the content of this file should have been replaced during "
160 echo "installation\n"
165 def find_package_dirs():
166 package_dirs = {'openerp-server': 'bin'}
167 for mod, path in find_addons():
168 package_dirs['openerp-server.addons.' + mod] = path
171 class openerp_server_install(install):
173 # create startup script
174 start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\
175 % (join(self.install_libbase, "openerp-server"), sys.executable)
177 f = open('openerp-server', 'w')
178 f.write(start_script)
190 "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
191 "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath",
192 "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing",
193 "pydot", "asyncore","asynchat", "reportlab", "vobject",
194 "HTMLParser", "select", "mako", "poplib",
195 "imaplib", "smtplib", "email", "yaml", "DAV",
198 "excludes" : ["Tkconstants","Tkinter","tcl"],
204 description = description,
205 long_description = long_desc,
208 author_email = author_email,
209 classifiers = filter(None, classifiers.split("\n")),
211 data_files = data_files(),
213 'install' : openerp_server_install,
215 scripts = ['openerp-server'],
217 '.'.join(['openerp-server'] + package.split('.')[1:])
218 for package in find_packages()
220 include_package_data = True,
222 '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'],
224 package_dir = find_package_dirs(),
227 "script": join("bin", "openerp-server.py"),
228 "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))]
247 'SSL' : ['pyopenssl'],