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.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id D0F7315800F for ; Fri, 17 Feb 2023 09:12:41 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E45CBE088C; Fri, 17 Feb 2023 09:12:40 +0000 (UTC) Received: from smtp.gentoo.org (mail.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id C6ED1E088C for ; Fri, 17 Feb 2023 09:12:40 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id CD22533BE58 for ; Fri, 17 Feb 2023 09:12:39 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 2221B75 for ; Fri, 17 Feb 2023 09:12:38 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1676625123.7b00b5aa8c68942cdb9e751a9eeaa8b7795387f0.sam@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: bin/install-qa-check.d/ X-VCS-Repository: proj/portage X-VCS-Files: bin/install-qa-check.d/60pkgconfig X-VCS-Directories: bin/install-qa-check.d/ X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: 7b00b5aa8c68942cdb9e751a9eeaa8b7795387f0 X-VCS-Branch: master Date: Fri, 17 Feb 2023 09:12:38 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: c5e891a5-8b7a-4516-aefa-967dfd444de8 X-Archives-Hash: 2f9ca43056af0bd7f96c70cdeb2761e5 commit: 7b00b5aa8c68942cdb9e751a9eeaa8b7795387f0 Author: Florian Schmaus gentoo org> AuthorDate: Thu Dec 22 07:59:14 2022 +0000 Commit: Sam James gentoo org> CommitDate: Fri Feb 17 09:12:03 2023 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=7b00b5aa Revert "bin/install-qa-check.d: drop QA_PKGCONFIG_VERSION checks from 60pkgconfig" This reverts commit 772fdceea5f148d9bb5fd6c87ffd48f87ca93bab. Signed-off-by: Florian Schmaus gentoo.org> Signed-off-by: Sam James gentoo.org> bin/install-qa-check.d/60pkgconfig | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/bin/install-qa-check.d/60pkgconfig b/bin/install-qa-check.d/60pkgconfig index c982dbdf4..6ecbcabfd 100644 --- a/bin/install-qa-check.d/60pkgconfig +++ b/bin/install-qa-check.d/60pkgconfig @@ -88,6 +88,66 @@ pkgconfig_check() { eqawarn "(contains reference to either lib or lib64 in wrong directory)" eqatag -v pkgconfig.bad-libdir "${bad_libdir[@]}" fi + + # Check for mismatched Version field vs ${PV} + # To be safe, let's make sure _all_ installed .pcs have a bad Version + # before warning, as this should catch the general cases we're worried + # about, while avoiding any pathological cases e.g. multiple libraries + # with different versioning within one package. + # Example bugs: bug #833895, bug #833887. + + # Default to PV if QA_PKGCONFIG_VERSION is unset. + if [[ -z ${QA_PKGCONFIG_VERSION+set} ]]; then + local QA_PKGCONFIG_VERSION=${PV} + fi + + # Skip the check if QA_PKGCONFIG_VERSION is set to empty string. + if [[ -n ${QA_PKGCONFIG_VERSION} ]]; then + local pms_ver_re="^([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9]+)?$" + local -A bad_files + + local is_pms_ver=false + if [[ ${QA_PKGCONFIG_VERSION} =~ ${pms_ver_re} ]] ; then + # Ensure that ver_test is available. + [[ $(type -t ver_test) == function ]] || inherit eapi7-ver + is_pms_ver=true + fi + + for f in "${files[@]}" ; do + local file_version=$(pkg-config --modversion "${f}") + if [[ -n ${file_version} ]] ; then + if ${is_pms_ver} && [[ ${file_version} =~ ${pms_ver_re} ]]; then + # If both versions comply to PMS, then we can use ver_test to compare them. + ver_test ${QA_PKGCONFIG_VERSION} -eq ${file_version} && continue + else + # Otherwise, we resort to string comparision. + [[ ${QA_PKGCONFIG_VERSION} == ${file_version} ]] && continue + fi + else + # Record a special value if the .pc file has no version set at all. + file_version="" + fi + + bad_files["${f//${D}}"]="${file_version}" + done + + # Skip result reporting if *_p* because for both _pN and _preN, we + # don't generally expect the versions to be exactly accurate, and + # we want to avoid false positives. + if [[ ${#bad_files[@]} -gt 0 && ${PV} != *_p* ]] && ! has live ${PROPERTIES} ; then + eqawarn "QA Notice: pkg-config files with mismatched Version found!" + eqawarn "The Version field of the following files does not match ${PV}" + local bad_file + for bad_file in "${!bad_files[@]}"; do + local bad_file_version="${bad_files[${bad_file}]}" + eqawarn "- ${bad_file}: ${bad_file_version}" + done + eqawarn "Please check all .pc files installed by this package." + eqawarn "You can use QA_PKGCONFIG_VERSION to set the expected version," + eqawarn "or set to the empty string to disable this QA check." + eqatag pkgconfig.unexpected-version ${!bad_files[@]} + fi + fi } pkgconfig_check