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 py2exe_keywords['console'] = [
46 { "script": join("bin", "openerp-server.py"),
47 "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))]
50 sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "bin"))
52 execfile(join('bin', 'release.py'))
54 if 'bdist_rpm' in sys.argv:
55 version = version.split('-')[0]
57 # get python short version
58 py_short_version = '%s.%s' % sys.version_info[:2]
60 # backports os.walk with followlinks from python 2.6
61 def walk_followlinks(top, topdown=True, onerror=None, followlinks=False):
62 from os.path import join, isdir, islink
63 from os import listdir, error
68 if onerror is not None:
72 dirs, nondirs = [], []
74 if isdir(join(top, name)):
80 yield top, dirs, nondirs
82 path = join(top, name)
83 if followlinks or not islink(path):
84 for x in walk_followlinks(path, topdown, onerror, followlinks):
87 yield top, dirs, nondirs
89 if sys.version_info < (2, 6):
90 os.walk = walk_followlinks
93 for root, _, names in os.walk(join('bin', 'addons'), followlinks=True):
94 if '__openerp__.py' in names or '__terp__.py' in names:
95 yield basename(root), root
96 #look for extra modules
98 empath = os.getenv('EXTRA_MODULES_PATH', '../addons/')
99 for mname in open(join(empath, 'server_modules.list')):
100 mname = mname.strip()
104 terp = join(empath, mname, '__openerp__.py')
105 if not os.path.exists(terp):
106 terp = join(empath, mname, '__terp__.py')
108 if os.path.exists(terp):
109 yield mname, join(empath, mname)
111 print "Module %s specified, but no valid path." % mname
116 '''Build list of data files to be installed'''
120 for (dp, dn, names) in os.walk('addons'):
121 files.append((dp, map(lambda x: join('bin', dp, x), names)))
123 #for root, _, names in os.walk(join('bin','addons')):
124 # files.append((root, [join(root, name) for name in names]))
125 for root, _, names in os.walk('doc'):
126 files.append((root, [join(root, name) for name in names]))
127 #for root, _, names in os.walk('pixmaps'):
128 # files.append((root, [join(root, name) for name in names]))
129 files.append(('.', [join('bin', 'import_xml.rng'),]))
131 man_directory = join('share', 'man')
132 files.append((join(man_directory, 'man1'), ['man/openerp-server.1']))
133 files.append((join(man_directory, 'man5'), ['man/openerp_serverrc.5']))
135 doc_directory = join('share', 'doc', 'openerp-server-%s' % version)
136 files.append((doc_directory, filter(isfile, glob.glob('doc/*'))))
137 files.append((join(doc_directory, 'migrate', '3.3.0-3.4.0'),
138 filter(isfile, glob.glob('doc/migrate/3.3.0-3.4.0/*'))))
139 files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'),
140 filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*'))))
142 openerp_site_packages = join(get_python_lib(prefix=''), 'openerp-server')
144 files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),]))
146 if sys.version_info[0:2] == (2,5):
147 files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'),
148 join('python25-compat','SimpleXMLRPCServer.py'),
149 join('python25-compat','SocketServer.py')]))
151 for addonname, add_path in find_addons():
152 addon_path = join(get_python_lib(prefix=''), 'openerp-server','addons', addonname)
153 for root, dirs, innerfiles in os.walk(add_path):
154 innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles)
156 res = os.path.normpath(join(addon_path, root.replace(join(add_path), '.')))
157 files.extend(((res, map(lambda fil: join(root, fil),
162 f = file('openerp-server','w')
164 echo "Error: the content of this file should have been replaced during "
165 echo "installation\n"
170 def find_package_dirs():
171 package_dirs = {'openerp-server': 'bin'}
172 for mod, path in find_addons():
173 package_dirs['openerp-server.addons.' + mod] = path
176 class openerp_server_install(install):
178 # create startup script
179 start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\
180 % (join(self.install_libbase, "openerp-server"), sys.executable)
182 f = open('openerp-server', 'w')
183 f.write(start_script)
195 "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree",
196 "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath",
197 "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing",
198 "pydot", "asyncore","asynchat", "reportlab", "vobject",
199 "HTMLParser", "select", "mako", "poplib",
200 "imaplib", "smtplib", "email", "yaml", "DAV",
203 "excludes" : ["Tkconstants","Tkinter","tcl"],
209 description = description,
210 long_description = long_desc,
213 author_email = author_email,
214 classifiers = filter(None, classifiers.split("\n")),
216 data_files = data_files(),
218 'install' : openerp_server_install,
220 scripts = ['openerp-server'],
222 '.'.join(['openerp-server'] + package.split('.')[1:])
223 for package in find_packages()
225 include_package_data = True,
227 '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'],
229 package_dir = find_package_dirs(),
246 'SSL' : ['pyopenssl'],