mdist: use better approach to finding original configured options

Instead of reading intro-buildoptions.json, a giant json file containing
every option ever + its current value, use the private file that is
internally used by msetup for e.g. --wipe to restore settings.

This accurately tracks exactly the options specified on the command
line, and avoids lengthy summary messages containing all the overridden
defaults.

It also avoids passing potentially incompatible options, such as
explictly specifying -Dpython.install_env while also having a non-empty
-Dpython.{x}libdir

Fixes #10181
pull/10268/head
Eli Schwartz 3 years ago
parent 3c80f8f965
commit 1420d0dace
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
  1. 18
      mesonbuild/mdist.py

@ -13,9 +13,11 @@
# limitations under the License.
import argparse
import gzip
import os
import sys
import shlex
import shutil
import subprocess
import tarfile
@ -27,8 +29,9 @@ from pathlib import Path
from mesonbuild.environment import detect_ninja
from mesonbuild.mesonlib import (MesonException, RealPathAction, quiet_git,
windows_proof_rmtree, setup_vsenv)
from mesonbuild.msetup import add_arguments as msetup_argparse
from mesonbuild.wrap import wrap
from mesonbuild import mlog, build
from mesonbuild import mlog, build, coredata
from .scripts.meson_exe import run_exe
archive_choices = ['gztar', 'xztar', 'zip']
@ -263,9 +266,7 @@ def check_dist(packagename, meson_command, extra_meson_args, bld_root, privdir):
unpacked_files = glob(os.path.join(unpackdir, '*'))
assert len(unpacked_files) == 1
unpacked_src_dir = unpacked_files[0]
with open(os.path.join(bld_root, 'meson-info', 'intro-buildoptions.json'), encoding='utf-8') as boptions:
meson_command += ['-D{name}={value}'.format(**o) for o in json.load(boptions)
if o['name'] not in ['backend', 'install_umask', 'buildtype']]
meson_command += create_cmdline_args(bld_root)
meson_command += extra_meson_args
ret = run_dist_steps(meson_command, unpacked_src_dir, builddir, installdir, ninja_args)
@ -278,6 +279,15 @@ def check_dist(packagename, meson_command, extra_meson_args, bld_root, privdir):
print(f'Distribution package {packagename} tested')
return ret
def create_cmdline_args(bld_root):
parser = argparse.ArgumentParser()
msetup_argparse(parser)
args = parser.parse_args([])
coredata.parse_cmd_line_options(args)
coredata.read_cmd_line_file(bld_root, args)
args.cmd_line_options.pop(coredata.OptionKey('backend'), '')
return shlex.split(coredata.format_cmd_line_options(args))
def determine_archives_to_generate(options):
result = []
for i in options.formats.split(','):

Loading…
Cancel
Save