Chris@87: Chris@87: #http://www.compaq.com/fortran/docs/ Chris@87: from __future__ import division, absolute_import, print_function Chris@87: Chris@87: import os Chris@87: import sys Chris@87: Chris@87: from numpy.distutils.fcompiler import FCompiler Chris@87: from numpy.distutils.compat import get_exception Chris@87: from distutils.errors import DistutilsPlatformError Chris@87: Chris@87: compilers = ['CompaqFCompiler'] Chris@87: if os.name != 'posix' or sys.platform[:6] == 'cygwin' : Chris@87: # Otherwise we'd get a false positive on posix systems with Chris@87: # case-insensitive filesystems (like darwin), because we'll pick Chris@87: # up /bin/df Chris@87: compilers.append('CompaqVisualFCompiler') Chris@87: Chris@87: class CompaqFCompiler(FCompiler): Chris@87: Chris@87: compiler_type = 'compaq' Chris@87: description = 'Compaq Fortran Compiler' Chris@87: version_pattern = r'Compaq Fortran (?P[^\s]*).*' Chris@87: Chris@87: if sys.platform[:5]=='linux': Chris@87: fc_exe = 'fort' Chris@87: else: Chris@87: fc_exe = 'f90' Chris@87: Chris@87: executables = { Chris@87: 'version_cmd' : ['', "-version"], Chris@87: 'compiler_f77' : [fc_exe, "-f77rtl", "-fixed"], Chris@87: 'compiler_fix' : [fc_exe, "-fixed"], Chris@87: 'compiler_f90' : [fc_exe], Chris@87: 'linker_so' : [''], Chris@87: 'archiver' : ["ar", "-cr"], Chris@87: 'ranlib' : ["ranlib"] Chris@87: } Chris@87: Chris@87: module_dir_switch = '-module ' # not tested Chris@87: module_include_switch = '-I' Chris@87: Chris@87: def get_flags(self): Chris@87: return ['-assume no2underscore', '-nomixed_str_len_arg'] Chris@87: def get_flags_debug(self): Chris@87: return ['-g', '-check bounds'] Chris@87: def get_flags_opt(self): Chris@87: return ['-O4', '-align dcommons', '-assume bigarrays', Chris@87: '-assume nozsize', '-math_library fast'] Chris@87: def get_flags_arch(self): Chris@87: return ['-arch host', '-tune host'] Chris@87: def get_flags_linker_so(self): Chris@87: if sys.platform[:5]=='linux': Chris@87: return ['-shared'] Chris@87: return ['-shared', '-Wl,-expect_unresolved,*'] Chris@87: Chris@87: class CompaqVisualFCompiler(FCompiler): Chris@87: Chris@87: compiler_type = 'compaqv' Chris@87: description = 'DIGITAL or Compaq Visual Fortran Compiler' Chris@87: version_pattern = r'(DIGITAL|Compaq) Visual Fortran Optimizing Compiler'\ Chris@87: ' Version (?P[^\s]*).*' Chris@87: Chris@87: compile_switch = '/compile_only' Chris@87: object_switch = '/object:' Chris@87: library_switch = '/OUT:' #No space after /OUT:! Chris@87: Chris@87: static_lib_extension = ".lib" Chris@87: static_lib_format = "%s%s" Chris@87: module_dir_switch = '/module:' Chris@87: module_include_switch = '/I' Chris@87: Chris@87: ar_exe = 'lib.exe' Chris@87: fc_exe = 'DF' Chris@87: Chris@87: if sys.platform=='win32': Chris@87: from distutils.msvccompiler import MSVCCompiler Chris@87: Chris@87: try: Chris@87: m = MSVCCompiler() Chris@87: m.initialize() Chris@87: ar_exe = m.lib Chris@87: except DistutilsPlatformError: Chris@87: pass Chris@87: except AttributeError: Chris@87: msg = get_exception() Chris@87: if '_MSVCCompiler__root' in str(msg): Chris@87: print('Ignoring "%s" (I think it is msvccompiler.py bug)' % (msg)) Chris@87: else: Chris@87: raise Chris@87: except IOError: Chris@87: e = get_exception() Chris@87: if not "vcvarsall.bat" in str(e): Chris@87: print("Unexpected IOError in", __file__) Chris@87: raise e Chris@87: except ValueError: Chris@87: e = get_exception() Chris@87: if not "path']" in str(e): Chris@87: print("Unexpected ValueError in", __file__) Chris@87: raise e Chris@87: Chris@87: executables = { Chris@87: 'version_cmd' : ['', "/what"], Chris@87: 'compiler_f77' : [fc_exe, "/f77rtl", "/fixed"], Chris@87: 'compiler_fix' : [fc_exe, "/fixed"], Chris@87: 'compiler_f90' : [fc_exe], Chris@87: 'linker_so' : [''], Chris@87: 'archiver' : [ar_exe, "/OUT:"], Chris@87: 'ranlib' : None Chris@87: } Chris@87: Chris@87: def get_flags(self): Chris@87: return ['/nologo', '/MD', '/WX', '/iface=(cref,nomixed_str_len_arg)', Chris@87: '/names:lowercase', '/assume:underscore'] Chris@87: def get_flags_opt(self): Chris@87: return ['/Ox', '/fast', '/optimize:5', '/unroll:0', '/math_library:fast'] Chris@87: def get_flags_arch(self): Chris@87: return ['/threads'] Chris@87: def get_flags_debug(self): Chris@87: return ['/debug'] Chris@87: Chris@87: if __name__ == '__main__': Chris@87: from distutils import log Chris@87: log.set_verbosity(2) Chris@87: from numpy.distutils.fcompiler import new_fcompiler Chris@87: compiler = new_fcompiler(compiler='compaq') Chris@87: compiler.customize() Chris@87: print(compiler.get_version())