BUGFIX: allow fc.run(code) to work, pick only Fortran module

pull/4847/head
Michael Hirsch, Ph.D 6 years ago committed by Jussi Pakkanen
parent da34bea893
commit cccffaa29d
  1. 5
      mesonbuild/backend/ninjabackend.py
  2. 5
      mesonbuild/compilers/fortran.py
  3. 20
      test cases/fortran/11 compiles links runs/meson.build

@ -1826,7 +1826,7 @@ rule FORTRAN_DEP_HACK%s
if compiler is None:
self.fortran_deps[target.get_basename()] = {}
return
modre = re.compile(r"\s*module\s+(\w+)", re.IGNORECASE)
modre = re.compile(r"\bmodule\s+(\w+)\s*$", re.IGNORECASE)
module_files = {}
for s in target.get_sources():
# FIXME, does not work for Fortran sources generated by
@ -1843,9 +1843,6 @@ rule FORTRAN_DEP_HACK%s
modmatch = modre.match(line)
if modmatch is not None:
modname = modmatch.group(1).lower()
if modname == 'procedure':
# MODULE PROCEDURE construct
continue
if modname in module_files:
raise InvalidArguments(
'Namespace collision: module %s defined in '

@ -77,10 +77,7 @@ class FortranCompiler(Compiler):
source_name = os.path.join(work_dir, 'sanitycheckf.f90')
binary_name = os.path.join(work_dir, 'sanitycheckf')
with open(source_name, 'w') as ofile:
ofile.write('''program prog
print *, "Fortran compilation is working."
end program prog
''')
ofile.write('print *, "Fortran compilation is working."; end')
extra_flags = self.get_cross_extra_flags(environment, link=True)
pc = subprocess.Popen(self.exelist + extra_flags + [source_name, '-o', binary_name])
pc.wait()

@ -0,0 +1,20 @@
project('compiles_links_runs', 'fortran')
fc = meson.get_compiler('fortran')
code = '''error stop 123; end'''
if not fc.compiles(code)
error('Fortran 2008 code failed to compile')
endif
if not fc.links(code)
error('Fortran 2008 code failed to link')
endif
if fc.run(code).returncode() != 123
error('Fortran 2008 code failed to run')
endif
Loading…
Cancel
Save