[SciPy-dev] New SciPy Branch created
Pearu Peterson
pearu at scipy.org
Mon Oct 3 04:08:56 CDT 2005
On Sun, 2 Oct 2005, Stephen Walton wrote:
> Travis Oliphant wrote:
>
>> I will place a file called NEEDED_CHANGES.txt in the main directory and as
>> people think of things that need to be done place it there.
>
> Well, I'd love to help with this, but I don't know enough about how the new
> scipy/distutils works. Do we need some input from Pearu? In particular,
> what should default_config_dict and merge_config_dicts be replaced with?
It's a sensible request. I'll create a tutorial on scipy.distutils as soon
as possible. Until then here's a short overview of how setup.py files in
scipy should look like:
1) First, it must define a function configuration(parent_package,top_path)
that returns a dictionary or a Configuration instance. Here's a simple
example:
def configuration(parent_package='',top_path=None):
config = Configuration('mypackage',parent_package,top_path)
return config # or config.todict()
that is suitable for a pure python package called 'mypackage'.
2) If a package contains subpackages, then they can be specified using
add_subpackage() method, for example,
config.add_subpackage('mysubpackage')
Of course, mysubpackage setup.py should follow the same convention as any
scipy setup.py file.
3) If a package contains extensions, then they can be specified using
add_extension() method, for example,
config.add_extension('myextension',sources,..)
4) If a package contains data files, then they can be specified using
add_data_files() method, for example,
config.add_data_files('datafile1','datafile2',..)
or add_data_dir() method, for example,
config.add_data_dir('datadir')
5) If a package needs to install header files, then header files should be
specified using add_headers method, for example,
config.add_headers('headerfile1','headerfile2',..)
6) If a package extension modules use local headers for compilation, then
the location of header files can be specified using add_include_dirs
method, for example,
config.add_include_dirs('includepath1','includepath2',..)
7) If a package needs to install scripts, then scripts can be specified
using add_scripts method, for example,
config.add_scripts('script1','script2',..)
8) If a package has libraries, then they can be specified using
add_library mehtod. The add_library is not fully tested as of yet.
There are several helper methods in Configuration instance, for example,
paths, get_config_cmd, get_build_temp_dir, have_f77c, have_f90c,
get_version, make_svn_version_py, get_subpackage, get_distribution,
todict, etc
but I'll describe them later. Also the usage of alreay mentioned methods
needs some comments to deal with some special cases that may occur in
practice, eg. howto define packages that directory names don't match with
package names, etc.
Configuration instance has also several useful attributes such as
name, local_path, top_path
but in general it can have attributes that distutils.core.setup function
can accept.
Also, one of the coolest features in scipy.distutils is that files in
sources or other similar arguments may be functions that are called during
building steps to generate sources on fly. I'll need to explain the usage
of such functions as well.
If I forgot to mention something important, it will appear in
scipy.distutils howto or tutorial document.. unless someone asks it
first..
Pearu
More information about the Scipy-dev
mailing list