Statistics
| Branch: | Tag: | Revision:

root / setup.py @ 18a2af6d

History | View | Annotate | Download (6.8 kB)

1 8df4ab84 Vangelis Koukis
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2 10a9cf64 Vangelis Koukis
#
3 10a9cf64 Vangelis Koukis
# Redistribution and use in source and binary forms, with or
4 10a9cf64 Vangelis Koukis
# without modification, are permitted provided that the following
5 10a9cf64 Vangelis Koukis
# conditions are met:
6 10a9cf64 Vangelis Koukis
#
7 10a9cf64 Vangelis Koukis
#   1. Redistributions of source code must retain the above
8 10a9cf64 Vangelis Koukis
#      copyright notice, this list of conditions and the following
9 10a9cf64 Vangelis Koukis
#      disclaimer.
10 10a9cf64 Vangelis Koukis
#
11 10a9cf64 Vangelis Koukis
#   2. Redistributions in binary form must reproduce the above
12 10a9cf64 Vangelis Koukis
#      copyright notice, this list of conditions and the following
13 10a9cf64 Vangelis Koukis
#      disclaimer in the documentation and/or other materials
14 10a9cf64 Vangelis Koukis
#      provided with the distribution.
15 10a9cf64 Vangelis Koukis
#
16 10a9cf64 Vangelis Koukis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 10a9cf64 Vangelis Koukis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 10a9cf64 Vangelis Koukis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 10a9cf64 Vangelis Koukis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 10a9cf64 Vangelis Koukis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 10a9cf64 Vangelis Koukis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 10a9cf64 Vangelis Koukis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 10a9cf64 Vangelis Koukis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 10a9cf64 Vangelis Koukis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 10a9cf64 Vangelis Koukis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 10a9cf64 Vangelis Koukis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 10a9cf64 Vangelis Koukis
# POSSIBILITY OF SUCH DAMAGE.
28 10a9cf64 Vangelis Koukis
#
29 10a9cf64 Vangelis Koukis
# The views and conclusions contained in the software and
30 10a9cf64 Vangelis Koukis
# documentation are those of the authors and should not be
31 10a9cf64 Vangelis Koukis
# interpreted as representing official policies, either expressed
32 10a9cf64 Vangelis Koukis
# or implied, of GRNET S.A.
33 10a9cf64 Vangelis Koukis
#
34 10a9cf64 Vangelis Koukis
import distribute_setup
35 10a9cf64 Vangelis Koukis
distribute_setup.use_setuptools()
36 10a9cf64 Vangelis Koukis
37 10a9cf64 Vangelis Koukis
import os
38 10a9cf64 Vangelis Koukis
import sys
39 10a9cf64 Vangelis Koukis
40 10a9cf64 Vangelis Koukis
from distutils.util import convert_path
41 10a9cf64 Vangelis Koukis
from fnmatch import fnmatchcase
42 10a9cf64 Vangelis Koukis
from setuptools import setup, find_packages
43 10a9cf64 Vangelis Koukis
44 10a9cf64 Vangelis Koukis
HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
45 10a9cf64 Vangelis Koukis
46 62d65f99 Christos Stavrakakis
try:
47 62d65f99 Christos Stavrakakis
    from devflow.version import __version__
48 62d65f99 Christos Stavrakakis
except ImportError:
49 62d65f99 Christos Stavrakakis
    # Bootstrap devflow
50 62d65f99 Christos Stavrakakis
    from devflow.versioning import update_version
51 62d65f99 Christos Stavrakakis
    update_version()
52 62d65f99 Christos Stavrakakis
    from devflow.version import __version__
53 10a9cf64 Vangelis Koukis
54 10a9cf64 Vangelis Koukis
# Package info
55 10a9cf64 Vangelis Koukis
VERSION = __version__
56 10a9cf64 Vangelis Koukis
README = open(os.path.join(HERE, 'README')).read()
57 10a9cf64 Vangelis Koukis
CHANGES = open(os.path.join(HERE, 'Changelog')).read()
58 10a9cf64 Vangelis Koukis
SHORT_DESCRIPTION = 'A set of tools to ease versioning and use of git flow.'
59 10a9cf64 Vangelis Koukis
60 10a9cf64 Vangelis Koukis
PACKAGES_ROOT = '.'
61 10a9cf64 Vangelis Koukis
PACKAGES = find_packages(PACKAGES_ROOT)
62 10a9cf64 Vangelis Koukis
63 10a9cf64 Vangelis Koukis
# Package meta
64 10a9cf64 Vangelis Koukis
CLASSIFIERS = []
65 10a9cf64 Vangelis Koukis
66 10a9cf64 Vangelis Koukis
# Package requirements
67 10a9cf64 Vangelis Koukis
INSTALL_REQUIRES = [
68 6bbef9ab Chris Stavrakakis
    'gitpython', 'sh', 'configobj', 'ansicolors'
69 10a9cf64 Vangelis Koukis
]
70 10a9cf64 Vangelis Koukis
71 10a9cf64 Vangelis Koukis
# Provided as an attribute, so you can append to these instead
72 10a9cf64 Vangelis Koukis
# of replicating them:
73 10a9cf64 Vangelis Koukis
standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
74 10a9cf64 Vangelis Koukis
standard_exclude_directories = [".*", "CVS", "_darcs", "./build", "./dist",
75 10a9cf64 Vangelis Koukis
                                "EGG-INFO", "*.egg-info"]
76 10a9cf64 Vangelis Koukis
77 10a9cf64 Vangelis Koukis
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
78 10a9cf64 Vangelis Koukis
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
79 10a9cf64 Vangelis Koukis
# Note: you may want to copy this into your setup.py file verbatim, as
80 10a9cf64 Vangelis Koukis
# you can't import this from another package, when you don't know if
81 10a9cf64 Vangelis Koukis
# that package is installed yet.
82 10a9cf64 Vangelis Koukis
def find_package_data(
83 10a9cf64 Vangelis Koukis
    where=".",
84 10a9cf64 Vangelis Koukis
    package="",
85 10a9cf64 Vangelis Koukis
    exclude=standard_exclude,
86 10a9cf64 Vangelis Koukis
    exclude_directories=standard_exclude_directories,
87 10a9cf64 Vangelis Koukis
    only_in_packages=True,
88 10a9cf64 Vangelis Koukis
    show_ignored=False):
89 10a9cf64 Vangelis Koukis
    """
90 10a9cf64 Vangelis Koukis
    Return a dictionary suitable for use in ``package_data``
91 10a9cf64 Vangelis Koukis
    in a distutils ``setup.py`` file.
92 10a9cf64 Vangelis Koukis

93 10a9cf64 Vangelis Koukis
    The dictionary looks like::
94 10a9cf64 Vangelis Koukis

95 10a9cf64 Vangelis Koukis
        {"package": [files]}
96 10a9cf64 Vangelis Koukis

97 10a9cf64 Vangelis Koukis
    Where ``files`` is a list of all the files in that package that
98 10a9cf64 Vangelis Koukis
    don"t match anything in ``exclude``.
99 10a9cf64 Vangelis Koukis

100 10a9cf64 Vangelis Koukis
    If ``only_in_packages`` is true, then top-level directories that
101 10a9cf64 Vangelis Koukis
    are not packages won"t be included (but directories under packages
102 10a9cf64 Vangelis Koukis
    will).
103 10a9cf64 Vangelis Koukis

104 10a9cf64 Vangelis Koukis
    Directories matching any pattern in ``exclude_directories`` will
105 10a9cf64 Vangelis Koukis
    be ignored; by default directories with leading ``.``, ``CVS``,
106 10a9cf64 Vangelis Koukis
    and ``_darcs`` will be ignored.
107 10a9cf64 Vangelis Koukis

108 10a9cf64 Vangelis Koukis
    If ``show_ignored`` is true, then all the files that aren"t
109 10a9cf64 Vangelis Koukis
    included in package data are shown on stderr (for debugging
110 10a9cf64 Vangelis Koukis
    purposes).
111 10a9cf64 Vangelis Koukis

112 10a9cf64 Vangelis Koukis
    Note patterns use wildcards, or can be exact paths (including
113 10a9cf64 Vangelis Koukis
    leading ``./``), and all searching is case-insensitive.
114 10a9cf64 Vangelis Koukis
    """
115 10a9cf64 Vangelis Koukis
    out = {}
116 10a9cf64 Vangelis Koukis
    stack = [(convert_path(where), "", package, only_in_packages)]
117 10a9cf64 Vangelis Koukis
    while stack:
118 10a9cf64 Vangelis Koukis
        where, prefix, package, only_in_packages = stack.pop(0)
119 10a9cf64 Vangelis Koukis
        for name in os.listdir(where):
120 10a9cf64 Vangelis Koukis
            fn = os.path.join(where, name)
121 10a9cf64 Vangelis Koukis
            if os.path.isdir(fn):
122 10a9cf64 Vangelis Koukis
                bad_name = False
123 10a9cf64 Vangelis Koukis
                for pattern in exclude_directories:
124 10a9cf64 Vangelis Koukis
                    if (fnmatchcase(name, pattern)
125 10a9cf64 Vangelis Koukis
                        or fn.lower() == pattern.lower()):
126 10a9cf64 Vangelis Koukis
                        bad_name = True
127 10a9cf64 Vangelis Koukis
                        if show_ignored:
128 10a9cf64 Vangelis Koukis
                            print >> sys.stderr, (
129 10a9cf64 Vangelis Koukis
                                "Directory %s ignored by pattern %s"
130 10a9cf64 Vangelis Koukis
                                % (fn, pattern))
