compilers/fortran: Fix all has_argument methods in meson
Apparently we have no tests for this because this is broken pretty badly. This extends the basic test to actually check for the correct free-form argument and thus test this.
This commit is contained in:
parent
67a5af99aa
commit
7f1cecf25b
|
@ -31,6 +31,7 @@ from .compilers import (
|
||||||
IntelVisualStudioLikeCompiler,
|
IntelVisualStudioLikeCompiler,
|
||||||
)
|
)
|
||||||
from .clike import CLikeCompiler
|
from .clike import CLikeCompiler
|
||||||
|
from .. import mlog
|
||||||
|
|
||||||
from mesonbuild.mesonlib import (
|
from mesonbuild.mesonlib import (
|
||||||
EnvironmentException, MachineChoice, is_osx, LibType
|
EnvironmentException, MachineChoice, is_osx, LibType
|
||||||
|
@ -145,6 +146,25 @@ class FortranCompiler(CLikeCompiler, Compiler):
|
||||||
end program main'''
|
end program main'''
|
||||||
return self.find_library_impl(libname, env, extra_dirs, code, libtype)
|
return self.find_library_impl(libname, env, extra_dirs, code, libtype)
|
||||||
|
|
||||||
|
def has_multi_arguments(self, args, env):
|
||||||
|
for arg in args[:]:
|
||||||
|
# some compilers, e.g. GCC, don't warn for unsupported warning-disable
|
||||||
|
# flags, so when we are testing a flag like "-Wno-forgotten-towel", also
|
||||||
|
# check the equivalent enable flag too "-Wforgotten-towel"
|
||||||
|
if arg.startswith('-Wno-'):
|
||||||
|
args.append('-W' + arg[5:])
|
||||||
|
if arg.startswith('-Wl,'):
|
||||||
|
mlog.warning('{} looks like a linker argument, '
|
||||||
|
'but has_argument and other similar methods only '
|
||||||
|
'support checking compiler arguments. Using them '
|
||||||
|
'to check linker arguments are never supported, '
|
||||||
|
'and results are likely to be wrong regardless of '
|
||||||
|
'the compiler you are using. has_link_argument or '
|
||||||
|
'other similar method can be used instead.'
|
||||||
|
.format(arg))
|
||||||
|
code = 'program main\ncall exit(0)\nend program main'
|
||||||
|
return self.has_arguments(args, env, code, mode='compile')
|
||||||
|
|
||||||
|
|
||||||
class GnuFortranCompiler(GnuCompiler, FortranCompiler):
|
class GnuFortranCompiler(GnuCompiler, FortranCompiler):
|
||||||
def __init__(self, exelist, version, compiler_type, is_cross, exe_wrapper=None, defines=None, **kwargs):
|
def __init__(self, exelist, version, compiler_type, is_cross, exe_wrapper=None, defines=None, **kwargs):
|
||||||
|
|
|
@ -5,6 +5,9 @@ if fc.get_id() == 'gcc'
|
||||||
add_global_arguments('-fbounds-check', language : 'fortran')
|
add_global_arguments('-fbounds-check', language : 'fortran')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
args = fc.first_supported_argument(['-ffree-form', '-free', '/free'])
|
||||||
|
assert(args != [], 'No arguments found?')
|
||||||
|
|
||||||
e = executable('simple', 'simple.f90',
|
e = executable('simple', 'simple.f90',
|
||||||
fortran_args : '-ffree-form')
|
fortran_args : args)
|
||||||
test('Simple Fortran', e)
|
test('Simple Fortran', e)
|
||||||
|
|
Loading…
Reference in New Issue