~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to setup.py

  • Committer: John Arbash Meinel
  • Date: 2007-07-15 14:24:44 UTC
  • mto: This revision was merged to the branch mainline in revision 2620.
  • Revision ID: john@arbash-meinel.com-20070715142444-c90zfgn3khpl1swt
Update setup.py to just skip extensions that are not available.

Show diffs side-by-side

added added

removed removed

Lines of Context:
149
149
 
150
150
command_classes = {'install_scripts': my_install_scripts,
151
151
                   'build': bzr_build}
 
152
from distutils.extension import Extension
152
153
ext_modules = []
153
154
try:
154
155
    from Pyrex.Distutils import build_ext
155
156
except ImportError:
 
157
    have_pyrex = False
156
158
    # try to build the extension from the prior generated source.
 
159
    print
157
160
    print ("Pyrex not available, while bzr will build, "
158
161
           "you cannot modify the C extensions.")
159
162
    from distutils.command.build_ext import build_ext
160
 
    from distutils.extension import Extension
161
 
    #ext_modules.append(
162
 
    #    Extension("bzrlib.modulename", ["bzrlib/foo.c"], libraries = []))
163
 
    ext_modules.append(
164
 
        Extension("bzrlib._knit_load_data_c", ["bzrlib/_knit_load_data_c.c"]))
165
163
else:
166
 
    from distutils.extension import Extension
167
 
    #ext_modules.append(
168
 
    #    Extension("bzrlib.modulename", ["bzrlib/foo.pyx"], libraries = []))
169
 
    ext_modules.append(
170
 
        Extension("bzrlib._knit_load_data_c", ["bzrlib/_knit_load_data_c.pyx"]))
 
164
    have_pyrex = True
 
165
# Override the build_ext if we have Pyrex available
171
166
command_classes['build_ext'] = build_ext
 
167
unavailable_files = []
 
168
 
 
169
def add_pyrex_extension(module_name, **kwargs):
 
170
    """Add a pyrex module to build.
 
171
 
 
172
    This will use Pyrex to auto-generate the .c file if it is available.
 
173
    Otherwise it will fall back on the .c file. If the .c file is not
 
174
    available, it will warn, and not add anything.
 
175
 
 
176
    You can pass any extra options to Extension through kwargs. One example is
 
177
    'libraries = []'.
 
178
 
 
179
    :param module_name: The python path to the module. This will be used to
 
180
        determine the .pyx and .c files to use.
 
181
    """
 
182
    path = module_name.replace('.', '/')
 
183
    pyrex_name = path + '.pyx'
 
184
    c_name = path + '.c'
 
185
    if have_pyrex:
 
186
        ext_modules.append(Extension(module_name, [pyrex_name]))
 
187
    else:
 
188
        if not os.path.isfile(c_name):
 
189
            unavailable_files.append(c_name)
 
190
        else:
 
191
            ext_modules.append(Extension(module_name, [c_name]))
 
192
 
 
193
 
 
194
add_pyrex_extension('bzrlib._knit_load_data_c')
 
195
 
 
196
 
 
197
if unavailable_files:
 
198
    print 'C extension(s) not found:'
 
199
    print '   %s' % ('\n  '.join(unavailable_files),)
 
200
    print 'The python versions will be used instead.'
 
201
    print
 
202
 
172
203
 
173
204
if 'bdist_wininst' in sys.argv:
174
205
    import glob