some more documentation updates and minor code cleanups. Additionally True and true...
[jinja2.git] / setup.py
index 69d32b22af33fab3b2dde2a6484ca3c0ee6af769..8cc724cf878789d57f4dced011f815fd83f7348d 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 """
-Jinja
-=====
+Jinja2
+~~~~~~
 
-Jinja is a `sandboxed`_ template engine written in pure Python. It provides a
-`Django`_ like non-XML syntax and compiles templates into executable python code.
-It's basically a combination of Django templates and python code.
+Jinja2 is a template engine written in pure Python.  It provides a
+`Django`_ inspired non-XML syntax but supports inline expressions and
+an optional `sandboxed`_ environment.
 
 Nutshell
 --------
@@ -17,7 +17,7 @@ Here a small example of a Jinja template::
     {% block content %}
       <ul>
       {% for user in users %}
-        <li><a href="{{ user.url|e }}">{{ user.username|e }}</a></li>
+        <li><a href="{{ user.url }}">{{ user.username }}</a></li>
       {% endfor %}
       </ul>
     {% endblock %}
@@ -25,31 +25,28 @@ Here a small example of a Jinja template::
 Philosophy
 ----------
 
-Application logic is for the controller but don't try to make the life for the
-template designer too hard by giving him too few functionality.
+Application logic is for the controller but don't try to make the life
+for the template designer too hard by giving him too few functionality.
 
-For more informations visit the new `jinja webpage`_ and `documentation`_.
+For more informations visit the new `jinja2 webpage`_ and `documentation`_.
 
-Note
-----
+The `Jinja2 tip`_ is installable via `easy_install` with ``easy_install
+Jinja2==dev``.
 
-This is the Jinja 1.0 release which is completely incompatible with the old
-"pre 1.0" branch. The old branch will still receive security updates and
-bugfixes but the 1.0 branch will be the only version that receives support.
-
-If you have an application that uses Jinja 0.9 and won't be updated in the
-near future the best idea is to ship a Jinja 0.9 checkout together with
-the application.
-
-.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_%28computer_security%29
+.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
 .. _Django: http://www.djangoproject.com/
-.. _jinja webpage: http://jinja.pocoo.org/
-.. _documentation: http://jinja.pocoo.org/documentation/index.html
+.. _jinja webpage: http://jinja2.pocoo.org/
+.. _documentation: http://jinja2.pocoo.org/documentation/index.html
+.. _Jinja tip: http://dev.pocoo.org/hg/jinja2-main/archive/tip.tar.gz#egg=Jinja2-dev
 """
 import os
+import sys
 import ez_setup
 ez_setup.use_setuptools()
-from setuptools import setup
+
+from setuptools import setup, Extension, Feature
+from distutils.command.build_ext import build_ext
+from distutils.errors import CCompilerError, DistutilsPlatformError
 
 
 def list_files(path):
@@ -61,21 +58,57 @@ def list_files(path):
             yield fn
 
 
+def get_terminal_width():
+    """Return the current terminal dimensions."""
+    try:
+        from struct import pack, unpack
+        from fcntl import ioctl
+        from termios import TIOCGWINSZ
+        s = pack('HHHH', 0, 0, 0, 0)
+        return unpack('HHHH', ioctl(sys.stdout.fileno(), TIOCGWINSZ, s))[1]
+    except:
+        return 80
+
+
+class optional_build_ext(build_ext):
+    """This class allows C extension building to fail."""
+
+    def run(self):
+        try:
+            build_ext.run(self)
+        except DistutilsPlatformError:
+            self._unavailable()
+
+    def build_extension(self, ext):
+        try:
+            build_ext.build_extension(self, ext)
+        except CCompilerError, x:
+            self._unavailable()
+
+    def _unavailable(self):
+        width = get_terminal_width()
+        print '*' * width
+        print """WARNING:
+An optional C extension could not be compiled, speedups will not be
+available."""
+        print '*' * width
+
+
 setup(
-    name = 'Jinja',
-    version = '1.0',
-    url = 'http://jinja.pocoo.org/',
-    license = 'BSD',
-    author = 'Armin Ronacher',
-    author_email = 'armin.ronacher@active-4.com',
-    description = 'A small but fast and easy to use stand-alone template '
-                  'engine written in pure python.',
-    long_description = __doc__,
+    name='Jinja2',
+    version='2.0dev',
+    url='http://jinja.pocoo.org/',
+    license='BSD',
+    author='Armin Ronacher',
+    author_email='armin.ronacher@active-4.com',
+    description='A small but fast and easy to use stand-alone template '
+                'engine written in pure python.',
+    long_description=__doc__,
     # jinja is egg safe. But because we distribute the documentation
     # in form of html and txt files it's a better idea to extract the files
-    zip_safe = False,
-    classifiers = [
-        'Development Status :: 5 - Production/Stable',
+    zip_safe=False,
+    classifiers=[
+        'Development Status :: 4 Beta',
         'Environment :: Web Environment',
         'Intended Audience :: Developers',
         'License :: OSI Approved :: BSD License',
@@ -85,12 +118,21 @@ setup(
         'Topic :: Software Development :: Libraries :: Python Modules',
         'Topic :: Text Processing :: Markup :: HTML'
     ],
-    keywords = ['python.templating.engines'],
-    packages = ['jinja', 'jinja.translators'],
-    data_files = [
-        ('docs', list_files('docs/build')),
-        ('docs/txt', list_files('docs/src'))
+    packages=['jinja2'],
+    data_files=[
+        ('docs', list(list_files('docs/_build/html')))
     ],
-    platforms = 'any',
-    extras_require = {'plugin': ['setuptools>=0.6a2']}
+    features={
+        'speedups': Feature("optional C speed-enhancements",
+            standard=True,
+            ext_modules=[
+                Extension('jinja2._speedups', ['jinja2/_speedups.c'])
+            ]
+        )
+    },
+    extras_require={'i18n': ['Babel>=0.8']},
+    entry_points="""
+    [babel.extractors]
+    jinja2 = jinja2.ext:babel_extract[i18n]
+    """
 )