Automated merge with ssh://team@pocoo.org/jinja-main
[jinja2.git] / setup.py
1 # -*- coding: utf-8 -*-
2 """
3 jinja
4 ~~~~~
5
6 Jinja is a `sandboxed`_ template engine written in pure Python. It
7 provides a `Django`_ like non-XML syntax and compiles templates into
8 executable python code. It's basically a combination of Django templates
9 and python code.
10
11 Nutshell
12 --------
13
14 Here a small example of a Jinja template::
15
16     {% extends 'base.html' %}
17     {% block title %}Memberlist{% endblock %}
18     {% block content %}
19       <ul>
20       {% for user in users %}
21         <li><a href="{{ user.url|e }}">{{ user.username|e }}</a></li>
22       {% endfor %}
23       </ul>
24     {% endblock %}
25
26 Philosophy
27 ----------
28
29 Application logic is for the controller but don't try to make the life
30 for the template designer too hard by giving him too few functionality.
31
32 For more informations visit the new `jinja webpage`_ and `documentation`_.
33
34 Note
35 ----
36
37 This is the Jinja 1.0 release which is completely incompatible with the
38 old "pre 1.0" branch. The old branch will still receive security updates
39 and bugfixes but the 1.0 branch will be the only version that receives
40 support.
41
42 If you have an application that uses Jinja 0.9 and won't be updated in
43 the near future the best idea is to ship a Jinja 0.9 checkout together
44 with the application.
45
46 The `Jinja tip`_ is installable via `easy_install` with ``easy_install
47 Jinja==dev``.
48
49 .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
50 .. _Django: http://www.djangoproject.com/
51 .. _jinja webpage: http://jinja.pocoo.org/
52 .. _documentation: http://jinja.pocoo.org/documentation/index.html
53 .. _Jinja tip: http://dev.pocoo.org/hg/jinja-main/archive/tip.tar.gz#egg=Jinja-dev
54 """
55 import os
56 import sys
57 import ez_setup
58 ez_setup.use_setuptools()
59
60 from distutils.command.build_ext import build_ext
61 from distutils.errors import CCompilerError, DistutilsError
62 from setuptools import setup, Extension, Feature
63
64
65 def list_files(path):
66     for fn in os.listdir(path):
67         if fn.startswith('.'):
68             continue
69         fn = os.path.join(path, fn)
70         if os.path.isfile(fn):
71             yield fn
72
73
74 class optional_build_ext(build_ext):
75
76     def run(self):
77         try:
78             build_ext.run(self)
79         except DistutilsError, e:
80             self.compiler = None
81             self._setup_error = e
82
83     def build_extension(self, ext):
84         try:
85             if self.compiler is None:
86                 raise self._setup_error
87             build_ext.build_extension(self, ext)
88         except CCompilerError, e:
89             print '=' * 79
90             print 'INFORMATION'
91             print '  the speedup extension could not be compiled, Jinja will'
92             print '  fall back to the native python classes.'
93             print '=' * 79
94         except:
95             e = sys.exc_info()[1]
96             print '=' * 79
97             print 'WARNING'
98             print '  could not compile optional speedup extension. This is'
99             print '  is not a real problem because Jinja provides a native'
100             print '  implementation of those classes but for best performance'
101             print '  you could try to reinstall Jinja after fixing this'
102             print '  problem: %s' % e
103             print '=' * 79
104
105
106 setup(
107     name='Jinja',
108     version='1.3',
109     url='http://jinja.pocoo.org/',
110     license='BSD',
111     author='Armin Ronacher',
112     author_email='armin.ronacher@active-4.com',
113     description='A small but fast and easy to use stand-alone template '
114                 'engine written in pure python.',
115     long_description = __doc__,
116     # jinja is egg safe. But because we distribute the documentation
117     # in form of html and txt files it's a better idea to extract the files
118     zip_safe=False,
119     classifiers=[
120         'Development Status :: 5 - Production/Stable',
121         'Environment :: Web Environment',
122         'Intended Audience :: Developers',
123         'License :: OSI Approved :: BSD License',
124         'Operating System :: OS Independent',
125         'Programming Language :: Python',
126         'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
127         'Topic :: Software Development :: Libraries :: Python Modules',
128         'Topic :: Text Processing :: Markup :: HTML'
129     ],
130     keywords=['python.templating.engines'],
131     packages=['jinja', 'jinja.translators', 'jinja.contrib'],
132     data_files=[
133         ('docs/html', list(list_files('docs/html'))),
134         ('docs/txt', list(list_files('docs/src')))
135     ],
136     entry_points='''
137     [python.templating.engines]
138     jinja = jinja.plugin:BuffetPlugin
139     ''',
140     extras_require={'plugin': ['setuptools>=0.6a2']},
141     features={
142         'speedups': Feature(
143             'optional C-speed enhancements',
144             standard=True,
145             ext_modules=[
146                 Extension('jinja._speedups', ['jinja/_speedups.c'])
147             ]
148         ),
149         'extended-debugger': Feature(
150             'extended debugger',
151             standard=True,
152             ext_modules=[
153                 Extension('jinja._debugger', ['jinja/_debugger.c'])
154             ]
155         )
156     },
157     cmdclass={'build_ext': optional_build_ext}
158 )