1899
|
1 #!@PYTHON@
|
|
2 '''A setup.py script with better SWIG support. To use it, either
|
|
3 rename it to setup.py.in and have it pe processed by your configure
|
|
4 script (you will need to define @PYTHON@), or replace the @*@ strings
|
|
5 by hand.
|
|
6
|
|
7 Copyright 2001, Anthony Joseph Seward'''
|
|
8
|
|
9
|
|
10 from distutils.core import setup, Extension
|
|
11
|
|
12 ###############################################################################
|
|
13 ## Start of better Swig support
|
|
14 ###############################################################################
|
|
15 from distutils.command.build_ext import build_ext
|
|
16 import os
|
|
17 import string
|
|
18 class build_swig_ext(build_ext):
|
|
19 '''Better swig support for Distutils'''
|
|
20
|
|
21 ## __ Tell Distutils about the options
|
|
22 user_options = build_ext.user_options
|
|
23 boolean_options = build_ext.boolean_options
|
|
24
|
|
25 user_options.append(
|
|
26 ('swig-doc=', None,
|
|
27 'what type of documentation should SWIG produce (default: none)')
|
|
28 )
|
|
29 user_options.append(
|
|
30 ('swig-inc=', None,
|
|
31 'a list of directories to add to the SWIG include path'
|
|
32 + "(separated by ':')(default: SWIG)")
|
|
33 )
|
|
34 user_options.append(
|
|
35 ('swig-shadow', None,
|
|
36 'have SWIG create shadow classes'
|
|
37 + ' (also adds docstrings to the shadow classes')
|
|
38 )
|
|
39
|
|
40 boolean_options.append('swig-shadow')
|
|
41
|
|
42 def initialize_options(self):
|
|
43 '''Initialize the new options after the inherited ones'''
|
|
44 build_ext.initialize_options(self)
|
|
45 self.swig_doc = 'none'
|
|
46 self.swig_inc = 'SWIG'
|
|
47 self.swig_shadow = None
|
|
48
|
|
49 def swig_sources(self, sources):
|
|
50 """Override the definition of 'swig_sources' in build_ext. This
|
|
51 is essentially the same function but with better swig support.
|
|
52 I will now quote the original docstring:
|
|
53
|
|
54 Walk the list of source files in 'sources', looking for SWIG
|
|
55 interface (.i) files. Run SWIG on all that are found, and
|
|
56 return a modified 'sources' list with SWIG source files replaced
|
|
57 by the generated C (or C++) files.
|
|
58 """
|
|
59
|
|
60 new_sources = []
|
|
61 swig_sources = []
|
|
62 swig_targets = {}
|
|
63
|
|
64 # XXX this drops generated C/C++ files into the source tree, which
|
|
65 # is fine for developers who want to distribute the generated
|
|
66 # source -- but there should be an option to put SWIG output in
|
|
67 # the temp dir.
|
|
68
|
|
69 if self.swig_cpp:
|
|
70 target_ext = '.cpp'
|
|
71 else:
|
|
72 target_ext = '.c'
|
|
73
|
|
74 for source in sources:
|
|
75 (base, ext) = os.path.splitext(source)
|
|
76 if ext == ".i": # SWIG interface file
|
|
77 new_sources.append(base + target_ext)
|
|
78 swig_sources.append(source)
|
|
79 swig_targets[source] = new_sources[-1]
|
|
80 else:
|
|
81 new_sources.append(source)
|
|
82
|
|
83 if not swig_sources:
|
|
84 return new_sources
|
|
85
|
|
86 includes = self.swig_inc
|
|
87 if type(includes) is type(''):
|
|
88 includes = string.split(includes, ':')
|
|
89 includes = map(lambda x: '-I'+x, includes)
|
|
90 includes = string.join(includes)
|
|
91
|
|
92 swig = self.find_swig()
|
|
93 ## swig_cmd = [swig, "-python", "-d%s" % self.swig_doc, includes]
|
|
94 swig_cmd = [swig, '-v', '-python', '-d%s' % self.swig_doc, includes]
|
|
95 if self.swig_cpp:
|
|
96 swig_cmd.append('-c++')
|
|
97
|
|
98 if self.swig_shadow:
|
|
99 swig_cmd.append('-shadow')
|
|
100 ## swig1.1 swig_cmd.append('-docstring')
|
|
101
|
|
102 for source in swig_sources:
|
|
103 target = swig_targets[source]
|
|
104 self.announce('swigging %s to %s' % (source, target))
|
|
105 self.spawn(swig_cmd + ['-o', target, source])
|
|
106
|
|
107 return new_sources
|
|
108
|
|
109 # swig_sources ()
|
|
110 ###############################################################################
|
|
111 ## End of improved swig support
|
|
112 ###############################################################################
|
|
113
|
|
114 package = '@PACKAGE@'
|
|
115 version = '@VERSION@'
|
|
116 include_dirs = ['@top_srcdir@']
|
|
117 lib_dirs = ['@top_srcdir@/@PACKAGE@']
|
|
118 libraries = ['@PACKAGE@', 'stdc++']
|
|
119
|
|
120 setup(name = package,
|
|
121 version = version,
|
|
122 description = '',
|
|
123 author = '',
|
|
124 author_email = '',
|
|
125 url = 'http://',
|
|
126
|
|
127 cmdclass = {'build_ext': build_swig_ext},
|
|
128 ext_modules = [Extension(package+'cmodule',
|
|
129 [package+'.i'],
|
|
130 include_dirs=include_dirs,
|
|
131 library_dirs=lib_dirs,
|
|
132 libraries=libraries,
|
|
133 )],
|
|
134 options = {'build_ext':
|
|
135 {'swig_doc': 'html',
|
|
136 'swig_cpp': not None,
|
|
137 'swig_shadow': not None}
|
|
138 }
|
|
139 )
|