|
|
|
|
|
import os |
|
import sys |
|
|
|
from numpy.distutils.fcompiler import FCompiler |
|
from distutils.errors import DistutilsPlatformError |
|
|
|
compilers = ['CompaqFCompiler'] |
|
if os.name != 'posix' or sys.platform[:6] == 'cygwin' : |
|
|
|
|
|
|
|
compilers.append('CompaqVisualFCompiler') |
|
|
|
class CompaqFCompiler(FCompiler): |
|
|
|
compiler_type = 'compaq' |
|
description = 'Compaq Fortran Compiler' |
|
version_pattern = r'Compaq Fortran (?P<version>[^\s]*).*' |
|
|
|
if sys.platform[:5]=='linux': |
|
fc_exe = 'fort' |
|
else: |
|
fc_exe = 'f90' |
|
|
|
executables = { |
|
'version_cmd' : ['<F90>', "-version"], |
|
'compiler_f77' : [fc_exe, "-f77rtl", "-fixed"], |
|
'compiler_fix' : [fc_exe, "-fixed"], |
|
'compiler_f90' : [fc_exe], |
|
'linker_so' : ['<F90>'], |
|
'archiver' : ["ar", "-cr"], |
|
'ranlib' : ["ranlib"] |
|
} |
|
|
|
module_dir_switch = '-module ' |
|
module_include_switch = '-I' |
|
|
|
def get_flags(self): |
|
return ['-assume no2underscore', '-nomixed_str_len_arg'] |
|
def get_flags_debug(self): |
|
return ['-g', '-check bounds'] |
|
def get_flags_opt(self): |
|
return ['-O4', '-align dcommons', '-assume bigarrays', |
|
'-assume nozsize', '-math_library fast'] |
|
def get_flags_arch(self): |
|
return ['-arch host', '-tune host'] |
|
def get_flags_linker_so(self): |
|
if sys.platform[:5]=='linux': |
|
return ['-shared'] |
|
return ['-shared', '-Wl,-expect_unresolved,*'] |
|
|
|
class CompaqVisualFCompiler(FCompiler): |
|
|
|
compiler_type = 'compaqv' |
|
description = 'DIGITAL or Compaq Visual Fortran Compiler' |
|
version_pattern = (r'(DIGITAL|Compaq) Visual Fortran Optimizing Compiler' |
|
r' Version (?P<version>[^\s]*).*') |
|
|
|
compile_switch = '/compile_only' |
|
object_switch = '/object:' |
|
library_switch = '/OUT:' |
|
|
|
static_lib_extension = ".lib" |
|
static_lib_format = "%s%s" |
|
module_dir_switch = '/module:' |
|
module_include_switch = '/I' |
|
|
|
ar_exe = 'lib.exe' |
|
fc_exe = 'DF' |
|
|
|
if sys.platform=='win32': |
|
from numpy.distutils.msvccompiler import MSVCCompiler |
|
|
|
try: |
|
m = MSVCCompiler() |
|
m.initialize() |
|
ar_exe = m.lib |
|
except DistutilsPlatformError: |
|
pass |
|
except AttributeError as e: |
|
if '_MSVCCompiler__root' in str(e): |
|
print('Ignoring "%s" (I think it is msvccompiler.py bug)' % (e)) |
|
else: |
|
raise |
|
except OSError as e: |
|
if not "vcvarsall.bat" in str(e): |
|
print("Unexpected OSError in", __file__) |
|
raise |
|
except ValueError as e: |
|
if not "'path'" in str(e): |
|
print("Unexpected ValueError in", __file__) |
|
raise |
|
|
|
executables = { |
|
'version_cmd' : ['<F90>', "/what"], |
|
'compiler_f77' : [fc_exe, "/f77rtl", "/fixed"], |
|
'compiler_fix' : [fc_exe, "/fixed"], |
|
'compiler_f90' : [fc_exe], |
|
'linker_so' : ['<F90>'], |
|
'archiver' : [ar_exe, "/OUT:"], |
|
'ranlib' : None |
|
} |
|
|
|
def get_flags(self): |
|
return ['/nologo', '/MD', '/WX', '/iface=(cref,nomixed_str_len_arg)', |
|
'/names:lowercase', '/assume:underscore'] |
|
def get_flags_opt(self): |
|
return ['/Ox', '/fast', '/optimize:5', '/unroll:0', '/math_library:fast'] |
|
def get_flags_arch(self): |
|
return ['/threads'] |
|
def get_flags_debug(self): |
|
return ['/debug'] |
|
|
|
if __name__ == '__main__': |
|
from distutils import log |
|
log.set_verbosity(2) |
|
from numpy.distutils import customized_fcompiler |
|
print(customized_fcompiler(compiler='compaq').get_version()) |
|
|