131 10a9cf64 Vangelis Koukis
                        break
132 10a9cf64 Vangelis Koukis
                if bad_name:
133 10a9cf64 Vangelis Koukis
                    continue
134 10a9cf64 Vangelis Koukis
                if (os.path.isfile(os.path.join(fn, "__init__.py"))
135 10a9cf64 Vangelis Koukis
                    and not prefix):
136 10a9cf64 Vangelis Koukis
                    if not package:
137 10a9cf64 Vangelis Koukis
                        new_package = name
138 10a9cf64 Vangelis Koukis
                    else:
139 10a9cf64 Vangelis Koukis
                        new_package = package + "." + name
140 10a9cf64 Vangelis Koukis
                    stack.append((fn, "", new_package, False))
141 10a9cf64 Vangelis Koukis
                else:
142 866bb9c1 Christos Stavrakakis
                    stack.append((fn, prefix + name + "/", package,
143 866bb9c1 Christos Stavrakakis
                                  only_in_packages))
144 10a9cf64 Vangelis Koukis
            elif package or not only_in_packages:
145 10a9cf64 Vangelis Koukis
                # is a file
146 10a9cf64 Vangelis Koukis
                bad_name = False
147 10a9cf64 Vangelis Koukis
                for pattern in exclude:
148 10a9cf64 Vangelis Koukis
                    if (fnmatchcase(name, pattern)
149 10a9cf64 Vangelis Koukis
                        or fn.lower() == pattern.lower()):
150 10a9cf64 Vangelis Koukis
                        bad_name = True
151 10a9cf64 Vangelis Koukis
                        if show_ignored:
152 10a9cf64 Vangelis Koukis
                            print >> sys.stderr, (
153 10a9cf64 Vangelis Koukis
                                "File %s ignored by pattern %s"
154 10a9cf64 Vangelis Koukis
                                % (fn, pattern))
155 10a9cf64 Vangelis Koukis
                        break
156 10a9cf64 Vangelis Koukis
                if bad_name:
157 10a9cf64 Vangelis Koukis
                    continue
158 866bb9c1 Christos Stavrakakis
                out.setdefault(package, []).append(prefix + name)
159 10a9cf64 Vangelis Koukis
    return out
160 10a9cf64 Vangelis Koukis
161 10a9cf64 Vangelis Koukis
setup(
162 866bb9c1 Christos Stavrakakis
    name='devflow',
163 866bb9c1 Christos Stavrakakis
    version=VERSION,
164 866bb9c1 Christos Stavrakakis
    license='BSD',
165 f6f0c700 Christos Stavrakakis
    url='http://www.synnefo.org/',
166 866bb9c1 Christos Stavrakakis
    description=SHORT_DESCRIPTION,
167 866bb9c1 Christos Stavrakakis
    long_description=README + '\n\n' + CHANGES,
168 866bb9c1 Christos Stavrakakis
    classifiers=CLASSIFIERS,
169 866bb9c1 Christos Stavrakakis
170 6b918aa6 Christos Stavrakakis
    author='Synnefo development team',
171 6b918aa6 Christos Stavrakakis
    author_email='synnefo-devel@googlegroups.com',
172 6b918aa6 Christos Stavrakakis
    maintainer='Synnefo development team',
173 6b918aa6 Christos Stavrakakis
    maintainer_email='synnefo-devel@googlegroups.com',
174 866bb9c1 Christos Stavrakakis
175 866bb9c1 Christos Stavrakakis
    packages=PACKAGES,
176 866bb9c1 Christos Stavrakakis
    package_dir={'': PACKAGES_ROOT},
177 866bb9c1 Christos Stavrakakis
    include_package_data=True,
178 866bb9c1 Christos Stavrakakis
    package_data=find_package_data('.'),
179 866bb9c1 Christos Stavrakakis
    zip_safe=False,
180 866bb9c1 Christos Stavrakakis
181 866bb9c1 Christos Stavrakakis
    install_requires=INSTALL_REQUIRES,
182 866bb9c1 Christos Stavrakakis
183 866bb9c1 Christos Stavrakakis
    entry_points={
184 10a9cf64 Vangelis Koukis
     'console_scripts': [
185 866bb9c1 Christos Stavrakakis
         'devflow-version=devflow.versioning:main',
186 7c1589db Christos Stavrakakis
         'devflow-bump-version=devflow.versioning:bump_version_main',
187 bec4bf12 Christos Stavrakakis
         'devflow-update-version=devflow.versioning:update_version',
188 866bb9c1 Christos Stavrakakis
         'devflow-autopkg=devflow.autopkg:main',
189 10a9cf64 Vangelis Koukis
         ],
190 10a9cf64 Vangelis Koukis
      },
191 10a9cf64 Vangelis Koukis
)