Set source and build dir envvars when running dist.

pull/4928/head
Jussi Pakkanen 5 years ago
parent a55e3434c5
commit 254cb3209d
  1. 19
      docs/markdown/Reference-manual.md
  2. 10
      mesonbuild/mdist.py

@ -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

@ -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:

Loading…
Cancel
Save