mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
256 lines
9.4 KiB
Python
256 lines
9.4 KiB
Python
#!/usr/bin/env python
|
|
"""Distutils setup file, used to install or test 'setuptools'"""
|
|
import sys
|
|
import os
|
|
import textwrap
|
|
import re
|
|
|
|
# Allow to run setup.py from another directory.
|
|
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
src_root = None
|
|
if sys.version_info >= (3,):
|
|
tmp_src = os.path.join("build", "src")
|
|
from distutils.filelist import FileList
|
|
from distutils import dir_util, file_util, util, log
|
|
log.set_verbosity(1)
|
|
fl = FileList()
|
|
manifest_file = open("MANIFEST.in")
|
|
for line in manifest_file:
|
|
fl.process_template_line(line)
|
|
manifest_file.close()
|
|
dir_util.create_tree(tmp_src, fl.files)
|
|
outfiles_2to3 = []
|
|
dist_script = os.path.join("build", "src", "distribute_setup.py")
|
|
for f in fl.files:
|
|
outf, copied = file_util.copy_file(f, os.path.join(tmp_src, f), update=1)
|
|
if copied and outf.endswith(".py") and outf != dist_script:
|
|
outfiles_2to3.append(outf)
|
|
if copied and outf.endswith('api_tests.txt'):
|
|
# XXX support this in distutils as well
|
|
from lib2to3.main import main
|
|
main('lib2to3.fixes', ['-wd', os.path.join(tmp_src, 'tests', 'api_tests.txt')])
|
|
|
|
util.run_2to3(outfiles_2to3)
|
|
|
|
# arrange setup to use the copy
|
|
sys.path.insert(0, os.path.abspath(tmp_src))
|
|
src_root = tmp_src
|
|
|
|
from distutils.util import convert_path
|
|
|
|
d = {}
|
|
init_path = convert_path('setuptools/command/__init__.py')
|
|
init_file = open(init_path)
|
|
exec(init_file.read(), d)
|
|
init_file.close()
|
|
|
|
SETUP_COMMANDS = d['__all__']
|
|
VERSION = "0.6.32"
|
|
|
|
from setuptools import setup, find_packages
|
|
from setuptools.command.build_py import build_py as _build_py
|
|
from setuptools.command.test import test as _test
|
|
|
|
scripts = []
|
|
|
|
console_scripts = ["easy_install = setuptools.command.easy_install:main"]
|
|
if os.environ.get("DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT") is None:
|
|
console_scripts.append("easy_install-%s = setuptools.command.easy_install:main" % sys.version[:3])
|
|
|
|
# specific command that is used to generate windows .exe files
|
|
class build_py(_build_py):
|
|
def build_package_data(self):
|
|
"""Copy data files into build directory"""
|
|
lastdir = None
|
|
for package, src_dir, build_dir, filenames in self.data_files:
|
|
for filename in filenames:
|
|
target = os.path.join(build_dir, filename)
|
|
self.mkpath(os.path.dirname(target))
|
|
srcfile = os.path.join(src_dir, filename)
|
|
outf, copied = self.copy_file(srcfile, target)
|
|
srcfile = os.path.abspath(srcfile)
|
|
|
|
# avoid a bootstrapping issue with easy_install -U (when the
|
|
# previous version doesn't have convert_2to3_doctests)
|
|
if not hasattr(self.distribution, 'convert_2to3_doctests'):
|
|
continue
|
|
|
|
if copied and srcfile in self.distribution.convert_2to3_doctests:
|
|
self.__doctests_2to3.append(outf)
|
|
|
|
class test(_test):
|
|
"""Specific test class to avoid rewriting the entry_points.txt"""
|
|
def run(self):
|
|
entry_points = os.path.join('distribute.egg-info', 'entry_points.txt')
|
|
|
|
if not os.path.exists(entry_points):
|
|
try:
|
|
_test.run(self)
|
|
finally:
|
|
return
|
|
|
|
f = open(entry_points)
|
|
|
|
# running the test
|
|
try:
|
|
ep_content = f.read()
|
|
finally:
|
|
f.close()
|
|
|
|
try:
|
|
_test.run(self)
|
|
finally:
|
|
# restoring the file
|
|
f = open(entry_points, 'w')
|
|
try:
|
|
f.write(ep_content)
|
|
finally:
|
|
f.close()
|
|
|
|
|
|
# if we are installing Distribute using "python setup.py install"
|
|
# we need to get setuptools out of the way
|
|
def _easy_install_marker():
|
|
return (len(sys.argv) == 5 and sys.argv[2] == 'bdist_egg' and
|
|
sys.argv[3] == '--dist-dir' and 'egg-dist-tmp-' in sys.argv[-1])
|
|
|
|
def _buildout_marker():
|
|
command = os.environ.get('_')
|
|
if command:
|
|
return 'buildout' in os.path.basename(command)
|
|
|
|
def _being_installed():
|
|
if os.environ.get('DONT_PATCH_SETUPTOOLS') is not None:
|
|
return False
|
|
if _buildout_marker():
|
|
# Installed by buildout, don't mess with a global setuptools.
|
|
return False
|
|
# easy_install marker
|
|
if "--help" in sys.argv[1:] or "-h" in sys.argv[1:]: # Don't bother doing anything if they're just asking for help
|
|
return False
|
|
return 'install' in sys.argv[1:] or _easy_install_marker()
|
|
|
|
if _being_installed():
|
|
from distribute_setup import _before_install
|
|
_before_install()
|
|
|
|
# return contents of reStructureText file with linked issue references
|
|
def _linkified(rst_path):
|
|
bitroot = 'http://bitbucket.org/tarek/distribute'
|
|
revision = re.compile(r'\b(issue\s*#?\d+)\b', re.M | re.I)
|
|
|
|
rst_file = open(rst_path)
|
|
rst_content = rst_file.read()
|
|
rst_file.close()
|
|
|
|
anchors = revision.findall(rst_content) # ['Issue #43', ...]
|
|
anchors = sorted(set(anchors))
|
|
rst_content = revision.sub(r'`\1`_', rst_content)
|
|
rst_content += "\n"
|
|
for x in anchors:
|
|
issue = re.findall(r'\d+', x)[0]
|
|
rst_content += '.. _`%s`: %s/issue/%s\n' % (x, bitroot, issue)
|
|
rst_content += "\n"
|
|
return rst_content
|
|
|
|
readme_file = open('README.txt')
|
|
long_description = readme_file.read() + _linkified('CHANGES.txt')
|
|
readme_file.close()
|
|
|
|
dist = setup(
|
|
name="distribute",
|
|
version=VERSION,
|
|
description="Easily download, build, install, upgrade, and uninstall "
|
|
"Python packages",
|
|
author="The fellowship of the packaging",
|
|
author_email="distutils-sig@python.org",
|
|
license="PSF or ZPL",
|
|
long_description = long_description,
|
|
keywords = "CPAN PyPI distutils eggs package management",
|
|
url = "http://packages.python.org/distribute",
|
|
test_suite = 'setuptools.tests',
|
|
src_root = src_root,
|
|
packages = find_packages(),
|
|
package_data = {'setuptools':['*.exe']},
|
|
|
|
py_modules = ['pkg_resources', 'easy_install', 'site'],
|
|
|
|
zip_safe = (sys.version>="2.5"), # <2.5 needs unzipped for -m to work
|
|
|
|
cmdclass = {'test': test},
|
|
entry_points = {
|
|
|
|
"distutils.commands" : [
|
|
"%(cmd)s = setuptools.command.%(cmd)s:%(cmd)s" % locals()
|
|
for cmd in SETUP_COMMANDS
|
|
],
|
|
|
|
"distutils.setup_keywords": [
|
|
"eager_resources = setuptools.dist:assert_string_list",
|
|
"namespace_packages = setuptools.dist:check_nsp",
|
|
"extras_require = setuptools.dist:check_extras",
|
|
"install_requires = setuptools.dist:check_requirements",
|
|
"tests_require = setuptools.dist:check_requirements",
|
|
"entry_points = setuptools.dist:check_entry_points",
|
|
"test_suite = setuptools.dist:check_test_suite",
|
|
"zip_safe = setuptools.dist:assert_bool",
|
|
"package_data = setuptools.dist:check_package_data",
|
|
"exclude_package_data = setuptools.dist:check_package_data",
|
|
"include_package_data = setuptools.dist:assert_bool",
|
|
"packages = setuptools.dist:check_packages",
|
|
"dependency_links = setuptools.dist:assert_string_list",
|
|
"test_loader = setuptools.dist:check_importable",
|
|
"use_2to3 = setuptools.dist:assert_bool",
|
|
"convert_2to3_doctests = setuptools.dist:assert_string_list",
|
|
"use_2to3_fixers = setuptools.dist:assert_string_list",
|
|
"use_2to3_exclude_fixers = setuptools.dist:assert_string_list",
|
|
],
|
|
|
|
"egg_info.writers": [
|
|
"PKG-INFO = setuptools.command.egg_info:write_pkg_info",
|
|
"requires.txt = setuptools.command.egg_info:write_requirements",
|
|
"entry_points.txt = setuptools.command.egg_info:write_entries",
|
|
"eager_resources.txt = setuptools.command.egg_info:overwrite_arg",
|
|
"namespace_packages.txt = setuptools.command.egg_info:overwrite_arg",
|
|
"top_level.txt = setuptools.command.egg_info:write_toplevel_names",
|
|
"depends.txt = setuptools.command.egg_info:warn_depends_obsolete",
|
|
"dependency_links.txt = setuptools.command.egg_info:overwrite_arg",
|
|
],
|
|
|
|
"console_scripts": console_scripts,
|
|
|
|
"setuptools.file_finders":
|
|
["svn_cvs = setuptools.command.sdist:_default_revctrl"],
|
|
|
|
"setuptools.installation":
|
|
['eggsecutable = setuptools.command.easy_install:bootstrap'],
|
|
},
|
|
|
|
|
|
classifiers = textwrap.dedent("""
|
|
Development Status :: 5 - Production/Stable
|
|
Intended Audience :: Developers
|
|
License :: OSI Approved :: Python Software Foundation License
|
|
License :: OSI Approved :: Zope Public License
|
|
Operating System :: OS Independent
|
|
Programming Language :: Python :: 2.4
|
|
Programming Language :: Python :: 2.5
|
|
Programming Language :: Python :: 2.6
|
|
Programming Language :: Python :: 2.7
|
|
Programming Language :: Python :: 3
|
|
Programming Language :: Python :: 3.1
|
|
Programming Language :: Python :: 3.2
|
|
Programming Language :: Python :: 3.3
|
|
Topic :: Software Development :: Libraries :: Python Modules
|
|
Topic :: System :: Archiving :: Packaging
|
|
Topic :: System :: Systems Administration
|
|
Topic :: Utilities
|
|
""").strip().splitlines(),
|
|
scripts = scripts,
|
|
)
|
|
|
|
if _being_installed():
|
|
from distribute_setup import _after_install
|
|
_after_install(dist)
|