diff --git a/setup.py b/setup.py index a677ba821..a98f793a8 100755 --- a/setup.py +++ b/setup.py @@ -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 @@ -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, eaxmples + # eggs will lack docs, examples 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,