# Using via `numpy.distutils`

`numpy.distutils` is part of NumPy, and extends the standard Python `distutils` module to deal with Fortran sources and F2PY signature files, e.g. compile Fortran sources, call F2PY to construct extension modules, etc.

Example

Consider the following `setup_file.py` for the `fib` and `scalar` examples from Three ways to wrap - getting started section:

    from numpy.distutils.core import Extension

    ext1 = Extension(name = 'scalar',
                     sources = ['scalar.f'])
    ext2 = Extension(name = 'fib2',
                     sources = ['fib2.pyf', 'fib1.f'])

    if __name__ == "__main__":
        from numpy.distutils.core import setup
        setup(name = 'f2py_example',
              description       = "F2PY Users Guide examples",
              author            = "Pearu Peterson",
              author_email      = "pearu@cens.ioc.ee",
              ext_modules = [ext1, ext2]
              )
    # End of setup_example.py

Running

    python setup_example.py build

will build two extension modules `scalar` and `fib2` to the build directory.

## Extensions to `distutils`

`numpy.distutils` extends `distutils` with the following features:

- `Extension` class argument `sources` may contain Fortran source files. In addition, the list `sources` may contain at most one F2PY signature file, and in this case, the name of an Extension module must match with the `<modulename>` used in signature file. It is assumed that an F2PY signature file contains exactly one `python module` block.

  If `sources` do not contain a signature file, then F2PY is used to scan Fortran source files to construct wrappers to the Fortran codes.

  Additional options to the F2PY executable can be given using the `Extension` class argument `f2py_options`.

- The following new `distutils` commands are defined:

  `build_src`

    to construct Fortran wrapper extension modules, among many other things.

  `config_fc`

    to change Fortran compiler options.

  Additionally, the `build_ext` and `build_clib` commands are also enhanced to support Fortran sources.

  Run

      python <setup.py file> config_fc build_src build_ext --help

  to see available options for these commands.

- When building Python packages containing Fortran sources, one can choose different Fortran compilers by using the `build_ext` command option `--fcompiler=<Vendor>`. Here `<Vendor>` can be one of the following names (on `linux` systems):

      absoft compaq fujitsu g95 gnu gnu95 intel intele intelem lahey nag nagfor nv pathf95 pg vast

  See `numpy_distutils/fcompiler.py` for an up-to-date list of supported compilers for different platforms, or run

      python -m numpy.f2py -c --help-fcompiler