Skip to content

Commit 36d6fc4

Browse files
committed
Fortran compiler fixes from Peter Koval.
1 parent d79b8a1 commit 36d6fc4

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

environment.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,7 @@ def needs_static_linker(self):
11591159
return True
11601160

11611161
def sanity_check(self, work_dir):
1162-
source_name = os.path.join(work_dir, 'sanitycheckf.f95')
1162+
source_name = os.path.join(work_dir, 'sanitycheckf.f90')
11631163
binary_name = os.path.join(work_dir, 'sanitycheckf')
11641164
ofile = open(source_name, 'w')
11651165
ofile.write('''program prog
@@ -1190,7 +1190,7 @@ def get_linker_always_args(self):
11901190
return []
11911191

11921192
def get_std_warn_args(self):
1193-
return GnuFortranCompiler.std_warn_args
1193+
return FortranCompiler.std_warn_args
11941194

11951195
def get_buildtype_args(self, buildtype):
11961196
return gnulike_buildtype_args[buildtype]
@@ -1257,6 +1257,9 @@ def __init__(self, exelist, version, is_cross, exe_wrapper=None):
12571257
super().__init__(exelist, version, is_cross, exe_wrapper=None)
12581258
self.id = 'g95'
12591259

1260+
def get_module_outdir_args(self, path):
1261+
return ['-fmod='+path]
1262+
12601263
class SunFortranCompiler(FortranCompiler):
12611264
def __init__(self, exelist, version, is_cross, exe_wrapper=None):
12621265
super().__init__(exelist, version, is_cross, exe_wrapper=None)
@@ -1266,7 +1269,35 @@ def get_dependency_gen_args(self, outtarget, outfile):
12661269
return ['-fpp']
12671270

12681271
def get_always_args(self):
1269-
return ['']
1272+
return []
1273+
1274+
def get_std_warn_args(self):
1275+
return []
1276+
1277+
def get_module_outdir_args(self, path):
1278+
return ['-moddir='+path]
1279+
1280+
class IntelFortranCompiler(FortranCompiler):
1281+
std_warn_args = ['-warn', 'all']
1282+
1283+
def __init__(self, exelist, version, is_cross, exe_wrapper=None):
1284+
super().__init__(exelist, version, is_cross, exe_wrapper=None)
1285+
self.id = 'intel'
1286+
1287+
def get_module_outdir_args(self, path):
1288+
return ['-module', path]
1289+
1290+
def get_always_args(self):
1291+
return []
1292+
1293+
def can_compile(self, src):
1294+
suffix = os.path.splitext(src)[1].lower()
1295+
if suffix == '.f' or suffix == '.f90':
1296+
return True
1297+
return False
1298+
1299+
def get_std_warn_args(self):
1300+
return IntelFortranCompiler.std_warn_args
12701301

12711302
class VisualStudioLinker():
12721303
always_args = ['/NOLOGO']
@@ -1580,6 +1611,9 @@ def detect_fortran_compiler(self, want_cross):
15801611
version = vmatch.group(0)
15811612
return SunFortranCompiler([compiler], version, is_cross, exe_wrap)
15821613

1614+
if 'ifort (IFORT)' in out:
1615+
return IntelFortranCompiler([compiler], version, is_cross, exe_wrap)
1616+
15831617
raise EnvironmentException('Unknown compiler(s): "' + ', '.join(compilers) + '"')
15841618

15851619
def get_scratch_dir(self):

0 commit comments

Comments
 (0)