123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #http://www.compaq.com/fortran/docs/
- 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' :
- # Otherwise we'd get a false positive on posix systems with
- # case-insensitive filesystems (like darwin), because we'll pick
- # up /bin/df
- 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 ' # not tested
- 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:' #No space after /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 IOError as e:
- if not "vcvarsall.bat" in str(e):
- print("Unexpected IOError 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())
|