diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md index d8a8d1192..57e2bc1e4 100644 --- a/docs/markdown/Reference-manual.md +++ b/docs/markdown/Reference-manual.md @@ -1691,14 +1691,17 @@ The `meson` object allows you to introspect various properties of the system. This object is always mapped in the `meson` variable. It has the following methods. -- `add_dist_script(script_name, arg1, arg, ...)` causes the script given as argument to run during - `dist` operation after the distribution source has been generated - but before it is archived. Note that this runs the script file that - is in the _staging_ directory, not the one in the source - directory. If the script file can not be found in the staging - directory, it is a hard error. This command can only invoked from - the main project, calling it from a subproject is a hard - error. Available since 0.48.0. Before 0.49.0, the function only accepted a single argument. +- `add_dist_script(script_name, arg1, arg, ...)` causes the script + given as argument to run during `dist` operation after the + distribution source has been generated but before it is + archived. Note that this runs the script file that is in the + _staging_ directory, not the one in the source directory. If the + script file can not be found in the staging directory, it is a hard + error. This command can only invoked from the main project, calling + it from a subproject is a hard error. Available since 0.48.0. Before + 0.49.0, the function only accepted a single argument. Since 0.54.0 + the `MESON_SOURCE_ROOT` and `MESON_BUILD_ROOT` environment variables + are set when dist scripts are run. - `add_install_script(script_name, arg1, arg2, ...)` causes the script given as an argument to be run during the install step, this script diff --git a/mesonbuild/mdist.py b/mesonbuild/mdist.py index 3cfb39aef..a86cd43ef 100644 --- a/mesonbuild/mdist.py +++ b/mesonbuild/mdist.py @@ -73,10 +73,12 @@ def process_submodules(dirname): del_gitfiles(os.path.join(dirname, v)) -def run_dist_scripts(dist_root, dist_scripts): +def run_dist_scripts(src_root, bld_root, dist_root, dist_scripts): assert(os.path.isabs(dist_root)) env = os.environ.copy() env['MESON_DIST_ROOT'] = dist_root + env['MESON_SOURCE_ROOT'] = src_root + env['MESON_BUILD_ROOT'] = bld_root for d in dist_scripts: script = d['exe'] args = d['args'] @@ -121,7 +123,7 @@ def create_dist_git(dist_name, archives, src_root, bld_root, dist_sub, dist_scri git_clone(sub_src_root, sub_distdir) else: shutil.copytree(sub_src_root, sub_distdir) - run_dist_scripts(distdir, dist_scripts) + run_dist_scripts(src_root, bld_root, distdir, dist_scripts) output_names = [] for a in archives: compressed_name = distdir + archive_extension[a] @@ -141,6 +143,8 @@ def hg_have_dirty_index(src_root): def create_dist_hg(dist_name, archives, src_root, bld_root, dist_sub, dist_scripts): if hg_have_dirty_index(src_root): mlog.warning('Repository has uncommitted changes that will not be included in the dist tarball') + if dist_scripts: + mlog.warning('dist scripts are not supported in Mercurial projects') os.makedirs(dist_sub, exist_ok=True) tarname = os.path.join(dist_sub, dist_name + '.tar') @@ -149,8 +153,6 @@ def create_dist_hg(dist_name, archives, src_root, bld_root, dist_sub, dist_scrip zipname = os.path.join(dist_sub, dist_name + '.zip') subprocess.check_call(['hg', 'archive', '-R', src_root, '-S', '-t', 'tar', tarname]) output_names = [] - if dist_scripts: - mlog.warning('dist scripts are not supported in Mercurial projects') if 'xztar' in archives: import lzma with lzma.open(xzname, 'wb') as xf, open(tarname, 'rb') as tf: