aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2019-05-07 16:42:24 -0700
committerJussi Pakkanen <jpakkane@gmail.com>2019-05-16 22:01:35 +0300
commit7f1cecf25b4e78df44dde1ed071088e50d7370a3 (patch)
tree51bbc15f2d79a24e54297de2843f0582cccec767
parent67a5af99aa9060c9f4b2350a230343b11282cb8f (diff)
downloadmeson-7f1cecf25b4e78df44dde1ed071088e50d7370a3.zip
meson-7f1cecf25b4e78df44dde1ed071088e50d7370a3.tar.gz
meson-7f1cecf25b4e78df44dde1ed071088e50d7370a3.tar.bz2
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.
-rw-r--r--mesonbuild/compilers/fortran.py20
-rw-r--r--test cases/fortran/1 basic/meson.build5
2 files changed, 24 insertions, 1 deletions
diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py
index 06e01d0..5de1de4 100644
--- a/mesonbuild/compilers/fortran.py
+++ b/mesonbuild/compilers/fortran.py
@@ -31,6 +31,7 @@ from .compilers import (
IntelVisualStudioLikeCompiler,
)
from .clike import CLikeCompiler
+from .. import mlog
from mesonbuild.mesonlib import (
EnvironmentException, MachineChoice, is_osx, LibType
@@ -145,6 +146,25 @@ class FortranCompiler(CLikeCompiler, Compiler):
end program main'''
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):
def __init__(self, exelist, version, compiler_type, is_cross, exe_wrapper=None, defines=None, **kwargs):
diff --git a/test cases/fortran/1 basic/meson.build b/test cases/fortran/1 basic/meson.build
index 959ad35..52e2d6f 100644
--- a/test cases/fortran/1 basic/meson.build
+++ b/test cases/fortran/1 basic/meson.build
@@ -5,6 +5,9 @@ if fc.get_id() == 'gcc'
add_global_arguments('-fbounds-check', language : 'fortran')
endif
+args = fc.first_supported_argument(['-ffree-form', '-free', '/free'])
+assert(args != [], 'No arguments found?')
+
e = executable('simple', 'simple.f90',
- fortran_args : '-ffree-form')
+ fortran_args : args)
test('Simple Fortran', e)