aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py2
-rw-r--r--mesonbuild/compilers/c.py2
-rw-r--r--mesonbuild/compilers/compilers.py3
-rw-r--r--mesonbuild/compilers/cpp.py3
-rw-r--r--mesonbuild/compilers/cs.py3
-rw-r--r--mesonbuild/compilers/objc.py3
-rw-r--r--mesonbuild/compilers/objcpp.py3
-rw-r--r--mesonbuild/environment.py8
-rw-r--r--mesonbuild/interpreter.py13
-rw-r--r--mesonbuild/mparser.py7
-rw-r--r--test cases/failing/57 or on new line/meson.build7
-rw-r--r--test cases/failing/57 or on new line/meson_options.txt1
12 files changed, 42 insertions, 13 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 0c3525c..e8090e7 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1606,7 +1606,7 @@ rule FORTRAN_DEP_HACK
output_args=' '.join(compiler.get_output_args('$out')),
compile_only_args=' '.join(compiler.get_compile_only_args())
)
- description = ' description = Compiling %s object $out.\n' % langname.title()
+ description = ' description = Compiling %s object $out.\n' % compiler.get_display_language()
if compiler.get_id() == 'msvc':
deps = ' deps = msvc\n'
else:
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index c164ccd..cf9d1ee 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -179,7 +179,7 @@ class CCompiler(Compiler):
return ['-Wl,--out-implib=' + implibname]
def sanity_check_impl(self, work_dir, environment, sname, code):
- mlog.debug('Sanity testing ' + self.language + ' compiler:', ' '.join(self.exelist))
+ mlog.debug('Sanity testing ' + self.get_display_language() + ' compiler:', ' '.join(self.exelist))
mlog.debug('Is cross compiler: %s.' % str(self.is_cross))
extra_flags = []
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 3d54986..2321093 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -584,6 +584,9 @@ class Compiler:
def get_language(self):
return self.language
+ def get_display_language(self):
+ return self.language.capitalize()
+
def get_default_suffix(self):
return self.default_suffix
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index 6d50e57..01525b0 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -32,6 +32,9 @@ class CPPCompiler(CCompiler):
self.language = 'cpp'
CCompiler.__init__(self, exelist, version, is_cross, exe_wrap)
+ def get_display_language(self):
+ return 'C++'
+
def get_no_stdinc_args(self):
return ['-nostdinc++']
diff --git a/mesonbuild/compilers/cs.py b/mesonbuild/compilers/cs.py
index c65a539..4f6fec1 100644
--- a/mesonbuild/compilers/cs.py
+++ b/mesonbuild/compilers/cs.py
@@ -25,6 +25,9 @@ class MonoCompiler(Compiler):
self.id = 'mono'
self.monorunner = 'mono'
+ def get_display_language(self):
+ return 'C#'
+
def get_output_args(self, fname):
return ['-out:' + fname]
diff --git a/mesonbuild/compilers/objc.py b/mesonbuild/compilers/objc.py
index b011c81..388e83b 100644
--- a/mesonbuild/compilers/objc.py
+++ b/mesonbuild/compilers/objc.py
@@ -24,6 +24,9 @@ class ObjCCompiler(CCompiler):
self.language = 'objc'
CCompiler.__init__(self, exelist, version, is_cross, exe_wrap)
+ def get_display_language(self):
+ return 'Objective-C'
+
def sanity_check(self, work_dir, environment):
# TODO try to use sanity_check_impl instead of duplicated code
source_name = os.path.join(work_dir, 'sanitycheckobjc.m')
diff --git a/mesonbuild/compilers/objcpp.py b/mesonbuild/compilers/objcpp.py
index b181f9a..c2e4647 100644
--- a/mesonbuild/compilers/objcpp.py
+++ b/mesonbuild/compilers/objcpp.py
@@ -24,6 +24,9 @@ class ObjCPPCompiler(CPPCompiler):
self.language = 'objcpp'
CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap)
+ def get_display_language(self):
+ return 'Objective-C++'
+
def sanity_check(self, work_dir, environment):
# TODO try to use sanity_check_impl instead of duplicated code
source_name = os.path.join(work_dir, 'sanitycheckobjcpp.mm')
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 3be068a..1e4e04b 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -514,7 +514,7 @@ class Environment:
if 'Free Software Foundation' in out:
defines = self.get_gnu_compiler_defines(compiler)
if not defines:
- popen_exceptions[compiler] = 'no pre-processor defines'
+ popen_exceptions[' '.join(compiler)] = 'no pre-processor defines'
continue
gtype = self.get_gnu_compiler_type(defines)
version = self.get_gnu_version_from_defines(defines)
@@ -566,7 +566,7 @@ class Environment:
if 'GNU Fortran' in out:
defines = self.get_gnu_compiler_defines(compiler)
if not defines:
- popen_exceptions[compiler] = 'no pre-processor defines'
+ popen_exceptions[' '.join(compiler)] = 'no pre-processor defines'
continue
gtype = self.get_gnu_compiler_type(defines)
version = self.get_gnu_version_from_defines(defines)
@@ -617,7 +617,7 @@ class Environment:
if 'Free Software Foundation' in out:
defines = self.get_gnu_compiler_defines(compiler)
if not defines:
- popen_exceptions[compiler] = 'no pre-processor defines'
+ popen_exceptions[' '.join(compiler)] = 'no pre-processor defines'
continue
gtype = self.get_gnu_compiler_type(defines)
version = self.get_gnu_version_from_defines(defines)
@@ -643,7 +643,7 @@ class Environment:
if 'Free Software Foundation' in out:
defines = self.get_gnu_compiler_defines(compiler)
if not defines:
- popen_exceptions[compiler] = 'no pre-processor defines'
+ popen_exceptions[' '.join(compiler)] = 'no pre-processor defines'
continue
gtype = self.get_gnu_compiler_type(defines)
version = self.get_gnu_version_from_defines(defines)
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index f7df18a..916529f 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -740,7 +740,7 @@ class CompilerHolder(InterpreterObject):
def unittest_args_method(self, args, kwargs):
# At time, only D compilers have this feature.
if not hasattr(self.compiler, 'get_unittest_args'):
- raise InterpreterException('This {} compiler has no unittest arguments.'.format(self.compiler.language))
+ raise InterpreterException('This {} compiler has no unittest arguments.'.format(self.compiler.get_display_language()))
return self.compiler.get_unittest_args()
def has_member_method(self, args, kwargs):
@@ -970,8 +970,7 @@ class CompilerHolder(InterpreterObject):
raise InvalidCode('Search directory %s is not an absolute path.' % i)
linkargs = self.compiler.find_library(libname, self.environment, search_dirs)
if required and not linkargs:
- l = self.compiler.language.capitalize()
- raise InterpreterException('{} library {!r} not found'.format(l, libname))
+ raise InterpreterException('{} library {!r} not found'.format(self.compiler.get_display_language(), libname))
lib = dependencies.ExternalLibrary(libname, linkargs, self.environment,
self.compiler.language)
return ExternalLibraryHolder(lib)
@@ -985,7 +984,7 @@ class CompilerHolder(InterpreterObject):
h = mlog.green('YES')
else:
h = mlog.red('NO')
- mlog.log('Compiler for {} supports argument {}:'.format(self.compiler.language, args[0]), h)
+ mlog.log('Compiler for {} supports argument {}:'.format(self.compiler.get_display_language(), args[0]), h)
return result
def has_multi_arguments_method(self, args, kwargs):
@@ -997,7 +996,7 @@ class CompilerHolder(InterpreterObject):
h = mlog.red('NO')
mlog.log(
'Compiler for {} supports arguments {}:'.format(
- self.compiler.language, ' '.join(args)),
+ self.compiler.get_display_language(), ' '.join(args)),
h)
return result
@@ -1887,7 +1886,7 @@ class Interpreter(InterpreterBase):
continue
else:
raise
- mlog.log('Native %s compiler: ' % lang, mlog.bold(' '.join(comp.get_exelist())), ' (%s %s)' % (comp.id, comp.version), sep='')
+ mlog.log('Native %s compiler: ' % comp.get_display_language(), mlog.bold(' '.join(comp.get_exelist())), ' (%s %s)' % (comp.id, comp.version), sep='')
if not comp.get_language() in self.coredata.external_args:
(preproc_args, compile_args, link_args) = environment.get_args_from_envvars(comp)
self.coredata.external_preprocess_args[comp.get_language()] = preproc_args
@@ -1895,7 +1894,7 @@ class Interpreter(InterpreterBase):
self.coredata.external_link_args[comp.get_language()] = link_args
self.build.add_compiler(comp)
if need_cross_compiler:
- mlog.log('Cross %s compiler: ' % lang, mlog.bold(' '.join(cross_comp.get_exelist())), ' (%s %s)' % (cross_comp.id, cross_comp.version), sep='')
+ mlog.log('Cross %s compiler: ' % cross_comp.get_display_language(), mlog.bold(' '.join(cross_comp.get_exelist())), ' (%s %s)' % (cross_comp.id, cross_comp.version), sep='')
self.build.add_cross_compiler(cross_comp)
if self.environment.is_cross_build() and not need_cross_compiler:
self.build.add_cross_compiler(comp)
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py
index 75985c3..8400a1a 100644
--- a/mesonbuild/mparser.py
+++ b/mesonbuild/mparser.py
@@ -475,12 +475,18 @@ class Parser:
def e2(self):
left = self.e3()
while self.accept('or'):
+ if isinstance(left, EmptyNode):
+ raise ParseException('Invalid or clause.',
+ self.getline(), left.lineno, left.colno)
left = OrNode(left, self.e3())
return left
def e3(self):
left = self.e4()
while self.accept('and'):
+ if isinstance(left, EmptyNode):
+ raise ParseException('Invalid and clause.',
+ self.getline(), left.lineno, left.colno)
left = AndNode(left, self.e4())
return left
@@ -633,6 +639,7 @@ class Parser:
def ifblock(self):
condition = self.statement()
clause = IfClauseNode(condition.lineno, condition.colno)
+ self.expect('eol')
block = self.codeblock()
clause.ifs.append(IfNode(clause.lineno, clause.colno, condition, block))
self.elseifblock(clause)
diff --git a/test cases/failing/57 or on new line/meson.build b/test cases/failing/57 or on new line/meson.build
new file mode 100644
index 0000000..12f2705
--- /dev/null
+++ b/test cases/failing/57 or on new line/meson.build
@@ -0,0 +1,7 @@
+project('silent_or', 'c')
+
+if get_option('foo') == 'true'
+ or get_option('foo') == 'auto'
+else
+ message('If this message is printed then something is wrong. The or above should give a syntax error.')
+endif
diff --git a/test cases/failing/57 or on new line/meson_options.txt b/test cases/failing/57 or on new line/meson_options.txt
new file mode 100644
index 0000000..3302cf4
--- /dev/null
+++ b/test cases/failing/57 or on new line/meson_options.txt
@@ -0,0 +1 @@
+option('foo', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto')