summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-01-07 19:27:19 +0200
committerGitHub <noreply@github.com>2018-01-07 19:27:19 +0200
commit392b3d8bc774120a20595ed3faf135db53f850c2 (patch)
treea5c5a9d320d267372d0bc6e04b78d0f743a81e85
parent8ac6ab37562dea8a0bb1fb38be0814f9f9e83786 (diff)
parentda44a93daa6ee0613122e85790e3c9f6c39abe8c (diff)
downloadmeson-392b3d8bc774120a20595ed3faf135db53f850c2.tar.gz
Merge pull request #2840 from alyst/fix_detect_location
Fix meson location detection from other meson tools
-rw-r--r--mesonbuild/mesonlib.py47
1 files changed, 29 insertions, 18 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py
index 3b3299637..de83e907d 100644
--- a/mesonbuild/mesonlib.py
+++ b/mesonbuild/mesonlib.py
@@ -25,29 +25,40 @@ from glob import glob
def detect_meson_py_location():
c = sys.argv[0]
- c_fname = os.path.split(c)[1]
- if c_fname == 'meson' or c_fname == 'meson.py':
- # $ /foo/meson.py <args>
- if os.path.isabs(c):
- return c
- # $ meson <args> (gets run from /usr/bin/meson)
+ c_dir, c_fname = os.path.split(c)
+
+ # get the absolute path to the <mesontool> folder
+ m_dir = None
+ if os.path.isabs(c):
+ # $ /foo/<mesontool>.py <args>
+ m_dir = c_dir
+ elif c_dir == '':
+ # $ <mesontool> <args> (gets run from /usr/bin/<mesontool>)
in_path_exe = shutil.which(c_fname)
if in_path_exe:
- # Special case: when run like "./meson.py <opts>" and user has
- # period in PATH, we need to expand it out, because, for example,
+ m_dir, c_fname = os.path.split(in_path_exe)
+ # Special case: when run like "./meson.py <opts>",
+ # we need to expand it out, because, for example,
# "ninja test" will be run from a different directory.
- if '.' in os.environ['PATH'].split(':'):
- p, f = os.path.split(in_path_exe)
- if p == '' or p == '.':
- return os.path.join(os.getcwd(), f)
- return in_path_exe
- # $ python3 ./meson.py <args>
- if os.path.exists(c):
- return os.path.join(os.getcwd(), c)
-
+ if m_dir == '.':
+ m_dir = os.getcwd()
+ else:
+ m_dir = os.path.abspath(c_dir)
+
+ # find meson in m_dir
+ if m_dir is not None:
+ for fname in ['meson', 'meson.py']:
+ m_path = os.path.join(m_dir, fname)
+ if os.path.exists(m_path):
+ return m_path
+
+ # No meson found, which means that either:
+ # a) meson is not installed
+ # b) meson is installed to a non-standard location
+ # c) the script that invoked mesonlib is not the one of meson tools (e.g. run_unittests.py)
# The only thing remaining is to try to find the bundled executable and
# pray distro packagers have not moved it.
- fname = os.path.join(os.path.dirname(__file__), '..', 'meson.py')
+ fname = os.path.normpath(os.path.join(os.path.dirname(__file__), '..', 'meson.py'))
if not os.path.exists(fname):
raise RuntimeError('Could not determine how to run Meson. Please file a bug with details.')
return fname