diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-01-07 19:27:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-07 19:27:19 +0200 |
commit | 392b3d8bc774120a20595ed3faf135db53f850c2 (patch) | |
tree | a5c5a9d320d267372d0bc6e04b78d0f743a81e85 /mesonbuild/mesonlib.py | |
parent | 8ac6ab37562dea8a0bb1fb38be0814f9f9e83786 (diff) | |
parent | da44a93daa6ee0613122e85790e3c9f6c39abe8c (diff) | |
download | meson-392b3d8bc774120a20595ed3faf135db53f850c2.zip meson-392b3d8bc774120a20595ed3faf135db53f850c2.tar.gz meson-392b3d8bc774120a20595ed3faf135db53f850c2.tar.bz2 |
Merge pull request #2840 from alyst/fix_detect_location
Fix meson location detection from other meson tools
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r-- | mesonbuild/mesonlib.py | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 3b32996..de83e90 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 |