MCPcopy Create free account
hub / github.com/numpy/numpy / build_extension

Method build_extension

numpy/distutils/command/build_ext.py:359–628  ·  view source on GitHub ↗
(self, ext)

Source from the content-addressed store, hash-verified

357 return sources
358
359 def build_extension(self, ext):
360 sources = ext.sources
361 if sources is None or not is_sequence(sources):
362 raise DistutilsSetupError(
363 ("in 'ext_modules' option (extension '%s'), " +
364 "'sources' must be present and must be " +
365 "a list of source filenames") % ext.name)
366 sources = list(sources)
367
368 if not sources:
369 return
370
371 fullname = self.get_ext_fullname(ext.name)
372 if self.inplace:
373 modpath = fullname.split('.')
374 package = '.'.join(modpath[0:-1])
375 base = modpath[-1]
376 build_py = self.get_finalized_command('build_py')
377 package_dir = build_py.get_package_dir(package)
378 ext_filename = os.path.join(package_dir,
379 self.get_ext_filename(base))
380 else:
381 ext_filename = os.path.join(self.build_lib,
382 self.get_ext_filename(fullname))
383 depends = sources + ext.depends
384
385 force_rebuild = self.force
386 if not self.disable_optimization and not self.compiler_opt.is_cached():
387 log.debug("Detected changes on compiler optimizations")
388 force_rebuild = True
389 if not (force_rebuild or newer_group(depends, ext_filename, 'newer')):
390 log.debug("skipping '%s' extension (up-to-date)", ext.name)
391 return
392 else:
393 log.info("building '%s' extension", ext.name)
394
395 extra_args = ext.extra_compile_args or []
396 extra_cflags = getattr(ext, 'extra_c_compile_args', None) or []
397 extra_cxxflags = getattr(ext, 'extra_cxx_compile_args', None) or []
398
399 macros = ext.define_macros[:]
400 for undef in ext.undef_macros:
401 macros.append((undef,))
402
403 c_sources, cxx_sources, f_sources, fmodule_sources = \
404 filter_sources(ext.sources)
405
406 if self.compiler.compiler_type == 'msvc':
407 if cxx_sources:
408 # Needed to compile kiva.agg._agg extension.
409 extra_args.append('/Zm1000')
410 extra_cflags += extra_cxxflags
411 # this hack works around the msvc compiler attributes
412 # problem, msvc uses its own convention :(
413 c_sources += cxx_sources
414 cxx_sources = []
415
416 # Set Fortran/C++ compilers for compilation and linking.

Callers

nothing calls this directly

Calls 15

is_sequenceFunction · 0.90
filter_sourcesFunction · 0.90
get_numpy_include_dirsFunction · 0.90
is_cachedMethod · 0.80
infoMethod · 0.80
warnMethod · 0.80
endswithMethod · 0.80
cpu_baseline_flagsMethod · 0.80
try_dispatchMethod · 0.80
module_optionsMethod · 0.80

Tested by

no test coverage detected