setupbase.py
231 lines
| 8.0 KiB
| text/x-python
|
PythonLexer
Brian E Granger
|
r1237 | # encoding: utf-8 | |
Brian E Granger
|
r1239 | """ | |
This module defines the things that are used in setup.py for building IPython | |||
This includes: | |||
* The basic arguments to setup | |||
* Functions for finding things like packages, package data, etc. | |||
* A function for checking dependencies. | |||
""" | |||
Brian E Granger
|
r1237 | __docformat__ = "restructuredtext en" | |
#------------------------------------------------------------------------------- | |||
# Copyright (C) 2008 The IPython Development Team | |||
# | |||
# Distributed under the terms of the BSD License. The full license is in | |||
# the file COPYING, distributed as part of this software. | |||
#------------------------------------------------------------------------------- | |||
#------------------------------------------------------------------------------- | |||
# Imports | |||
#------------------------------------------------------------------------------- | |||
import os, sys | |||
from glob import glob | |||
from setupext import install_data_ext | |||
#------------------------------------------------------------------------------- | |||
# Useful globals and utility functions | |||
#------------------------------------------------------------------------------- | |||
# A few handy globals | |||
isfile = os.path.isfile | |||
pjoin = os.path.join | |||
def oscmd(s): | |||
print ">", s | |||
os.system(s) | |||
# A little utility we'll need below, since glob() does NOT allow you to do | |||
# exclusion on multiple endings! | |||
def file_doesnt_endwith(test,endings): | |||
"""Return true if test is a file and its name does NOT end with any | |||
of the strings listed in endings.""" | |||
if not isfile(test): | |||
return False | |||
for e in endings: | |||
if test.endswith(e): | |||
return False | |||
return True | |||
#--------------------------------------------------------------------------- | |||
# Basic project information | |||
#--------------------------------------------------------------------------- | |||
# Release.py contains version, authors, license, url, keywords, etc. | |||
execfile(pjoin('IPython','Release.py')) | |||
# Create a dict with the basic information | |||
# This dict is eventually passed to setup after additional keys are added. | |||
setup_args = dict( | |||
name = name, | |||
version = version, | |||
description = description, | |||
long_description = long_description, | |||
author = author, | |||
author_email = author_email, | |||
url = url, | |||
download_url = download_url, | |||
license = license, | |||
platforms = platforms, | |||
keywords = keywords, | |||
cmdclass = {'install_data': install_data_ext}, | |||
) | |||
#--------------------------------------------------------------------------- | |||
# Find packages | |||
#--------------------------------------------------------------------------- | |||
def add_package(packages, pname, config=False, tests=False, scripts=False, others=None): | |||
Brian E Granger
|
r1239 | """ | |
Add a package to the list of packages, including certain subpackages. | |||
""" | |||
Brian E Granger
|
r1240 | packages.append('.'.join(['IPython',pname])) | |
Brian E Granger
|
r1237 | if config: | |
Brian E Granger
|
r1240 | packages.append('.'.join(['IPython',pname,'config'])) | |
Brian E Granger
|
r1237 | if tests: | |
Brian E Granger
|
r1240 | packages.append('.'.join(['IPython',pname,'tests'])) | |
Brian E Granger
|
r1237 | if scripts: | |
Brian E Granger
|
r1240 | packages.append('.'.join(['IPython',pname,'scripts'])) | |
Brian E Granger
|
r1237 | if others is not None: | |
for o in others: | |||
Brian E Granger
|
r1240 | packages.append('.'.join(['IPython',pname,o])) | |
Brian E Granger
|
r1237 | ||
def find_packages(): | |||
Brian E Granger
|
r1239 | """ | |
Find all of IPython's packages. | |||
""" | |||
Brian E Granger
|
r1240 | packages = ['IPython'] | |
Brian E Granger
|
r1237 | add_package(packages, 'config', tests=True) | |
add_package(packages , 'Extensions') | |||
add_package(packages, 'external') | |||
add_package(packages, 'gui') | |||
add_package(packages, 'gui.wx') | |||
add_package(packages, 'kernel', config=True, tests=True, scripts=True) | |||
add_package(packages, 'kernel.core', config=True, tests=True) | |||
add_package(packages, 'testing', tests=True) | |||
add_package(packages, 'tools', tests=True) | |||
add_package(packages, 'UserConfig') | |||
return packages | |||
#--------------------------------------------------------------------------- | |||
# Find package data | |||
#--------------------------------------------------------------------------- | |||
def find_package_data(): | |||
Brian E Granger
|
r1239 | """ | |
Find IPython's package_data. | |||
""" | |||
Brian E Granger
|
r1237 | # This is not enough for these things to appear in an sdist. | |
# We need to muck with the MANIFEST to get this to work | |||
Brian E Granger
|
r1317 | package_data = { | |
'IPython.UserConfig' : ['*'], | |||
'IPython.tools.tests' : ['*.txt'], | |||
'IPython.testing' : ['*.txt'] | |||
} | |||
Brian E Granger
|
r1237 | return package_data | |
#--------------------------------------------------------------------------- | |||
# Find data files | |||
#--------------------------------------------------------------------------- | |||
def find_data_files(): | |||
Brian E Granger
|
r1239 | """ | |
Find IPython's data_files. | |||
""" | |||
Brian E Granger
|
r1237 | ||
# I can't find how to make distutils create a nested dir. structure, so | |||
# in the meantime do it manually. Butt ugly. | |||
# Note that http://www.redbrick.dcu.ie/~noel/distutils.html, ex. 2/3, contain | |||
# information on how to do this more cleanly once python 2.4 can be assumed. | |||
# Thanks to Noel for the tip. | |||
docdirbase = 'share/doc/ipython' | |||
manpagebase = 'share/man/man1' | |||
# We only need to exclude from this things NOT already excluded in the | |||
# MANIFEST.in file. | |||
exclude = ('.sh','.1.gz') | |||
Brian E Granger
|
r1259 | # We need to figure out how we want to package all of our rst docs? | |
# docfiles = filter(lambda f:file_doesnt_endwith(f,exclude),glob('docs/*')) | |||
examfiles = filter(isfile, glob('docs/examples/core/*.py')) | |||
examfiles.append(filter(isfile, glob('docs/examples/kernel/*.py'))) | |||
manpages = filter(isfile, glob('docs/man/*.1.gz')) | |||
Brian E Granger
|
r1237 | igridhelpfiles = filter(isfile, glob('IPython/Extensions/igrid_help.*')) | |
Brian E Granger
|
r1259 | data_files = [#('data', docdirbase, docfiles), | |
Brian E Granger
|
r1237 | ('data', pjoin(docdirbase, 'examples'),examfiles), | |
('data', manpagebase, manpages), | |||
('data',pjoin(docdirbase, 'extensions'),igridhelpfiles), | |||
] | |||
Brian E Granger
|
r1271 | # import pprint | |
# pprint.pprint(data_files) | |||
return [] | |||
Brian E Granger
|
r1237 | ||
#--------------------------------------------------------------------------- | |||
# Find scripts | |||
#--------------------------------------------------------------------------- | |||
def find_scripts(): | |||
Brian E Granger
|
r1239 | """ | |
Find IPython's scripts. | |||
""" | |||
Brian E Granger
|
r1237 | scripts = [] | |
Brian E Granger
|
r1254 | scripts.append('IPython/kernel/scripts/ipengine') | |
scripts.append('IPython/kernel/scripts/ipcontroller') | |||
scripts.append('IPython/kernel/scripts/ipcluster') | |||
Brian E Granger
|
r1237 | scripts.append('scripts/ipython') | |
scripts.append('scripts/pycolor') | |||
scripts.append('scripts/irunner') | |||
# Script to be run by the windows binary installer after the default setup | |||
# routine, to add shortcuts and similar windows-only things. Windows | |||
# post-install scripts MUST reside in the scripts/ dir, otherwise distutils | |||
# doesn't find them. | |||
if 'bdist_wininst' in sys.argv: | |||
if len(sys.argv) > 2 and ('sdist' in sys.argv or 'bdist_rpm' in sys.argv): | |||
print >> sys.stderr,"ERROR: bdist_wininst must be run alone. Exiting." | |||
sys.exit(1) | |||
scripts.append('scripts/ipython_win_post_install.py') | |||
return scripts | |||
#--------------------------------------------------------------------------- | |||
# Find scripts | |||
#--------------------------------------------------------------------------- | |||
def check_for_dependencies(): | |||
Brian E Granger
|
r1239 | """Check for IPython's dependencies. | |
This function should NOT be called if running under setuptools! | |||
""" | |||
Brian E Granger
|
r1237 | from setupext.setupext import ( | |
print_line, print_raw, print_status, print_message, | |||
check_for_zopeinterface, check_for_twisted, | |||
check_for_foolscap, check_for_pyopenssl, | |||
check_for_sphinx, check_for_pygments, | |||
check_for_nose, check_for_pexpect | |||
) | |||
print_line() | |||
print_raw("BUILDING IPYTHON") | |||
print_status('python', sys.version) | |||
print_status('platform', sys.platform) | |||
if sys.platform == 'win32': | |||
print_status('Windows version', sys.getwindowsversion()) | |||
print_raw("") | |||
print_raw("OPTIONAL DEPENDENCIES") | |||
check_for_zopeinterface() | |||
check_for_twisted() | |||
check_for_foolscap() | |||
check_for_pyopenssl() | |||
check_for_sphinx() | |||
check_for_pygments() | |||
check_for_nose() | |||
check_for_pexpect() |