def get_wcslib_cfg(cfg, wcslib_files, include_paths): from astropy.version import debug cfg['include_dirs'].append('numpy') cfg['define_macros'].extend([ ('ECHO', None), ('WCSTRIG_MACRO', None), ('ASTROPY_WCS_BUILD', None), ('_GNU_SOURCE', None)]) if (not setup_helpers.use_system_library('wcslib') or sys.platform == 'win32'): write_wcsconfig_h(include_paths) wcslib_path = join("cextern", "wcslib") # Path to wcslib wcslib_cpath = join(wcslib_path, "C") # Path to wcslib source files cfg['sources'].extend(join(wcslib_cpath, x) for x in wcslib_files) cfg['include_dirs'].append(wcslib_cpath) else: wcsconfig_h_path = join(WCSROOT, 'include', 'wcsconfig.h') if os.path.exists(wcsconfig_h_path): os.unlink(wcsconfig_h_path) cfg.update(setup_helpers.pkg_config(['wcslib'], ['wcs'])) if debug: cfg['define_macros'].append(('DEBUG', None)) cfg['undef_macros'].append('NDEBUG') if (not sys.platform.startswith('sun') and not sys.platform == 'win32'): cfg['extra_compile_args'].extend(["-fno-inline", "-O0", "-g"]) else: # Define ECHO as nothing to prevent spurious newlines from # printing within the libwcs parser cfg['define_macros'].append(('NDEBUG', None)) cfg['undef_macros'].append('DEBUG') if sys.platform == 'win32': # These are written into wcsconfig.h, but that file is not # used by all parts of wcslib. cfg['define_macros'].extend([ ('YY_NO_UNISTD_H', None), ('_CRT_SECURE_NO_WARNINGS', None), ('_NO_OLDNAMES', None), # for mingw32 ('NO_OLDNAMES', None), # for mingw64 ('__STDC__', None) # for MSVC ]) if sys.platform.startswith('linux'): cfg['define_macros'].append(('HAVE_SINCOS', None)) # Squelch a few compilation warnings in WCSLIB if setup_helpers.get_compiler_option() in ('unix', 'mingw32'): if not get_distutils_build_option('debug'): cfg['extra_compile_args'].extend([ '-Wno-strict-prototypes', '-Wno-unused-function', '-Wno-unused-value', '-Wno-uninitialized', #'-Wno-unused-but-set-variable']) ])
def get_extensions(): med_sources = [str(os.path.join(UTIL_DIR, "median_utils.pyx")), str(os.path.join(UTIL_DIR, "quick_select.c"))] include_dirs = ['numpy', UTIL_DIR] libraries = [] ext_med = Extension(name=str('banzai.utils.median_utils'), sources=med_sources, include_dirs=include_dirs, libraries=libraries, language="c", extra_compile_args=['-g', '-O3', '-funroll-loops', '-ffast-math']) has_openmp, outputs = check_openmp() if has_openmp: if setup_helpers.get_compiler_option() == 'msvc': ext_med.extra_compile_args.append('-openmp') else: ext_med.extra_compile_args.append('-fopenmp') ext_med.extra_link_args = ['-g', '-fopenmp'] else: log.warn('OpenMP was not found. ' 'banzai will be compiled without OpenMP. ' '(Use the "-v" option of setup.py for more details.)') log.debug(('(Start of OpenMP info)\n' 'compiler stdout:\n{0}\n' 'compiler stderr:\n{1}\n' '(End of OpenMP info)').format(*outputs)) return [ext_med]
def get_extensions(): # 'numpy' will be replaced with the proper path to the numpy includes cfg = setup_helpers.DistutilsExtensionArgs() cfg['include_dirs'].append('numpy') cfg['sources'].extend( os.path.relpath(fname) for fname in glob(os.path.join(os.path.dirname(__file__), 'src', '*.c'))) if not setup_helpers.use_system_library('cfitsio'): if setup_helpers.get_compiler_option() == 'msvc': # These come from the CFITSIO vcc makefile cfg['extra_compile_args'].extend([ '/D', '"WIN32"', '/D', '"_WINDOWS"', '/D', '"_MBCS"', '/D', '"_USRDLL"', '/D', '"_CRT_SECURE_NO_DEPRECATE"']) else: # All of these switches are to silence warnings from compiling CFITSIO cfg['extra_compile_args'].extend([ '-Wno-unused-variable', '-Wno-parentheses', '-Wno-uninitialized', '-Wno-format', '-Wno-strict-prototypes', '-Wno-unused', '-Wno-comments', '-Wno-switch', '-Wno-declaration-after-statement' ]) cfitsio_path = os.path.join('cextern', 'cfitsio') cfitsio_files = glob(os.path.join(cfitsio_path, '*.c')) cfg['include_dirs'].append(cfitsio_path) cfg['sources'].extend(cfitsio_files) else: cfg.update(setup_helpers.pkg_config(['cfitsio'], ['cfitsio'])) return [Extension('astropy.io.fits.compression', **cfg)]
def get_wcslib_cfg(cfg, wcslib_files, include_paths): debug = import_file(os.path.join(WCSROOT, '..', 'version.py')).debug cfg['include_dirs'].append('numpy') cfg['define_macros'].extend([ ('ECHO', None), ('WCSTRIG_MACRO', None), ('ASTROPY_WCS_BUILD', None), ('_GNU_SOURCE', None)]) if (not setup_helpers.use_system_library('wcslib') or sys.platform == 'win32'): write_wcsconfig_h(include_paths) wcslib_path = join("cextern", "wcslib") # Path to wcslib wcslib_cpath = join(wcslib_path, "C") # Path to wcslib source files cfg['sources'].extend(join(wcslib_cpath, x) for x in wcslib_files) cfg['include_dirs'].append(wcslib_cpath) else: wcsconfig_h_path = join(WCSROOT, 'include', 'wcsconfig.h') if os.path.exists(wcsconfig_h_path): os.unlink(wcsconfig_h_path) cfg.update(setup_helpers.pkg_config(['wcslib'], ['wcs'])) if debug: cfg['define_macros'].append(('DEBUG', None)) cfg['undef_macros'].append('NDEBUG') if (not sys.platform.startswith('sun') and not sys.platform == 'win32'): cfg['extra_compile_args'].extend(["-fno-inline", "-O0", "-g"]) else: # Define ECHO as nothing to prevent spurious newlines from # printing within the libwcs parser cfg['define_macros'].append(('NDEBUG', None)) cfg['undef_macros'].append('DEBUG') if sys.platform == 'win32': # These are written into wcsconfig.h, but that file is not # used by all parts of wcslib. cfg['define_macros'].extend([ ('YY_NO_UNISTD_H', None), ('_CRT_SECURE_NO_WARNINGS', None), ('_NO_OLDNAMES', None), # for mingw32 ('NO_OLDNAMES', None), # for mingw64 ('__STDC__', None) # for MSVC ]) if sys.platform.startswith('linux'): cfg['define_macros'].append(('HAVE_SINCOS', None)) # Squelch a few compilation warnings in WCSLIB if setup_helpers.get_compiler_option() in ('unix', 'mingw32'): if not get_distutils_build_option('debug'): cfg['extra_compile_args'].extend([ '-Wno-strict-prototypes', '-Wno-unused-function', '-Wno-unused-value', '-Wno-uninitialized'])
def get_extensions(): med_sources = [ str(os.path.join(UTIL_DIR, "median_utils.pyx")), str(os.path.join(UTIL_DIR, "medutils.c")) ] im_sources = [ str(os.path.join(UTIL_DIR, "image_utils.pyx")), str(os.path.join(UTIL_DIR, "imutils.c")) ] include_dirs = ['numpy', UTIL_DIR] libraries = [] if 'CFLAGS' in os.environ: extra_compile_args = os.environ['CFLAGS'].split() else: extra_compile_args = ['-g', '-O3', '-funroll-loops', '-ffast-math'] ext_med = Extension(name=str('astroscrappy.utils.median_utils'), sources=med_sources, include_dirs=include_dirs, libraries=libraries, language="c", extra_compile_args=extra_compile_args) ext_im = Extension(name=str("astroscrappy.utils.image_utils"), sources=im_sources, include_dirs=include_dirs, libraries=libraries, language="c", extra_compile_args=extra_compile_args) has_openmp, outputs = check_openmp() if has_openmp: if setup_helpers.get_compiler_option() == 'msvc': ext_med.extra_compile_args.append('-openmp') ext_im.extra_compile_args.append('-openmp') else: ext_med.extra_compile_args.append('-fopenmp') ext_im.extra_compile_args.append('-fopenmp') ext_med.extra_link_args = ['-g', '-fopenmp'] ext_im.extra_link_args = ['-g', '-fopenmp'] else: log.warn('OpenMP was not found. ' 'astroscrappy will be compiled without OpenMP. ' '(Use the "-v" option of setup.py for more details.)') log.debug(('(Start of OpenMP info)\n' 'compiler stdout:\n{0}\n' 'compiler stderr:\n{1}\n' '(End of OpenMP info)').format(*outputs)) return [ext_med, ext_im]
def _get_compression_extension(): debug = '--debug' in sys.argv # 'numpy' will be replaced with the proper path to the numpy includes cfg = setup_helpers.DistutilsExtensionArgs() cfg['include_dirs'].append('numpy') cfg['sources'].append( os.path.join(os.path.dirname(__file__), 'src', 'compressionmodule.c')) if (int(os.environ.get('ASTROPY_USE_SYSTEM_CFITSIO', 0)) or int(os.environ.get('ASTROPY_USE_SYSTEM_ALL', 0))): cfg.update(setup_helpers.pkg_config(['cfitsio'], ['cfitsio'])) else: if setup_helpers.get_compiler_option() == 'msvc': # These come from the CFITSIO vcc makefile, except the last # which ensures on windows we do not include unistd.h (in regular # compilation of cfitsio, an empty file would be generated) cfg['extra_compile_args'].extend([ '/D', '"WIN32"', '/D', '"_WINDOWS"', '/D', '"_MBCS"', '/D', '"_USRDLL"', '/D', '"_CRT_SECURE_NO_DEPRECATE"', '/D', '"FF_NO_UNISTD_H"' ]) else: cfg['extra_compile_args'].extend( ['-Wno-declaration-after-statement']) if not debug: # these switches are to silence warnings from compiling CFITSIO # For full silencing, some are added that only are used in # later versions of gcc (versions approximate; see #6474) cfg['extra_compile_args'].extend([ '-Wno-strict-prototypes', '-Wno-unused', '-Wno-uninitialized', '-Wno-unused-result', # gcc >~4.8 '-Wno-misleading-indentation', # gcc >~7.2 '-Wno-format-overflow', # gcc >~7.2 ]) cfitsio_lib_path = os.path.join('cextern', 'cfitsio', 'lib') cfitsio_zlib_path = os.path.join('cextern', 'cfitsio', 'zlib') cfitsio_files = glob(os.path.join(cfitsio_lib_path, '*.c')) cfitsio_zlib_files = glob(os.path.join(cfitsio_zlib_path, '*.c')) cfg['include_dirs'].append(cfitsio_lib_path) cfg['include_dirs'].append(cfitsio_zlib_path) cfg['sources'].extend(cfitsio_files) cfg['sources'].extend(cfitsio_zlib_files) return Extension('astropy.io.fits.compression', **cfg)
def get_extensions(): # 'numpy' will be replaced with the proper path to the numpy includes cfg = setup_helpers.DistutilsExtensionArgs() cfg["include_dirs"].append("numpy") cfg["sources"].extend( os.path.relpath(fname) for fname in glob(os.path.join(os.path.dirname(__file__), "src", "*.c")) ) if not setup_helpers.use_system_library("cfitsio"): if setup_helpers.get_compiler_option() == "msvc": # These come from the CFITSIO vcc makefile cfg["extra_compile_args"].extend( [ "/D", '"WIN32"', "/D", '"_WINDOWS"', "/D", '"_MBCS"', "/D", '"_USRDLL"', "/D", '"_CRT_SECURE_NO_DEPRECATE"', ] ) else: # All of these switches are to silence warnings from compiling CFITSIO cfg["extra_compile_args"].extend( [ "-Wno-unused-variable", "-Wno-parentheses", "-Wno-uninitialized", "-Wno-format", "-Wno-strict-prototypes", "-Wno-unused", "-Wno-comments", "-Wno-switch", "-Wno-declaration-after-statement", ] ) cfitsio_path = os.path.join("cextern", "cfitsio") cfitsio_files = glob(os.path.join(cfitsio_path, "*.c")) cfg["include_dirs"].append(cfitsio_path) cfg["sources"].extend(cfitsio_files) else: cfg.update(setup_helpers.pkg_config(["cfitsio"], ["cfitsio"])) return [Extension("astropy.io.fits.compression", **cfg)]
def _get_compression_extension(): # 'numpy' will be replaced with the proper path to the numpy includes cfg = setup_helpers.DistutilsExtensionArgs() cfg['include_dirs'].append('numpy') cfg['sources'].append(os.path.join(os.path.dirname(__file__), 'src', 'compressionmodule.c')) if not setup_helpers.use_system_library('cfitsio'): if setup_helpers.get_compiler_option() == 'msvc': # These come from the CFITSIO vcc makefile, except the last # which ensures on windows we do not include unistd.h (in regular # compilation of cfitsio, an empty file would be generated) cfg['extra_compile_args'].extend( ['/D', '"WIN32"', '/D', '"_WINDOWS"', '/D', '"_MBCS"', '/D', '"_USRDLL"', '/D', '"_CRT_SECURE_NO_DEPRECATE"', '/D', '"FF_NO_UNISTD_H"']) else: cfg['extra_compile_args'].extend([ '-Wno-declaration-after-statement' ]) if not get_distutils_build_option('debug'): # these switches are to silence warnings from compiling CFITSIO # For full silencing, some are added that only are used in # later versions of gcc (versions approximate; see #6474) cfg['extra_compile_args'].extend([ '-Wno-strict-prototypes', '-Wno-unused', '-Wno-uninitialized', '-Wno-unused-result', # gcc >~4.8 '-Wno-misleading-indentation', # gcc >~7.2 '-Wno-format-overflow', # gcc >~7.2 ]) cfitsio_lib_path = os.path.join('cextern', 'cfitsio', 'lib') cfitsio_zlib_path = os.path.join('cextern', 'cfitsio', 'zlib') cfitsio_files = glob(os.path.join(cfitsio_lib_path, '*.c')) cfitsio_zlib_files = glob(os.path.join(cfitsio_zlib_path, '*.c')) cfg['include_dirs'].append(cfitsio_lib_path) cfg['include_dirs'].append(cfitsio_zlib_path) cfg['sources'].extend(cfitsio_files) cfg['sources'].extend(cfitsio_zlib_files) else: cfg.update(setup_helpers.pkg_config(['cfitsio'], ['cfitsio'])) return Extension('astropy.io.fits.compression', **cfg)
def check_openmp(): if setup_helpers.get_compiler_option() == 'msvc': # The free version of the Microsoft compilers supports # OpenMP in MSVC 2008 (python 2.7) and MSVC 2015 (python 3.5+), # but not MSVC 2010 (python 3.4 and lower). major, minor = sys.version_info[:2] has_openmp = not (major == 3 and minor < 5) # Empty return tuple is to match the alternative check, below. return has_openmp, ("", "") else: # Unix-y compiler, use this check. s = subprocess.Popen([sys.executable], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = s.communicate(CODELINES.encode('utf-8')) s.wait() return bool(s.returncode), (stdout, stderr)