diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2019-05-07 16:42:24 -0700 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2019-05-16 22:01:35 +0300 |
commit | 7f1cecf25b4e78df44dde1ed071088e50d7370a3 (patch) | |
tree | 51bbc15f2d79a24e54297de2843f0582cccec767 | |
parent | 67a5af99aa9060c9f4b2350a230343b11282cb8f (diff) | |
download | meson-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.py | 20 | ||||
-rw-r--r-- | test cases/fortran/1 basic/meson.build | 5 |
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) |