Statistics
| Branch: | Tag: | Revision:

root / setup.py @ 866bb9c1

History | View | Annotate | Download (6.9 kB)

1 866bb9c1 Christos Stavrakakis
# Copyright 2012 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
try:
46 866bb9c1 Christos Stavrakakis
    from devflow import versioning
47 10a9cf64 Vangelis Koukis
    # use devflow to update the version file
48 866bb9c1 Christos Stavrakakis
    versioning.update_version('devflow', 'version', HERE)
49 10a9cf64 Vangelis Koukis
except ImportError:
50 866bb9c1 Christos Stavrakakis
    version_fpath = os.path.join(HERE, 'devflow', 'version.py')
51 866bb9c1 Christos Stavrakakis
    sys.stdout.write("WARNING: Can not update version because `devflow` is"
52 866bb9c1 Christos Stavrakakis
                    " not installed. Please make sure to manually"
53 866bb9c1 Christos Stavrakakis
                    " update version file %s" % version_fpath)
54 10a9cf64 Vangelis Koukis
55 10a9cf64 Vangelis Koukis
from devflow.version import __version__
56 10a9cf64 Vangelis Koukis
57 10a9cf64 Vangelis Koukis
# Package info
58 10a9cf64 Vangelis Koukis
VERSION = __version__
59 10a9cf64 Vangelis Koukis
README = open(os.path.join(HERE, 'README')).read()
60 10a9cf64 Vangelis Koukis
CHANGES = open(os.path.join(HERE, 'Changelog')).read()
61 10a9cf64 Vangelis Koukis
SHORT_DESCRIPTION = 'A set of tools to ease versioning and use of git flow.'
62 10a9cf64 Vangelis Koukis
63 10a9cf64 Vangelis Koukis
PACKAGES_ROOT = '.'
64 10a9cf64 Vangelis Koukis
PACKAGES = find_packages(PACKAGES_ROOT)
65 10a9cf64 Vangelis Koukis
66 10a9cf64 Vangelis Koukis
# Package meta
67 10a9cf64 Vangelis Koukis
CLASSIFIERS = []
68 10a9cf64 Vangelis Koukis
69 10a9cf64 Vangelis Koukis
# Package requirements
70 10a9cf64 Vangelis Koukis
INSTALL_REQUIRES = [
71 866bb9c1 Christos Stavrakakis
    'gitpython'
72 10a9cf64 Vangelis Koukis
]
73 10a9cf64 Vangelis Koukis
74 10a9cf64 Vangelis Koukis
# Provided as an attribute, so you can append to these instead
75 10a9cf64 Vangelis Koukis
# of replicating them:
76 10a9cf64 Vangelis Koukis
standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
77 10a9cf64 Vangelis Koukis
standard_exclude_directories = [".*", "CVS", "_darcs", "./build", "./dist",
78 10a9cf64 Vangelis Koukis
                                "EGG-INFO", "*.egg-info"]
79 10a9cf64 Vangelis Koukis
80 10a9cf64 Vangelis Koukis
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
81 10a9cf64 Vangelis Koukis
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
82 10a9cf64 Vangelis Koukis
# Note: you may want to copy this into your setup.py file verbatim, as
83 10a9cf64 Vangelis Koukis
# you can't import this from another package, when you don't know if
84 10a9cf64 Vangelis Koukis
# that package is installed yet.
85 10a9cf64 Vangelis Koukis
def find_package_data(
86 10a9cf64 Vangelis Koukis
    where=".",
87 10a9cf64 Vangelis Koukis
    package="",
88 10a9cf64 Vangelis Koukis
    exclude=standard_exclude,
89 10a9cf64 Vangelis Koukis
    exclude_directories=standard_exclude_directories,
90 10a9cf64 Vangelis Koukis
    only_in_packages=True,
91 10a9cf64 Vangelis Koukis
    show_ignored=False):
92 10a9cf64 Vangelis Koukis
    """
93 10a9cf64 Vangelis Koukis
    Return a dictionary suitable for use in ``package_data``
94 10a9cf64 Vangelis Koukis
    in a distutils ``setup.py`` file.
95 10a9cf64 Vangelis Koukis

96 10a9cf64 Vangelis Koukis
    The dictionary looks like::
97 10a9cf64 Vangelis Koukis

98 10a9cf64 Vangelis Koukis
        {"package": [files]}
99 10a9cf64 Vangelis Koukis

100 10a9cf64 Vangelis Koukis
    Where ``files`` is a list of all the files in that package that
101 10a9cf64 Vangelis Koukis
    don"t match anything in ``exclude``.
102 10a9cf64 Vangelis Koukis

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

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

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

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