From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 14454158018 for ; Sat, 2 Oct 2021 20:11:39 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 5ABD6E085A; Sat, 2 Oct 2021 20:11:38 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 2FC4AE085A for ; Sat, 2 Oct 2021 20:11:38 +0000 (UTC) From: Sam James To: gentoo-portage-dev@lists.gentoo.org Cc: Sam James Subject: [gentoo-portage-dev] [PATCH 1/2] doebuild.py: check for inconsistent PROVIDES/image post-src_install Date: Sat, 2 Oct 2021 21:11:24 +0100 Message-Id: <20211002201125.346005-2-sam@gentoo.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211002201125.346005-1-sam@gentoo.org> References: <20211002201125.346005-1-sam@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Archives-Salt: 427ff422-f158-4e50-8e87-c72b85a5ddfe X-Archives-Hash: c22a948148531f43656d410e6ed025ae This is part of a series of fixes for the linked bug (failure to preserve libraries in some situations). At the point of installation (even if not merging), we need to detect inconsistent metadata: PROVIDES should be populated if we're installing any dynamic libraries. This suggests that e.g. scanelf malfunctioned or some corruption occurred. Bug: https://bugs.gentoo.org/811462 Signed-off-by: Sam James --- lib/portage/package/ebuild/doebuild.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py index 9650a8444..dc3fe3d97 100644 --- a/lib/portage/package/ebuild/doebuild.py +++ b/lib/portage/package/ebuild/doebuild.py @@ -3,6 +3,7 @@ __all__ = ["doebuild", "doebuild_environment", "spawn", "spawnebuild"] +import glob import grp import gzip import errno @@ -3079,7 +3080,7 @@ def _post_src_install_soname_symlinks(mysettings, out): ) as f: f.write(soname_deps.requires) - if soname_deps.provides is not None: + if soname_deps.provides: with io.open( _unicode_encode( os.path.join(build_info_dir, "PROVIDES"), @@ -3091,6 +3092,27 @@ def _post_src_install_soname_symlinks(mysettings, out): errors="strict", ) as f: f.write(soname_deps.provides) + else: + # Let's check if we've got inconsistent results. + # If we're installing dynamic libraries (.so files), we should + # really have a PROVIDES. + # (This is a complementary check at the point of creation for the + # ingestion check in Binpkg.py) + # Note: we could check a non-empty PROVIDES against the list of .sos, + # but this doesn't gain us anything. We're interested in failure + # to properly parse the installed files at all, which should really + # be a global problem (e.g. bug #811462) + installed_dynlibs = glob.glob(image_dir + "/**/*.so", recursive=True) + + if installed_dynlibs: + self._writemsg_level( + colorize( + "BAD", + "!!! Error! Installing dynamic libraries (.so) with blank PROVIDES!", + ), + noiselevel=-1, + level=logging.ERROR, + ) if unrecognized_elf_files: qa_msg = ["QA Notice: Unrecognized ELF file(s):"] -- 2.33.0