Chris@87: from __future__ import division, print_function Chris@87: Chris@87: from os.path import join, split, dirname Chris@87: import os Chris@87: import sys Chris@87: from distutils.dep_util import newer Chris@87: from distutils.msvccompiler import get_build_version as get_msvc_build_version Chris@87: Chris@87: def needs_mingw_ftime_workaround(): Chris@87: # We need the mingw workaround for _ftime if the msvc runtime version is Chris@87: # 7.1 or above and we build with mingw ... Chris@87: # ... but we can't easily detect compiler version outside distutils command Chris@87: # context, so we will need to detect in randomkit whether we build with gcc Chris@87: msver = get_msvc_build_version() Chris@87: if msver and msver >= 8: Chris@87: return True Chris@87: Chris@87: return False Chris@87: Chris@87: def configuration(parent_package='',top_path=None): Chris@87: from numpy.distutils.misc_util import Configuration, get_mathlibs Chris@87: config = Configuration('random', parent_package, top_path) Chris@87: Chris@87: def generate_libraries(ext, build_dir): Chris@87: config_cmd = config.get_config_cmd() Chris@87: libs = get_mathlibs() Chris@87: tc = testcode_wincrypt() Chris@87: if config_cmd.try_run(tc): Chris@87: libs.append('Advapi32') Chris@87: ext.libraries.extend(libs) Chris@87: return None Chris@87: Chris@87: # enable unix large file support on 32 bit systems Chris@87: # (64 bit off_t, lseek -> lseek64 etc.) Chris@87: defs = [('_FILE_OFFSET_BITS', '64'), Chris@87: ('_LARGEFILE_SOURCE', '1'), Chris@87: ('_LARGEFILE64_SOURCE', '1')] Chris@87: if needs_mingw_ftime_workaround(): Chris@87: defs.append(("NPY_NEEDS_MINGW_TIME_WORKAROUND", None)) Chris@87: Chris@87: libs = [] Chris@87: # Configure mtrand Chris@87: config.add_extension('mtrand', Chris@87: sources=[join('mtrand', x) for x in Chris@87: ['mtrand.c', 'randomkit.c', 'initarray.c', Chris@87: 'distributions.c']]+[generate_libraries], Chris@87: libraries=libs, Chris@87: depends=[join('mtrand', '*.h'), Chris@87: join('mtrand', '*.pyx'), Chris@87: join('mtrand', '*.pxi'),], Chris@87: define_macros=defs, Chris@87: ) Chris@87: Chris@87: config.add_data_files(('.', join('mtrand', 'randomkit.h'))) Chris@87: config.add_data_dir('tests') Chris@87: Chris@87: return config Chris@87: Chris@87: def testcode_wincrypt(): Chris@87: return """\ Chris@87: /* check to see if _WIN32 is defined */ Chris@87: int main(int argc, char *argv[]) Chris@87: { Chris@87: #ifdef _WIN32 Chris@87: return 0; Chris@87: #else Chris@87: return 1; Chris@87: #endif Chris@87: } Chris@87: """ Chris@87: Chris@87: if __name__ == '__main__': Chris@87: from numpy.distutils.core import setup Chris@87: setup(configuration=configuration)