2 # -*- coding: utf-8 -*-
4 # taken from straw http://www.nongnu.org/straw/index.html
5 # taken from gnomolicious http://www.nongnu.org/gnomolicious/
6 # adapted by Nicolas Évrard <nicoe@altern.org>
15 from distutils.core import setup, Command
16 from distutils.command.install_scripts import install_scripts
17 from distutils.file_util import copy_file
19 from stat import ST_MODE
23 name = 'tinyerp-server'
26 # get python short version
27 py_short_version = '%s.%s' % sys.version_info[:2]
30 'account', 'account_followup', 'account_tax_include', 'airport', 'audittrail',
31 'base','base_partner_relation', 'base_setup', 'crm', 'custom', 'delivery',
32 'edi', 'esale_ez', 'esale_joomla', 'esale_osc',
33 'hr', 'hr_evaluation', 'hr_expense', 'hr_skill', 'hr_timesheet',
34 'hr_timesheet_ical', 'hr_timesheet_invoice', 'hr_timesheet_project',
35 'letter', 'marketing', 'mrp', 'network', 'partner_ldap',
36 'product','product_electronic', 'product_expiry', 'product_extended',
37 'productivity_analysis', 'product_variant', 'profile_accounting',
38 'profile_manufacturing', 'profile_service', 'project', 'purchase',
39 'purchase_tax_include', 'report_analytic_line', 'report_crm',
40 'report_project', 'report_purchase', 'report_sale', 'sale', 'sale_crm',
41 'sale_journal', 'sale_rebate', 'sale_tax_include', 'sandwich', 'scrum',
42 'stock', 'subscription', 'travel',
43 'l10n_be', 'l10n_ca-qc', 'l10n_ch', 'l10n_ch_pcpbl_association',
44 'l10n_ch_pcpbl_independant', 'l10n_ch_pcpbl_menage',
45 'l10n_ch_pcpbl_plangen', 'l10n_ch_pcpbl_plangensimpl', 'l10n_ch_vat_brut',
46 'l10n_ch_vat_forfait', 'l10n_ch_vat_net', 'l10n_fr', 'l10n_se',
47 'l10n_simple', 'l10n_chart_at', 'l10n_chart_au', 'l10n_chart_be_frnl',
48 'l10n_chart_br', 'l10n_chart_ca_en', 'l10n_chart_ca_fr',
49 'l10n_chart_ch_german', 'l10n_chart_cn', 'l10n_chart_cn_traditional',
50 'l10n_chart_co', 'l10n_chart_cz', 'l10n_chart_da', 'l10n_chart_de_skr03',
51 'l10n_chart_hu', 'l10n_chart_id', 'l10n_chart_it', 'l10n_chart_it_cc2424',
52 'l10n_chart_la', 'l10n_chart_nl', 'l10n_chart_nl_standard', 'l10n_chart_no',
53 'l10n_chart_pa', 'l10n_chart_pl', 'l10n_chart_sp', 'l10n_chart_sw',
54 'l10n_chart_sw_church', 'l10n_chart_sw_food', 'l10n_chart_uk',
55 'l10n_chart_us_general', 'l10n_chart_us_manufacturing',
56 'l10n_chart_us_service', 'l10n_chart_us_ucoa', 'l10n_chart_us_ucoa_ez',
59 required_modules = [('psycopg', 'PostgreSQL module'),
60 ('xml', 'XML Tools for python'),
61 ('libxml2', 'libxml2 python bindings'),
62 ('libxslt', 'libxslt python bindings')]
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 addon in included_addons:
78 path = opj('bin', 'addons', addon)
79 for dirpath, dirnames, filenames in os.walk(path):
80 if '__init__.py' in filenames:
81 modname = dirpath.replace(os.path.sep, '.')
82 yield modname.replace('bin', 'tinyerp-server', 1)
85 '''Build list of data files to be installed'''
86 files = [(opj('share', 'man', 'man1'),
87 ['man/tinyerp-server.1']),
88 (opj('share', 'man', 'man5'),
89 ['man/terp_serverrc.5']),
90 (opj('share','doc', 'tinyerp-server-%s' % version),
91 [f for f in glob.glob('doc/*') if os.path.isfile(f)]),
92 (opj('lib','python%s' % py_short_version, 'site-packagess', 'tinyerp-server', 'i18n'),
93 glob.glob('bin/i18n/*')),
94 (opj('lib', 'python%s' % py_short_version, 'site-packages', 'tinyerp-server', 'addons', 'custom'),
95 glob.glob('bin/addons/custom/*xml') +
96 glob.glob('bin/addons/custom/*rml') +
97 glob.glob('bin/addons/custom/*xsl'))]
98 for addon in find_addons():
99 add_path = addon.replace('.', os.path.sep).replace('tinyerp-server', 'bin',
101 pathfiles = [(opj('lib', 'python%s' % py_short_version, 'site-packages',
102 add_path.replace('bin', 'tinyerp-server', 1)),
103 glob.glob(opj(add_path, '*xml')) +
104 glob.glob(opj(add_path, '*csv')) +
105 glob.glob(opj(add_path, '*sql'))),
106 (opj('lib', 'python%s' % py_short_version, 'site-packages',
107 add_path.replace('bin', 'tinyerp-server', 1), 'data'),
108 glob.glob(opj(add_path, 'data', '*xml'))),
109 (opj('lib', 'python%s' % py_short_version, 'site-packages',
110 add_path.replace('bin', 'tinyerp-server', 1), 'report'),
111 glob.glob(opj(add_path, 'report', '*xml')) +
112 glob.glob(opj(add_path, 'report', '*rml')) +
113 glob.glob(opj(add_path, 'report', '*xsl')))]
114 files.extend(pathfiles)
118 Tiny ERP is a complete ERP and CRM. The main features are accounting (analytic
119 and financial), stock management, sales and purchases management, tasks
120 automation, marketing campaigns, help desk, POS, etc. Technical features include
121 a distributed server, flexible workflows, an object database, a dynamic GUI,
122 customizable reports, and SOAP and XML-RPC interfaces.
126 Development Status :: 5 - Production/Stable
127 License :: OSI Approved :: GNU General Public License (GPL)
128 Programming Language :: Python
133 # create startup script
136 cd %s/lib/python%s/site-packages/tinyerp-server\n\
137 exec %s ./tinyerp-server.py $@" % (sys.prefix, py_short_version, sys.executable)
139 f = open('tinyerp-server', 'w')
140 f.write(start_script)
145 description = "Tiny's Enterprise Resource Planning",
146 long_description = long_desc,
147 url = 'http://tinyerp.com',
149 author_email = 'info@tiny.be',
150 classifiers = filter(None, classifiers.split("\n")),
152 data_files = data_files(),
153 packages = ['tinyerp-server', 'tinyerp-server.addons',
155 'tinyerp-server.osv',
156 'tinyerp-server.ssl',
157 'tinyerp-server.service', 'tinyerp-server.tools',
158 'tinyerp-server.pychart', 'tinyerp-server.pychart.afm',
159 'tinyerp-server.report',
160 'tinyerp-server.report.printscreen',
161 'tinyerp-server.report.render',
162 'tinyerp-server.report.render.rml2pdf',
163 'tinyerp-server.report.render.rml2html',
164 'tinyerp-server.wizard', 'tinyerp-server.workflow'] + \
166 package_dir = {'tinyerp-server': 'bin'},
167 scripts = ['tinyerp-server']
170 # vim:expandtab:tw=80