aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
diff options
context:
space:
mode:
authorJohn Ericson <git@JohnEricson.me>2018-10-05 11:40:45 -0400
committerJohn Ericson <git@JohnEricson.me>2018-10-05 23:31:16 -0400
commit68d0adf4d268e15a35a5ce706f7a31b127a7fba7 (patch)
treec6b44edbfd15b9c10a6eca46b5a863fa3a3efcec /mesonbuild/mesonlib.py
parent0b1fb51b66f9cccfbd645534434df65270fba606 (diff)
downloadmeson-68d0adf4d268e15a35a5ce706f7a31b127a7fba7.zip
meson-68d0adf4d268e15a35a5ce706f7a31b127a7fba7.tar.gz
meson-68d0adf4d268e15a35a5ce706f7a31b127a7fba7.tar.bz2
Rewrite `for_*` machine checks in terms of MachineInfo and phase out
It's much better to directly query the machine in question rather than do some roundabout "is_cross" thing. This is the first step for much natve- and cross- code path deduplication.
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r--mesonbuild/mesonlib.py62
1 files changed, 39 insertions, 23 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py
index 0094a92..ad6022f 100644
--- a/mesonbuild/mesonlib.py
+++ b/mesonbuild/mesonlib.py
@@ -358,77 +358,93 @@ def is_dragonflybsd():
def is_freebsd():
return platform.system().lower() == 'freebsd'
+def _get_machine_is_cross(env, is_cross):
+ """
+ This is not morally correct, but works for now. For cross builds the build
+ and host machines differ. `is_cross == true` means the host machine, while
+ `is_cross == false` means the build machine. Both are used in practice,
+ even though the documentation refers to the host machine implying we should
+ hard-code it. For non-cross builds `is_cross == false` is passed but the
+ host and build machines are identical so it doesn't matter.
+
+ Users for `for_*` should instead specify up front which machine they want
+ and query that like:
+
+ env.machines[MachineChoice.HOST].is_haiku()
+
+ """
+ for_machine = MachineChoice.HOST if is_cross else MachineChoice.BUILD
+ return env.machines[for_machine]
+
def for_windows(is_cross, env):
"""
Host machine is windows?
+ Deprecated: Please use `env.machines[for_machine].is_windows()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_windows()
- return env.cross_info.get_host_system() == 'windows'
+ return _get_machine_is_cross(env, is_cross).is_windows()
def for_cygwin(is_cross, env):
"""
Host machine is cygwin?
+ Deprecated: Please use `env.machines[for_machine].is_cygwin()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_cygwin()
- return env.cross_info.get_host_system() == 'cygwin'
+ return _get_machine_is_cross(env, is_cross).is_cygwin()
def for_linux(is_cross, env):
"""
Host machine is linux?
+ Deprecated: Please use `env.machines[for_machine].is_linux()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_linux()
- return env.cross_info.get_host_system() == 'linux'
+ return _get_machine_is_cross(env, is_cross).is_linux()
def for_darwin(is_cross, env):
"""
Host machine is Darwin (iOS/OS X)?
+ Deprecated: Please use `env.machines[for_machine].is_darwin()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_osx()
- return env.cross_info.get_host_system() in ('darwin', 'ios')
+ return _get_machine_is_cross(env, is_cross).is_darwin()
def for_android(is_cross, env):
"""
Host machine is Android?
+ Deprecated: Please use `env.machines[for_machine].is_android()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_android()
- return env.cross_info.get_host_system() == 'android'
+ return _get_machine_is_cross(env, is_cross).is_android()
def for_haiku(is_cross, env):
"""
Host machine is Haiku?
+ Deprecated: Please use `env.machines[for_machine].is_haiku()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_haiku()
- return env.cross_info.get_host_system() == 'haiku'
+ return _get_machine_is_cross(env, is_cross).is_haiku()
def for_openbsd(is_cross, env):
"""
Host machine is OpenBSD?
+ Deprecated: Please use `env.machines[for_machine].is_openbsd()`.
+
Note: 'host' is the machine on which compiled binaries will run
"""
- if not is_cross:
- return is_openbsd()
- elif env.cross_info.has_host():
- return env.cross_info.config['host_machine']['system'] == 'openbsd'
- return False
+ return _get_machine_is_cross(env, is_cross).is_openbsd()
def exe_exists(arglist):
try: