#!/usr/bin/env python
# -*- encoding: utf8 -*-
__revision__ = "$Id$"
import sys
import re
import os
import ConfigParser

from distutils.core import setup

# to be removed for stable releases
TRUNK_VERSION = True

# the reStructuredText contained in
# README.txt will be displayed at PyPI
README_FILE = open('README.txt')
try:
    description = README_FILE.read()
finally:
    README_FILE.close()


# taken from setuptools
def get_svn_revision():
    """Will get the svn revision out of .svn"""
    revision = 0
    urlre = re.compile('url="([^"]+)"')
    revre = re.compile('committed-rev="(\d+)"')

    for base, dirs, files in os.walk(os.curdir):
        if '.svn' not in dirs:
            dirs[:] = []
            continue
        dirs.remove('.svn')
        f = open(os.path.join(base, '.svn', 'entries'))
        data = f.read()
        f.close()

        if data.startswith('9') or data.startswith('8'):
            data = map(str.splitlines,data.split('\n\x0c\n'))
            del data[0][0]  # get rid of the '8' or '9'
            dirurl = data[0][3]
            localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]+[0])
        elif data.startswith('<?xml'):
            dirurl = urlre.search(data).group(1)    # get repository URL
            localrev = max([int(m.group(1)) for m in revre.finditer(data)]+[0])
            dirs[:] = []
            continue
        if base == os.curdir:
            base_url = dirurl + '/'   # save the root url
        elif not dirurl.startswith(base_url):
            dirs[:] = []
            continue    # not part of the same svn tree, skip it
        revision = max(revision, localrev)

    return str(revision)

SETUP_CFG = os.path.join(os.path.dirname(__file__), 'setup.cfg')

def store_svn_revision():
    setup_cfg = ConfigParser.ConfigParser()
    setup_cfg.read([SETUP_CFG])
    if not setup_cfg.has_section('egg_info'):
        setup_cfg.add_section('egg_info')
    setup_cfg.set('egg_info', 'tag-build', get_svn_revision())
    setup_cfg.write(open(SETUP_CFG, 'w'))

def get_stored_svn_revision():
    setup_cfg = ConfigParser.ConfigParser()
    setup_cfg.read([SETUP_CFG])
    return setup_cfg.get('egg_info', 'tag-build')

# when launching with sdist, we want to compute the version using
# the svn info, then store it in setup.cfg otherwise we use the one stored
# in setup.cfg
if 'sdist' in sys.argv:
    store_svn_revision()

if TRUNK_VERSION:
    # for dev releases, the version is computed
    # with the svn tag
    version = '%sdev-r%s' % (sys.version.split()[0],
                             get_stored_svn_revision())
else:
    version = sys.version.split()[0]

# finding the right site-packages depending on the platform
if sys.platform in ('os2emx', 'riscos'):
    site_package = os.path.join("Lib", "site-packages")
elif os.sep == '/':
    site_package = os.path.join("lib", "python" + sys.version[:3],
                                "site-packages")
else:
    site_package = os.path.join(prefix, "lib", "site-packages")

setup (name="Distutils",
       version=version,
       description="Python Distribution Utilities",
       author="Greg Ward",
       author_email="gward@python.net",
       maintainer="Tarek Ziadé",
       maintainer_email="tarek@ziade.org",
       url="http://www.python.org/sigs/distutils-sig",
       license="Python",
       long_description=description,
       packages=['distutils.distutils', 'distutils.distutils.command'],
       data_files=[(site_package, ['distutils.pth'])]
       )

