From patchwork Mon Nov 8 20:19:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Majewski X-Patchwork-Id: 47236 X-Patchwork-Delegate: dj@redhat.com Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4EBF53857C70 for ; Mon, 8 Nov 2021 20:20:03 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) by sourceware.org (Postfix) with ESMTPS id CE17A3858D3C for ; Mon, 8 Nov 2021 20:19:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CE17A3858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=denx.de Received: from localhost.localdomain (85-222-111-42.dynamic.chello.pl [85.222.111.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: lukma@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 6177E8340A; Mon, 8 Nov 2021 21:19:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1636402786; bh=qxqaXUvSTeenaYWZTPLmQax2CiqYBX9svKe1IH+oGvU=; h=From:To:Cc:Subject:Date:From; b=aYC4wxklewx/Vz3Y0ojUsoAI0ujsdw7yEs9LBbVzpUvMXh+rF9Dd93ZKb5X9A3oMH 1oCK90CzLauZFhE1JgHxGskDo2kvTEJZ6iZCK3MBYzfTDjkQAtK+N9MWQcDhVgt5IO w8zegX92dHYNhAFtzXXmr311Ke7xzm2iiQArbLeX9NSZFBh0qB/CrnnVWD40ZlN6Eh c31y7Jhthg3sUQzgxRApM/4yQ/Fsbkt6aewyy+K8VOBSw+my8rkwVc37AhFB82bk82 3TAXLF7ZisKfW/903qyAELovUmwgGVQrcmvslBjZevpaeZ8w3Rh7pOJHCZJBIjUn/p kyAqA167SyMcg== From: Lukasz Majewski To: Joseph Myers Subject: [PATCH v2] ci: Check for necessary programs when running build-many-glibcs.py Date: Mon, 8 Nov 2021 21:19:31 +0100 Message-Id: <20211108201931.17159-1-lukma@denx.de> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Florian Weimer , libc-alpha , Andreas Schwab Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" The build-many-glibc.py can be run on a 'vanila' Debian distribution (as for example in docker container), which don't have by default installed some packages (like flex). This causes build break at late stage of the full build; ../src/scripts/build-many-glibcs.py . checkout --replace-sources && ../src/scripts/build-many-glibcs.py . host-libraries && ../src/scripts/build-many-glibcs.py . compilers && ../src/scripts/build-many-glibcs.py . glibcs To avoid such situation, this check has been added to inform user early of required (and missing) essential programs. Signed-off-by: Lukasz Majewski --- Changes for v2: - Use the shutil.which() to determine if the program is installed. The shutil is part of standard Python library (no extra dependencies introduced). --- scripts/build-many-glibcs.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index 6046048b75..b76b4e2ff2 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -1852,9 +1852,20 @@ def get_parser(): nargs='*') return parser +def check_required_programs(): + # List programs required to run this glibc CI script. + required_sw = ['flex', 'bison', 'git', 'makeinfo', 'patch', 'tar'] + for prog in required_sw: + if not shutil.which(prog): + print(f"error: Required program: '{prog}' NOT installed!") + return False + + return True def main(argv): """The main entry point.""" + if not check_required_programs(): + sys.exit(0) parser = get_parser() opts = parser.parse_args(argv) topdir = os.path.abspath(opts.topdir)