From patchwork Tue Aug 16 06:41:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1666689 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=2a01:238:438b:c500:173d:9f52:ddab:ee01; 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=e6xlNBZx; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (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 4M6M7D2zgqz1yft for ; Tue, 16 Aug 2022 16:43:52 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5195183FCD; Tue, 16 Aug 2022 08:42:54 +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="e6xlNBZx"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 596E2848A5; Tue, 16 Aug 2022 08:42:34 +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 EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50054.outbound.protection.outlook.com [40.107.5.54]) (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 CDE3A848B7 for ; Tue, 16 Aug 2022 08:42:27 +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=C+AfnSaSlWouyNAtc5CDuXq/d2uSXziN+M3Rzv8hJJpxYV2t5YhBkLvrOf/nQTvD1LrbCBSMdcWFYBVv5mJuQ7PnKMgj++bMIQEhHJF8zL5Qcm5VzQpSz4BV0lt7Hg0nYPHNflRYx/pYRa9Ct/nLXUc1bsBM66Of1I0Bnp08+p8qHBSH0oAenffxUl/r2wEE39u6wMOxsb+OgwuBNb65QsYZGqSsKBBm4mPWV/c9qD/sdyaApE9TtxSuI3p0c5b/IjYNBxjm3MqCkPTqr4XcjdGMLyD/JzqlWQaSftBA99FYaopDfc5inOc7pxEjHGT/e35lSdOUlmqmZHCH6vwGNA== 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=8/RREc3jXBEUmWurnYo53hXoNMt7KDnMS+ritmwA2FI=; b=FdTxOkYH90BdrUGj+n65ZqwP681SoK1rJagZ+TnD7Km+T1Iq6LXZb7aZZzVkazxSFB9XmgpOeg/n9ZGwjCfkO3euG7Va0yPspMdJHnw6htHU8wxCzor8d70rbROJlbTFvteuNIVkRizBzIoCGpm6MbgDE9ArPUdT3WZE7r0IswP1tFXv70u50LGxPI5ict4xv4/n5uMbQm14qAJau+NZOUiKXc+y7ssg6GSmbtb0yza5n6PGrb6XlKNluzh1Kr8BACVq4yxYPjUjs3Lsxm0ObiA5runC44mRHNgQdUiKqBfCUBa38ZbWlJiLv/FTh0vBbZKLySb367vc7gzjjmHYFA== 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=8/RREc3jXBEUmWurnYo53hXoNMt7KDnMS+ritmwA2FI=; b=e6xlNBZxCOWGOliGdKAGgmBspJlPugLcU6k8noXKAbc4nUQyeuFNwQAty9ZhcyHBNx7Wc+cjSv16U93Txxx7AjP8KQyvP/Cz3QHJxBHosluwOHTbNsUU2nWNfvx1kIYeCOgad9aDUBVd2jy5Blphcagd62lksl+2jvqyVaBdUx8= 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 VE1PR08MB4685.eurprd08.prod.outlook.com (2603:10a6:802:ae::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.25; Tue, 16 Aug 2022 06:42:27 +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.5525.011; Tue, 16 Aug 2022 06:42:27 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de Cc: Stefan Herbrechtsmeier , Alper Nebi Yasak , Simon Glass Subject: [PATCH v3 07/13] binman: Add BintoolPacker class to bintool Date: Tue, 16 Aug 2022 08:41:45 +0200 Message-Id: <20220816064151.9848-7-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220816064151.9848-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220816064151.9848-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0744.eurprd06.prod.outlook.com (2603:10a6:20b:487::19) 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: f212cf58-b863-4b8b-bf82-08da7f527bda X-MS-TrafficTypeDiagnostic: VE1PR08MB4685:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Njh8ji50uh8MnMh1ksLXBX2LWgFPok3g7LzxEapl+PDWEu+p1EYIx9zswMXVHKfqQm/gYduKAiEGwvs9ANUWeMCXJ7clM/1jOLE4GhCGtd2I8FUw8RRi2eew1CzW7RaahM3H6GdfNGDrTAoKLNiHuPoTLRUUOAL0gJ5b2yq9EaxETCAJMjn0hGve6anuh4rQuU52FH0J5WIsU3Dj7ghEN74Tnfq4cBCa2H4v1aaGUwFN5gnms8Htcgo0n0UNSx5Q10oOTANCSubnP5BFDg5qAE6amKQoRwSTJHN9iZfVHpoz5Bw9gvQAxft+E8VpcaM6P39N+SlIBBswefRiMo/gDqwmsqOnYpl/q3nUu6mq8XL3YsBSgwTC/wJqM0wozS1ZRDTrXoFimCs6AqR6233naj4tMfFNIiAM6pLydC1/NIPkGmGMKIJ1cRz/MZaX9Ck72vHpLHUUg9nWN1jvwIXrLO0UA10SRSPuoIb/7ohDkn8LuY7hxMQy52GpD5dgkVmlXftSAPUDGHeOQu0iUZtsdcZNTT5RwH5IoQrnTg+DaFz7x8WtcrmSYgvOQ/o7SGuOD/Ylp6D6XO/v+rGTP2uDLKIsWvWfdCQqy185872iUd12HYsDpgh7Xxgg5roNraAjMqck3KmSAkRtDL5oYDK0Z+G6z25YwXOrEHLxKigyfcpeStts+Psd6Uupbdne1RCpcq+OOKICcNvDd6xY0lfmWIT645hQcqUEIr7D+qoicjjBJbDQ7ee2qkRxT3KgRZNifsKLcrcvDEguX72wz03CKHnJ2mxeUZvHgFkgLZ9h7YQUsFaDT71TlctNigYUmZNr 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)(136003)(366004)(396003)(346002)(376002)(39860400002)(86362001)(38350700002)(38100700002)(36756003)(316002)(8936002)(41300700001)(4326008)(66946007)(5660300002)(1076003)(66476007)(478600001)(8676002)(66556008)(6486002)(6512007)(26005)(52116002)(83380400001)(6506007)(2906002)(66574015)(6666004)(186003)(2616005)(6916009)(54906003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?uQsic90jKTf9eSQ2ceqhhGbEDNO1?= =?utf-8?q?5v/bduE4DH8DMpmip6bpqS5P75r/lBRe5dhR3bVyj6MVX6LzdEgX68pI8uuvKOxfM?= =?utf-8?q?L+eubTRw/8oWrw6PXrDNaJmMpaL9R5WRH+nxBpj8Llchah9RDSxxExo370Q8nJ8nw?= =?utf-8?q?8ESM6F7OFsL/V0jZJPU2DVc8N82ZptCq4b2Aekrw6Aol7/peyw0uVZWBlMUptHouS?= =?utf-8?q?mucbQ2hfblDWM/l1zOmvuZk5AynrpX0jju2QXRXcg7b8i9H1MmVPuzd1w/amTMUVU?= =?utf-8?q?+cqBjqSevzNM9zYLUvNLYs2DIbZU486G220DfZOL1Ce1pYy1fvROjzkQrSPuC1WrP?= =?utf-8?q?TnjdUh8zfVcJUDa20FIuoi8bx4R79K61QJ8ToxhrWTdscO9FtQV4RMS2GqNTq8bn3?= =?utf-8?q?W9DyBvJQfivgUNBkaYqCBj1zEgxf4l6zmOWvwlxLC4hm3tid5m+LlOahKnJ4Cv8jG?= =?utf-8?q?2gpQmuun/dR2NJkE56IP4XUjIE1SGP4Et1FyQLHkgEw5hjq3gWyLPt1xB/yyFFQHJ?= =?utf-8?q?4JvjGA2cP1lnEImk+Dmm4fKYl1djWz0i9i6Wnccp5AwtucZvb2KAwXd9b8g29geWB?= =?utf-8?q?YqYDxdvcstdNmeCeFQaYUOMhjGs5siog1AI0dCcChSI0mDNwHU/5nFu/uG3zvhmIH?= =?utf-8?q?xIBNFWGiB7ix1J1nDeeWO7RCllOmcsdDL5ssAfaNHb5o/q3althYV25x9mZEM5WSX?= =?utf-8?q?Lat2OtvVycGrxSgz/NfsRCrB7+5/0Wc5uzNnpCVGOszwITkJDSQHlqeQerT9aEFqC?= =?utf-8?q?qulFlAj5MvImAt/qTawIYIJt1h9XfchKo9ljGj6aZkPJ6Ld0RbUyoUxKVgmCNH5g7?= =?utf-8?q?Nj+klkuoQ+3Nqt2au6Peh9yvE3S5g+iMKGbl5y/XBMl6IGEls8s0diLFsG146BUKJ?= =?utf-8?q?B9ygy9lLv5tVtENtL4rwvY3UqKLxag1OEIOCGeclg6wxkMq+mEw2KHFBdUs6qmo9b?= =?utf-8?q?WXc+JmgPR7oxKBhGWo3gaEqZovfuzlwqPx5A5AWEVZZx3Bnp6zqQtKa2aXXikZrMF?= =?utf-8?q?v7D+DZ2N2vbYp839BTi/U0aEDabarJ94dAeEw4Vmj5Wid3B3d0Gkbq0pLn7nyEmSn?= =?utf-8?q?iJeY4Xzo+/miYmww6OSJEopssJc/FIoFSgIA3G0wXcFY0VeKW8ihX7HWEm1n20mJ7?= =?utf-8?q?KkMGBPc/+CDwEGVRRUmLpFA9C+NHqfyXW0oDxoS1dTYdPy/PZXjLrCoEutKtpjzwB?= =?utf-8?q?cxINORKnF8/FVXQhezyoJzQ+YuOL5W+SuHrnP3qS+BNe76BICEDV9GZ5whVENdBWs?= =?utf-8?q?ZXpe9HhLaIDqWx61i12N8chTMZS/rKtnDEJao5UJGNWXr/HkQcuT9AYqsC6prUHG/?= =?utf-8?q?u7I2RINNj64GbSTyqGlQhTyImEoidtWM6F8pw/A40MJWsgGaR5I1AMFhOy0MWqAsQ?= =?utf-8?q?ANWboYfRe9qI+73G082LT6n+NuMGeD63OnvyVQVzxNh+Nodoh6a2S8aw5lONw/lhI?= =?utf-8?q?JtXJovsVDViP258m+HgJ/TN4xT3k1x7dzyKPSmtfZwaf6bekHxN3vybzIOj66f6tC?= =?utf-8?q?WI/NJwaj9SBohNj3aal8grFg2+C8g25zKQ=3D=3D?= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: f212cf58-b863-4b8b-bf82-08da7f527bda X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2022 06:42:26.9731 (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: CtOUXvHbcBE+iI0d58q4hZoo+vBJnbgJub1wwNvGZAVolZrfFg8lfMELkEacKzLc409kut4SRS+Zq5mN41QQmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4685 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 --- Changes in v3: - Document class properties Changes in v2: - Added tools/binman/bintool.py | 107 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/tools/binman/bintool.py b/tools/binman/bintool.py index 8435b29749..2eaad418f2 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,108 @@ 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 + pkg = self.fetch_package if self.fetch_package else self.name + return self.apt_install(pkg) + + 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