@ -4,7 +4,7 @@
Under Posix environments it works like a typical setup . py script .
Under Windows , the command sdist is not supported , since IPython
requires utilities , which are not available under Windows . """
requires utilities which are not available under Windows . """
#*****************************************************************************
# Copyright (C) 2001-2005 Fernando Perez <fperez@colorado.edu>
@ -18,15 +18,41 @@ import os
import sys
from glob import glob
# BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
# update it when the contents of directories change.
if os . path . exists ( ' MANIFEST ' ) : os . remove ( ' MANIFEST ' )
from distutils . core import setup
from setupext import install_data_ext
# Local imports
from IPython . genutils import target_update
# A few handy globals
isfile = os . path . isfile
pjoin = os . path . join
# BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
# update it when the contents of directories change.
if os . path . exists ( ' MANIFEST ' ) : os . remove ( ' MANIFEST ' )
##############################################################################
# Utility functions
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
###############################################################################
# Main code begins
if os . name == ' posix ' :
os_name = ' posix '
@ -36,43 +62,31 @@ else:
print ' Unsupported operating system: ' , os . name
sys . exit ( 1 )
# Under Windows, 'sdist' is not supported, since it requires lyxport (and
# hence lyx,perl,latex,pdflatex,latex2html,sh,...)
# Under Windows, 'sdist' has not been supported. Now that the docs build with
# Sphinx it might work, but let's not turn it on until someone confirms that it
# actually works.
if os_name == ' windows ' and ' sdist ' in sys . argv :
print ' The sdist command is not available under Windows. Exiting. '
sys . exit ( 1 )
from distutils . core import setup
# update the manuals when building a source dist
if len ( sys . argv ) > = 2 and sys . argv [ 1 ] in ( ' sdist ' , ' bdist_rpm ' ) :
from IPython . genutils import target_update
# list of things to be updated. Each entry is a triplet of args for
import textwrap
# List of things to be updated. Each entry is a triplet of args for
# target_update()
to_update = [ ( ' doc/magic.tex ' ,
[ ' IPython/Magic.py ' ] ,
" cd doc && ./update_magic.sh " ) ,
( ' doc/manual.lyx ' ,
[ ' IPython/Release.py ' , ' doc/manual_base.lyx ' ] ,
" cd doc && ./update_version.sh " ) ,
( ' doc/manual/manual.html ' ,
[ ' doc/manual.lyx ' ,
' doc/magic.tex ' ,
' doc/examples/example-gnuplot.py ' ,
' doc/examples/example-embed.py ' ,
' doc/examples/example-embed-short.py ' ,
' IPython/UserConfig/ipythonrc ' ,
] ,
" cd doc && "
" lyxport -tt --leave --pdf "
" --html -o ' -noinfo -split +1 -local_icons ' manual.lyx " ) ,
to_update = [ # The do_sphinx scripts builds html and pdf, so just one
# target is enough to cover all manual generation
( ' doc/manual/ipython.pdf ' ,
[ ' IPython/Release.py ' , ' doc/source/ipython.rst ' ] ,
" cd doc && python do_sphinx.py " ) ,
# FIXME - Disabled for now: we need to redo an automatic way
# of generating the magic info inside the rst.
#('doc/magic.tex',
#['IPython/Magic.py'],
#"cd doc && ./update_magic.sh" ),
( ' doc/new_design.pdf ' ,
[ ' doc/new_design.lyx ' ] ,
" cd doc && lyxport -tt --pdf new_design.lyx " ) ,
( ' doc/ipython.1.gz ' ,
[ ' doc/ipython.1 ' ] ,
" cd doc && gzip -9c ipython.1 > ipython.1.gz " ) ,
@ -81,45 +95,33 @@ if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
[ ' doc/pycolor.1 ' ] ,
" cd doc && gzip -9c pycolor.1 > pycolor.1.gz " ) ,
]
for target in to_update :
target_update ( * target )
[ target_update ( * t ) for t in to_update ]
# Release.py contains version, authors, license, url, keywords, etc.
execfile ( pjoin ( ' IPython ' , ' Release.py ' ) )
# 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
# 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 -%s ' % version
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 ' )
docfiles = filter ( lambda f : file_doesnt_endwith ( f , exclude ) , glob ( ' doc/* ' ) )
examfiles = filter ( isfile , glob ( ' doc/examples/*.py ' ) )
manfiles = filter ( isfile , glob ( ' doc/manual/*.html ' ) ) + \
filter ( isfile , glob ( ' doc/manual/*.css ' ) ) + \
filter ( isfile , glob ( ' doc/manual/*.png ' ) )
manfiles = filter ( isfile , glob ( ' doc/manual/* ' ) )
manstatic = filter ( isfile , glob ( ' doc/manual/_static/* ' ) )
manpages = filter ( isfile , glob ( ' doc/*.1.gz ' ) )
cfgfiles = filter ( isfile , glob ( ' IPython/UserConfig/* ' ) )
scriptfiles = filter ( isfile , [ ' scripts/ipython ' , ' scripts/pycolor ' ,
' scripts/irunner ' ] )
igridhelpfiles = filter ( isfile , glob ( ' IPython/Extensions/igrid_help.* ' ) )
# Script to be run by the windows binary installer after the default setup
@ -135,8 +137,8 @@ if 'bdist_wininst' in sys.argv:
datafiles = [ ( ' data ' , docdirbase , docfiles ) ,
( ' data ' , pjoin ( docdirbase , ' examples ' ) , examfiles ) ,
( ' data ' , pjoin ( docdirbase , ' manual ' ) , manfiles ) ,
( ' data ' , pjoin ( docdirbase , ' manual/_static ' ) , manstatic ) ,
( ' data ' , manpagebase , manpages ) ,
( ' lib ' , ' IPython/UserConfig ' , cfgfiles ) ,
( ' data ' , pjoin ( docdirbase , ' extensions ' ) , igridhelpfiles ) ,
]
@ -150,14 +152,15 @@ if 'setuptools' in sys.modules:
] }
}
scriptfiles = [ ]
# eggs will lack docs, e a xmples
# eggs will lack docs, e xa mples
datafiles = [ ]
#datafiles = [('lib', 'IPython/UserConfig', cfgfiles)]
else :
# Normal, non-setuptools install
egg_extra_kwds = { }
# package_data of setuptools was introduced to distutils in 2.4
if sys . version_info < ( 2 , 4 ) :
datafiles . append ( ( ' lib ' , ' IPython/UserConfig ' , cfgfiles ) )
# Call the setup() routine which does most of the work
setup ( name = name ,
version = version ,
@ -170,8 +173,11 @@ setup(name = name,
license = license ,
platforms = platforms ,
keywords = keywords ,
packages = [ ' IPython ' , ' IPython.Extensions ' , ' IPython.external ' ] ,
packages = [ ' IPython ' , ' IPython.Extensions ' , ' IPython.external ' ,
' IPython.gui ' , ' IPython.gui.wx ' ,
' IPython.UserConfig ' ] ,
scripts = scriptfiles ,
package_data = { ' IPython.UserConfig ' : [ ' * ' ] } ,
cmdclass = { ' install_data ' : install_data_ext } ,
data_files = datafiles ,