summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-11-13 16:05:00 -0500
committerMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2020-02-05 13:23:55 -0500
commit554d35c3f3eb8710d1a265dccd173cbf653258bf (patch)
tree3fcedb2bf48c32aecb2360e3b1e1980839199f79
parent6c963726cf7b9781fed55fd4ba41f81bca2d4dbb (diff)
downloadmeson-554d35c3f3eb8710d1a265dccd173cbf653258bf.tar.gz
add get_external_property to replace get_cross_property
-rw-r--r--docs/markdown/Reference-manual.md19
-rw-r--r--docs/markdown/snippets/native_property.md8
-rw-r--r--mesonbuild/interpreter.py43
-rw-r--r--test cases/common/192 args flattening/meson.build10
-rw-r--r--test cases/common/228 native prop/meson.build10
-rw-r--r--test cases/common/229 native prop/meson.build24
-rw-r--r--test cases/common/229 native prop/nativefile.ini (renamed from test cases/common/228 native prop/nativefile.ini)0
-rw-r--r--test cases/failing/97 no native prop/meson.build3
-rw-r--r--test cases/failing/99 no native prop/meson.build3
9 files changed, 81 insertions, 39 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md
index 690ae0b3d..4e5903074 100644
--- a/docs/markdown/Reference-manual.md
+++ b/docs/markdown/Reference-manual.md
@@ -1773,10 +1773,6 @@ the following methods.
refer to files in the current or any other source directory instead
of constructing paths manually with `meson.current_source_dir()`.
-- `get_cross_property(propname, fallback_value)` returns the given
- property from a cross file, the optional second argument is returned
- if not cross compiling or the given property is not found.
-
- `get_compiler(language)` returns [an object describing a
compiler](#compiler-object), takes one positional argument which is
the language to use. It also accepts one keyword argument, `native`
@@ -1786,9 +1782,18 @@ the following methods.
returns the "cross" compiler if we're currently cross-compiling and
the "native" compiler if we're not.
-- `get_native_property(propname, fallback_value)` returns the given
- property from a native file, the optional second argument is returned
- if the given property is not found.
+- `get_cross_property(propname, fallback_value)`
+ *Consider get_external_property() instead*. Returns the given
+ property from a cross file, the optional fallback_value is returned
+ if not cross compiling or the given property is not found.
+
+- `get_external_property(propname, fallback_value, native: true/false)`
+ *(added 0.53.0)* returns the given property from a native or cross file.
+ The optional fallback_value is returned if the given property is not found.
+ The optional `native: true` forces retrieving a variable from the
+ native file, even when cross-compiling.
+ If `native: false` or not specified, variable is retrieved from the
+ cross-file if cross-compiling, and from the native-file when not cross-compiling.
- `has_exe_wrapper()` returns true when doing a cross build if there
is a wrapper command that can be used to execute cross built
diff --git a/docs/markdown/snippets/native_property.md b/docs/markdown/snippets/native_property.md
index 6c49e8040..3845fa1b6 100644
--- a/docs/markdown/snippets/native_property.md
+++ b/docs/markdown/snippets/native_property.md
@@ -1,6 +1,6 @@
## Native file properties
-As of Meson 0.53.0, the `--native-file foo.txt` can contain:
+As of Meson 0.53.0, the `--native-file nativefile.ini` can contain:
* binaries
* paths
@@ -10,7 +10,9 @@ which are defined and used the same way as in cross files.
The `properties` are new for Meson 0.53.0, and are read like:
```meson
-x = meson.get_native_property('foobar', 'foo')
+x = meson.get_external_property('foobar', 'foo')
```
-where `foobar` is the property name, and the optional `foo` is the fallback string value. \ No newline at end of file
+where `foobar` is the property name, and the optional `foo` is the fallback string value.
+
+For cross-compiled projects, `get_external_property()` reads the cross-file unless `native: true` is specified. \ No newline at end of file
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 5e58b0e08..df23b87c0 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -35,8 +35,11 @@ from .modules import ModuleReturnValue
from .cmake import CMakeInterpreter
from pathlib import Path, PurePath
-import os, shutil, uuid
-import re, shlex
+import os
+import shutil
+import uuid
+import re
+import shlex
import subprocess
import collections
from itertools import chain
@@ -1845,7 +1848,7 @@ class MesonMain(InterpreterObject):
'version': self.version_method,
'project_name': self.project_name_method,
'get_cross_property': self.get_cross_property_method,
- 'get_native_property': self.get_native_property_method,
+ 'get_external_property': self.get_external_property_method,
'backend': self.backend_method,
})
@@ -2018,7 +2021,7 @@ class MesonMain(InterpreterObject):
@noArgsFlattening
@permittedKwargs({})
- def get_cross_property_method(self, args, kwargs):
+ def get_cross_property_method(self, args, kwargs) -> str:
if len(args) < 1 or len(args) > 2:
raise InterpreterException('Must have one or two arguments.')
propname = args[0]
@@ -2033,21 +2036,33 @@ class MesonMain(InterpreterObject):
raise InterpreterException('Unknown cross property: %s.' % propname)
@noArgsFlattening
- @permittedKwargs({})
- def get_native_property_method(self, args, kwargs):
+ @permittedKwargs({'native'})
+ @FeatureNew('meson.get_external_property', '0.53.0')
+ def get_external_property_method(self, args: Sequence[str], kwargs: dict) -> str:
if len(args) < 1 or len(args) > 2:
- raise InterpreterException('Must have one or two arguments.')
+ raise InterpreterException('Must have one or two positional arguments.')
propname = args[0]
if not isinstance(propname, str):
raise InterpreterException('Property name must be string.')
- try:
- props = self.interpreter.environment.properties.build
- return props[propname]
- except Exception:
- if len(args) == 2:
- return args[1]
- raise InterpreterException('Unknown native property: %s.' % propname)
+ def _get_native() -> str:
+ try:
+ props = self.interpreter.environment.properties.build
+ return props[propname]
+ except Exception:
+ if len(args) == 2:
+ return args[1]
+ raise InterpreterException('Unknown native property: %s.' % propname)
+ if 'native' in kwargs:
+ if kwargs['native']:
+ return _get_native()
+ else:
+ return self.get_cross_property_method(args, {})
+ else: # native: not specified
+ if self.build.environment.is_cross_build():
+ return self.get_cross_property_method(args, kwargs)
+ else:
+ return _get_native()
known_library_kwargs = (
build.known_shlib_kwargs |
diff --git a/test cases/common/192 args flattening/meson.build b/test cases/common/192 args flattening/meson.build
index 42eb6d536..1dac2f912 100644
--- a/test cases/common/192 args flattening/meson.build
+++ b/test cases/common/192 args flattening/meson.build
@@ -16,8 +16,14 @@ assert(arr == ['bar', 'baz'], 'configuration_data.get with array fallback is bro
arr = meson.get_cross_property('does-not-exist', ['bar', 'baz'])
assert(arr == ['bar', 'baz'], 'meson.get_cross_property with array fallback is broken')
-arr = meson.get_native_property('does-not-exist', ['bar', 'baz'])
-assert(arr == ['bar', 'baz'], 'meson.get_native_property with array fallback is broken')
+arr = meson.get_external_property('does-not-exist', ['bar', 'baz'])
+assert(arr == ['bar', 'baz'], 'meson.get_external_property with array fallback is broken')
+
+arr = meson.get_external_property('does-not-exist', ['bar', 'baz'], native: true)
+assert(arr == ['bar', 'baz'], 'meson.get_external_property native:true with array fallback is broken')
+
+arr = meson.get_external_property('does-not-exist', ['bar', 'baz'], native: false)
+assert(arr == ['bar', 'baz'], 'meson.get_external_property native:false with array fallback is broken')
# Test deprecated behaviour
diff --git a/test cases/common/228 native prop/meson.build b/test cases/common/228 native prop/meson.build
deleted file mode 100644
index 5cffcad52..000000000
--- a/test cases/common/228 native prop/meson.build
+++ /dev/null
@@ -1,10 +0,0 @@
-project('get native prop')
-
-x = meson.get_native_property('astring')
-assert(x=='mystring', 'did not get native property string. did you use "meson setup --native-file native.txt"')
-
-x = meson.get_native_property('notexist', 'fallback')
-assert(x=='fallback', 'fallback did not work')
-
-x = meson.get_native_property('anarray')
-assert(x==['one', 'two'], 'array did not work') \ No newline at end of file
diff --git a/test cases/common/229 native prop/meson.build b/test cases/common/229 native prop/meson.build
new file mode 100644
index 000000000..f752bcc0a
--- /dev/null
+++ b/test cases/common/229 native prop/meson.build
@@ -0,0 +1,24 @@
+project('get prop')
+
+x = meson.get_external_property('astring')
+assert(x=='mystring', 'did not get native property string. did you use "meson setup --native-file native.txt"')
+
+x = meson.get_external_property('astring', native: true)
+assert(x=='mystring', 'did not get native property with native:true and non-cross build.')
+
+x = meson.get_external_property('astring', 'fallback', native: false)
+assert(x=='mystring', 'did not get get native property with native:false and non-cross build.')
+
+
+x = meson.get_external_property('notexist', 'fallback')
+assert(x=='fallback', 'fallback did not work')
+
+x = meson.get_external_property('notexist', 'fallback', native: true)
+assert(x=='fallback', 'fallback native:true did not work')
+
+x = meson.get_external_property('notexist', 'fallback', native: false)
+assert(x=='fallback', 'fallback native:false did not work')
+
+
+x = meson.get_external_property('anarray')
+assert(x==['one', 'two'], 'array did not work') \ No newline at end of file
diff --git a/test cases/common/228 native prop/nativefile.ini b/test cases/common/229 native prop/nativefile.ini
index 03c1e0397..03c1e0397 100644
--- a/test cases/common/228 native prop/nativefile.ini
+++ b/test cases/common/229 native prop/nativefile.ini
diff --git a/test cases/failing/97 no native prop/meson.build b/test cases/failing/97 no native prop/meson.build
deleted file mode 100644
index 2b7b46e5b..000000000
--- a/test cases/failing/97 no native prop/meson.build
+++ /dev/null
@@ -1,3 +0,0 @@
-project('missing native property')
-
-message(meson.get_native_property('nonexisting'))
diff --git a/test cases/failing/99 no native prop/meson.build b/test cases/failing/99 no native prop/meson.build
new file mode 100644
index 000000000..c9567549f
--- /dev/null
+++ b/test cases/failing/99 no native prop/meson.build
@@ -0,0 +1,3 @@
+project('missing property')
+
+message(meson.get_external_property('nonexisting'))