| #!@PYTHON@ |
| '''A setup.py script with better SWIG support. To use it, either |
| rename it to setup.py.in and have it pe processed by your configure |
| script (you will need to define @PYTHON@), or replace the @*@ strings |
| by hand. |
| |
| Copyright 2001, Anthony Joseph Seward''' |
| |
| |
| from distutils.core import setup, Extension |
| |
| ############################################################################### |
| ## Start of better Swig support |
| ############################################################################### |
| from distutils.command.build_ext import build_ext |
| import os |
| import string |
| class build_swig_ext(build_ext): |
| '''Better swig support for Distutils''' |
| |
| ## __ Tell Distutils about the options |
| user_options = build_ext.user_options |
| boolean_options = build_ext.boolean_options |
| |
| user_options.append( |
| ('swig-doc=', None, |
| 'what type of documentation should SWIG produce (default: none)') |
| ) |
| user_options.append( |
| ('swig-inc=', None, |
| 'a list of directories to add to the SWIG include path' |
| + "(separated by ':')(default: SWIG)") |
| ) |
| user_options.append( |
| ('swig-shadow', None, |
| 'have SWIG create shadow classes' |
| + ' (also adds docstrings to the shadow classes') |
| ) |
| |
| boolean_options.append('swig-shadow') |
| |
| def initialize_options(self): |
| '''Initialize the new options after the inherited ones''' |
| build_ext.initialize_options(self) |
| self.swig_doc = 'none' |
| self.swig_inc = 'SWIG' |
| self.swig_shadow = None |
| |
| def swig_sources(self, sources): |
| """Override the definition of 'swig_sources' in build_ext. This |
| is essentially the same function but with better swig support. |
| I will now quote the original docstring: |
| |
| Walk the list of source files in 'sources', looking for SWIG |
| interface (.i) files. Run SWIG on all that are found, and |
| return a modified 'sources' list with SWIG source files replaced |
| by the generated C (or C++) files. |
| """ |
| |
| new_sources = [] |
| swig_sources = [] |
| swig_targets = {} |
| |
| # XXX this drops generated C/C++ files into the source tree, which |
| # is fine for developers who want to distribute the generated |
| # source -- but there should be an option to put SWIG output in |
| # the temp dir. |
| |
| if self.swig_cpp: |
| target_ext = '.cpp' |
| else: |
| target_ext = '.c' |
| |
| for source in sources: |
| (base, ext) = os.path.splitext(source) |
| if ext == ".i": # SWIG interface file |
| new_sources.append(base + target_ext) |
| swig_sources.append(source) |
| swig_targets[source] = new_sources[-1] |
| else: |
| new_sources.append(source) |
| |
| if not swig_sources: |
| return new_sources |
| |
| includes = self.swig_inc |
| if type(includes) is type(''): |
| includes = string.split(includes, ':') |
| includes = map(lambda x: '-I'+x, includes) |
| includes = string.join(includes) |
| |
| swig = self.find_swig() |
| ## swig_cmd = [swig, "-python", "-d%s" % self.swig_doc, includes] |
| swig_cmd = [swig, '-v', '-python', '-d%s' % self.swig_doc, includes] |
| if self.swig_cpp: |
| swig_cmd.append('-c++') |
| |
| if self.swig_shadow: |
| swig_cmd.append('-shadow') |
| ## swig1.1 swig_cmd.append('-docstring') |
| |
| for source in swig_sources: |
| target = swig_targets[source] |
| self.announce('swigging %s to %s' % (source, target)) |
| self.spawn(swig_cmd + ['-o', target, source]) |
| |
| return new_sources |
| |
| # swig_sources () |
| ############################################################################### |
| ## End of improved swig support |
| ############################################################################### |
| |
| package = '@PACKAGE@' |
| version = '@VERSION@' |
| include_dirs = ['@top_srcdir@'] |
| lib_dirs = ['@top_srcdir@/@PACKAGE@'] |
| libraries = ['@PACKAGE@', 'stdc++'] |
| |
| setup(name = package, |
| version = version, |
| description = '', |
| author = '', |
| author_email = '', |
| url = 'http://', |
| |
| cmdclass = {'build_ext': build_swig_ext}, |
| ext_modules = [Extension(package+'cmodule', |
| [package+'.i'], |
| include_dirs=include_dirs, |
| library_dirs=lib_dirs, |
| libraries=libraries, |
| )], |
| options = {'build_ext': |
| {'swig_doc': 'html', |
| 'swig_cpp': not None, |
| 'swig_shadow': not None} |
| } |
| ) |