Bug 1748385 - Use the --dont-define-prefix flag of pkg-config when supported. r=firefox-build-system-reviewers,mhentges

Differential Revision: https://phabricator.services.mozilla.com/D135012
This commit is contained in:
Mike Hommey 2022-01-04 22:57:02 +00:00
parent 55c350dbd6
commit 2d9ca36bea
2 changed files with 40 additions and 12 deletions

View File

@ -32,14 +32,23 @@ def is_pkgconf(pkg_config):
return "pkgconf " in check_cmd_output(pkg_config, "--about", onerror=lambda: "")
@depends(is_pkgconf, pkg_config_version)
def pkg_config_base_flags(is_pkgconf, pkg_config_version):
@depends(is_pkgconf, pkg_config_version, target_sysroot.bootstrapped)
def pkg_config_base_flags(is_pkgconf, pkg_config_version, target_sysroot_bootstrapped):
# pkgconf 1.7.4 changed the default on Windows to use --static, but
# that doesn't work for us.
# Note: the --shared flag is not available before pkgconf 1.7
flags = []
if is_pkgconf and pkg_config_version >= "1.7.4":
flags.append("--shared")
# When pkg-config is in /usr things work fine by default, but when
# it is not, it defines prefix to be something else than /usr, which
# won't match what the .pc files actually say, and won't work in
# sysroots.
if target_sysroot_bootstrapped and (
(is_pkgconf and pkg_config_version >= "1.2.0")
or (not is_pkgconf and pkg_config_version >= "0.29.0")
):
flags.append("--dont-define-prefix")
return tuple(flags)

View File

@ -682,7 +682,13 @@ class TestChecksConfigure(unittest.TestCase):
mock_pkg_config_version = "0.10.0"
mock_pkg_config_path = mozpath.abspath("/usr/bin/pkg-config")
seen_flags = set()
def mock_pkg_config(_, args):
if "--dont-define-prefix" in args:
args = list(args)
seen_flags.add(args.pop(args.index("--dont-define-prefix")))
args = tuple(args)
if args[0:2] == ("--errors-to-stdout", "--print-errors"):
assert len(args) == 3
package = args[2]
@ -711,8 +717,6 @@ class TestChecksConfigure(unittest.TestCase):
return 1, "Unknown option --about", ""
self.fail("Unexpected arguments to mock_pkg_config: %s" % (args,))
seen_flags = set()
def mock_pkgconf(_, args):
if args[0] == "--shared":
seen_flags.add(args[0])
@ -721,7 +725,7 @@ class TestChecksConfigure(unittest.TestCase):
return 0, "pkgconf {}".format(mock_pkg_config_version), ""
return mock_pkg_config(_, args)
def get_result(cmd, args=[], extra_paths=None):
def get_result(cmd, args=[], bootstrapped_sysroot=False, extra_paths=None):
return self.get_result(
textwrap.dedent(
"""\
@ -729,7 +733,7 @@ class TestChecksConfigure(unittest.TestCase):
compile_environment = depends(when='--enable-compile-environment')(lambda: True)
toolchain_prefix = depends(when=True)(lambda: None)
target_multiarch_dir = depends(when=True)(lambda: None)
target_sysroot = depends(when=True)(lambda: None)
target_sysroot = depends(when=True)(lambda: %(sysroot)s)
target = depends(when=True)(lambda: None)
include('%(topsrcdir)s/build/moz.configure/util.configure')
include('%(topsrcdir)s/build/moz.configure/checks.configure')
@ -740,7 +744,12 @@ class TestChecksConfigure(unittest.TestCase):
return check_prog(*args, **kwargs)
include('%(topsrcdir)s/build/moz.configure/pkg.configure')
"""
% {"topsrcdir": topsrcdir}
% {
"topsrcdir": topsrcdir,
"sysroot": "namespace(bootstrapped=True)"
if bootstrapped_sysroot
else "None",
}
)
+ cmd,
args=args,
@ -764,14 +773,20 @@ class TestChecksConfigure(unittest.TestCase):
),
)
for pkg_config, version, is_pkgconf in (
(mock_pkg_config, "0.10.0", False),
(mock_pkgconf, "1.6.0", True),
(mock_pkgconf, "1.8.0", True),
for pkg_config, version, bootstrapped_sysroot, is_pkgconf in (
(mock_pkg_config, "0.10.0", False, False),
(mock_pkg_config, "0.30.0", False, False),
(mock_pkg_config, "0.30.0", True, False),
(mock_pkgconf, "1.1.0", True, True),
(mock_pkgconf, "1.6.0", False, True),
(mock_pkgconf, "1.8.0", False, True),
(mock_pkgconf, "1.8.0", True, True),
):
seen_flags = set()
mock_pkg_config_version = version
config, output, status = get_result(
"pkg_check_modules('MOZ_VALID', 'valid')",
bootstrapped_sysroot=bootstrapped_sysroot,
extra_paths={mock_pkg_config_path: pkg_config},
)
self.assertEqual(status, 0)
@ -801,8 +816,12 @@ class TestChecksConfigure(unittest.TestCase):
"MOZ_VALID_LIBS": ("-lvalid",),
},
)
if version == "1.8.0":
if version == "1.8.0" and bootstrapped_sysroot:
self.assertEqual(seen_flags, set(["--shared", "--dont-define-prefix"]))
elif version == "1.8.0":
self.assertEqual(seen_flags, set(["--shared"]))
elif version in ("1.6.0", "0.30.0") and bootstrapped_sysroot:
self.assertEqual(seen_flags, set(["--dont-define-prefix"]))
else:
self.assertEqual(seen_flags, set())