From patchwork Fri Aug 19 14:25:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1668169 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=ctXNiGZu; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4M8PHc0LRCz1yg7 for ; Sat, 20 Aug 2022 00:28:12 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 16E1684BDB; Fri, 19 Aug 2022 16:26:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="ctXNiGZu"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id CE01484BBE; Fri, 19 Aug 2022 16:26:13 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150075.outbound.protection.outlook.com [40.107.15.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 5945884BA0 for ; Fri, 19 Aug 2022 16:26:05 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xw1Pixj9U+gyJlCwyJzkZEeT4DBytMW4uydp1czAnm0wtw8YD5Uy8FEgwQ0qMuaGeV12j4roIgY4C/mGDVc5F4S8VQApEhmiENCkJw9Hl8SoUBHkQEdQ4kLZj5Gx6WZ27FUrqkXNOYK0YoO8dUgrej18KpwBWop/mvxFW0YeeCNOsh2iQYQH0WOKsEy9WS0f975aRn1NKLHfRKuExmDVD+xcRt+FCbBYykLvp1Q+hVYJua7ho/PUkf3X+u6unjO3YB0PLSZwB3OOySnKwRFhtyPoU9Dsm34SHJ8VvNb42wReYCV5wxuAFIy1oe8QK+PJiQxk7w3YsIRUcrrMeeBLJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WiBOADICz3KELCRrs3PgrlCFGZUNON4v9GlcZH3eToQ=; b=OqKWUdVZWaOPDKXHj6T3TwekENHsR8EdKWoGoFKb7+yE3O3LA1BcNS/pvlEr1wDZqcxw6HZhC5qZArhg2QsA/s9nWsER/F8ht01an0y1cRQzEYnJWXOby4NiG8QPGJyXppZ3v3DnkCGi/HKdyMGAs6yhXUyZ5wSaxmpqONzOGUCGJXOFk4YyFiRWeCoEiF5EmVts8LalBCeVXnK9OIZWJ43RgZZ6aRHW9DnYsFrzydN3c6+im8iv5WG4XIcQ7fKyESPZSr2tWz2MkJC60bq+3Sy5uDfAUuQvofhVT7agp6GoKwWLGitlpU89F8oRQzPzacv8o5U2RTyzZCwnZR4q7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WiBOADICz3KELCRrs3PgrlCFGZUNON4v9GlcZH3eToQ=; b=ctXNiGZuG5MD1ILkyI3Lco3EdT67h64AkkSc+ixU9zi4Zm4U3xdrdRCihKw9ciTBaPJu6O42aXfqpVxAk8dcmOCuUh/IYebNe7t74NHHK37k4KYo73gO4R+A8LDCuwkeI2pDbqBl9WP/Lq1suR2uskQABnmZROKqjVyDiysHUq4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by PR3PR08MB5739.eurprd08.prod.outlook.com (2603:10a6:102:8e::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5546.18; Fri, 19 Aug 2022 14:26:04 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f95b:2e64:9ee6:4d44]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f95b:2e64:9ee6:4d44%3]) with mapi id 15.20.5546.018; Fri, 19 Aug 2022 14:26:04 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de Cc: Stefan Herbrechtsmeier , Alper Nebi Yasak , Simon Glass Subject: [PATCH v6 16/21] binman: Add BintoolPacker class to bintool Date: Fri, 19 Aug 2022 16:25:33 +0200 Message-Id: <20220819142538.24847-17-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220819142538.24847-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220819142538.24847-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS4PR10CA0015.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::11) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ca781bdd-3157-4d9d-05cc-08da81eebf88 X-MS-TrafficTypeDiagnostic: PR3PR08MB5739:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vPBsPIk+pX0fE8mjfkot2Hc5S9MIUQw+V5lQpXfMpar5t8IDkkekioT/3mCB6NjB5itDRBjgUCTeBRLZoskujSQbQ0Xj/I34CBbRDslE4QaJxN5TEWl9SUg1tRmqmMRYG8GlAlGeTsAm9Rw6mdYn8h94y1PeUfqfofWiF/MLma4KfFj+l7sYe8OCpE69o+WC1rfL/8wVqfjSqAx9Dxm0x1S9ficYgW1RNoYj2o9Ipsi//GZ0l2ZNCNUvoiTyn8ZGrEjNoVWosvvfZ8Md75iHLSeQPeIf5OUAmTDTuV43fDsZRh/sXxmSijPX9QSbQnxpusHJ1fZCisW22QCWiY8JPEqBP6sjOTLY/FyXYRCIJYmTDHoxQKvSn+E0mVxaFiE6Uio1ZF/BuOerrM5QOidMtN/19omQ6s+uobh6TZR+97gJy7MmMzSvRBpZtSqZ4tsuUgd/5Dp519cSEm73qSsBSFp1++9qHqRQ4yJEMKnE/luW+LUbTO0sCvHmcm7AjYCl1kz8/9x9btxRo4upSla6DTZV0VTEZZgw5oC5SOC3/n4FE6j6B4/dWDmIpVhgRwQV6iJFa0XItovboyqolYX3hWWOZamMIUK8DfgbTh9d4rYtuTgLAB6FlmfCheg78JtQ2kILiMjLUlqC4rOA+fjXlfoYxmxtIQKjYtc8zY6G68z4ZxDaxq9EMg3Wui60K0DauTYfzvnNFJ0fAv8Z5wm5v5VSs6qT+b/qD9mAHyRmbbfVdLsskmvwbewXM4f5vNE+0w1CGEmQTtIIQ/bPnKTAzg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(396003)(366004)(376002)(136003)(346002)(39860400002)(4326008)(8676002)(66476007)(66946007)(66556008)(54906003)(316002)(6916009)(36756003)(5660300002)(8936002)(2906002)(478600001)(6486002)(41300700001)(6506007)(6666004)(6512007)(26005)(52116002)(2616005)(86362001)(1076003)(38350700002)(38100700002)(83380400001)(186003)(66574015); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?todhykjAEAEc/5N05sEBAmNdR2ol?= =?utf-8?q?PIMnbE9rfbkw+ggGeh2MqAIK+xs1K50frHtHoefqQasA5nxkCehhJ7Is5pJNTY8Kq?= =?utf-8?q?ngHuEUHk8mgStw87Cxfc0JQGwCTzyUDgdm85tTSAw2WqGrSt2Xsc988wFtPqPZrBJ?= =?utf-8?q?JU3ZkeJcfvjCSS2SsXmcAumHqbvEBKpuzJ3SXkThtnKQxjdxSfnRzy0dFRXkXwZ5T?= =?utf-8?q?DRMNQlJsRFndAwhqor2oCy5tQ9/wNSKKYT/h9HGEXkq7iTZxt7veembNkLWrekA2H?= =?utf-8?q?bL5uTS1jcXq/Y1/uKKmUBljlWmSDMbtM/yt0NtyOzTp+xhMQArRPbtn7bFgwb1SVa?= =?utf-8?q?mvyhH96y5Jmu/J9jdz15jHV0rdU8fUTjKibrQUQhb+Y9bLGDrG9X6r3kNnC4I909n?= =?utf-8?q?5QQeMzBOMD2zAn/ySKnGU164RKCw2L2L3mVYZR2hfBAA78ku3MNd9rlgT9LBPGKJk?= =?utf-8?q?Uw7W/Q6vvQr2fNeUxoqt7ZHK5hdDLbUKdcyCcPdC5Xh+ckDWnfoG1wsrYlQJnNtB7?= =?utf-8?q?OJwVoPc0Kms7CrYDrQCe4O9xl7sWGUSbRVxm/vj92V7sROo7RhiSSRjI2u9IVvYJm?= =?utf-8?q?3dszPwpdEvB0r3ZIsphGKxNSNkRVWuRk+Zyvw/AhNro36dHtmFMWI9V+jXW5juTlO?= =?utf-8?q?T0FKZfk14leQh4PtnSY6OIX7xzBr+sE1iU7+ZzcCtzv9vpFTX+N+QFhTrCwki+p7t?= =?utf-8?q?6qh9A/5XZ2CKKnR2yYJfwbeWPAhZ85KdCm11BI52UX5kZrRiwpICAL+aNFzzUT5yw?= =?utf-8?q?Dc+9v1o7RT0pwNFYSbP9NA5IHwakUiQPRpUTCRF0QiDAJ3+rGf5eC8Tqm/pfTnaXm?= =?utf-8?q?FplY+Pogq4ytGmgM57jtTBWXs6WmeVW9oN3/AqzoURxfnJG5rNoad33f+ZhCOQKa/?= =?utf-8?q?8d1kGizV2tuhTwLmOfL0y4QvVxdiMkmXUnWJPo1l0tsEjKEt8IfCrdN7aikWkLct7?= =?utf-8?q?kgxGsTPBQa27i9rFfSgIsJpAPna+dQOJtXR31HfExr8JvENzsjMx2PRyiJaZtHkMA?= =?utf-8?q?TO5Pu/ALfeYVT/Q4e5t9H4FNsg7QQYnSIsTCbtquCRTvheYsLnJiDx9UY+gi4YSYH?= =?utf-8?q?/XzGcXLltqrBs1usxzcYs1RYhWw5wMEE3vjK7MBNUlQW2FfF/sPD/h6VIsC7gEWg2?= =?utf-8?q?QFARfRZKnQWtgSWuCSzIAtSgmsVCJPubLSapzCHBxN9c9zLceFsl0pKnBDzKa3kj/?= =?utf-8?q?AkivHDPAHa2WvR5+6nLvKnl+MUtBcJCmC+iYBoOz1bnED446v3xvVdEZcvuTk/Hra?= =?utf-8?q?anNGNHldfzcsK4mtGITYqiaimco5KKkjNMGJc/Mqe5Cd0yrJekG/NjCEqa6RQybbE?= =?utf-8?q?RyHC2xBkiY6/5cmWagmbAKlBAqNbC3EgT0LvL2RLtBtDXl30MnzL3z/BJcJaRMScC?= =?utf-8?q?sZ4yCFUg9wNZm7ZYDoLYnON5gK+upfhosVwnz3bHnJ2zhGsSsW2kUQgQdZQkNl9Ho?= =?utf-8?q?vs8cqlSGCVMC4Bqi8LLP8cO1N0CnnpNAnOVIKS8vpLkg5gKWL667Lvh9UziHqhUA/?= =?utf-8?q?cyzR4gqcxz/Ahs26R/NxdFdGOKKkGeRxGQ=3D=3D?= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca781bdd-3157-4d9d-05cc-08da81eebf88 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Aug 2022 14:26:04.3314 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SdsS1xn1/90mnXYYA8FcHa53WeSEMztjCUAXM8eO+ezXYemiduGHIbFQjcDvciVFOSIT/S9IH1OxVyWyIO4XOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5739 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Add a bintools base class for packers which compression / decompression entry contents. Signed-off-by: Stefan Herbrechtsmeier Reviewed-by: Simon Glass Reviewed-by: Simon Glass --- (no changes since v5) Changes in v5: - Remove self.fetch_package not None check in fetch function Changes in v3: - Document class properties Changes in v2: - Add commit to add BintoolPacker class to bintool tools/binman/bintool.py | 106 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tools/binman/bintool.py b/tools/binman/bintool.py index 8435b29749..ccc1904d62 100644 --- a/tools/binman/bintool.py +++ b/tools/binman/bintool.py @@ -1,5 +1,7 @@ # SPDX-License-Identifier: GPL-2.0+ # Copyright 2022 Google LLC +# Copyright (C) 2022 Weidmüller Interface GmbH & Co. KG +# Stefan Herbrechtsmeier # """Base class for all bintools @@ -464,3 +466,107 @@ binaries. It is fairly easy to create new bintools. Just add a new file to the str: Version string for this bintool """ return 'unknown' + +class BintoolPacker(Bintool): + """Tool which compression / decompression entry contents + + This is a bintools base class for compression / decompression packer + + Properties: + name: Name of packer tool + compression: Compression type (COMPRESS_...), value of 'name' property + if none + compress_args: List of positional args provided to tool for compress, + ['--compress'] if none + decompress_args: List of positional args provided to tool for + decompress, ['--decompress'] if none + fetch_package: Name of the tool installed using the apt, value of 'name' + property if none + version_regex: Regular expressions to extract the version from tool + version output, '(v[0-9.]+)' if none + """ + def __init__(self, name, compression=None, compress_args=None, + decompress_args=None, fetch_package=None, + version_regex=r'(v[0-9.]+)'): + desc = '%s compression' % (compression if compression else name) + super().__init__(name, desc) + if compress_args is None: + compress_args = ['--compress'] + self.compress_args = compress_args + if decompress_args is None: + decompress_args = ['--decompress'] + self.decompress_args = decompress_args + if fetch_package is None: + fetch_package = name + self.fetch_package = fetch_package + self.version_regex = version_regex + + def compress(self, indata): + """Compress data + + Args: + indata (bytes): Data to compress + + Returns: + bytes: Compressed data + """ + with tempfile.NamedTemporaryFile(prefix='comp.tmp', + dir=tools.get_output_dir()) as tmp: + tools.write_file(tmp.name, indata) + args = self.compress_args + ['--stdout', tmp.name] + return self.run_cmd(*args, binary=True) + + def decompress(self, indata): + """Decompress data + + Args: + indata (bytes): Data to decompress + + Returns: + bytes: Decompressed data + """ + with tempfile.NamedTemporaryFile(prefix='decomp.tmp', + dir=tools.get_output_dir()) as inf: + tools.write_file(inf.name, indata) + args = self.decompress_args + ['--stdout', inf.name] + return self.run_cmd(*args, binary=True) + + def fetch(self, method): + """Fetch handler + + This installs the gzip package using the apt utility. + + Args: + method (FETCH_...): Method to use + + Returns: + True if the file was fetched and now installed, None if a method + other than FETCH_BIN was requested + + Raises: + Valuerror: Fetching could not be completed + """ + if method != FETCH_BIN: + return None + return self.apt_install(self.fetch_package) + + def version(self): + """Version handler + + Returns: + str: Version number + """ + import re + + result = self.run_cmd_result('-V') + if not result: + return super().version() + + out = result.stdout.strip() + if not out: + out = result.stderr.strip() + if not out: + return super().version() + + m_version = re.search(self.version_regex, out) + return m_version.group(1) if m_version else out