From patchwork Fri Aug 19 14:00:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1668135 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=MYnLvZtR; 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 4M8Nm23HXmz1ygd for ; Sat, 20 Aug 2022 00:04:18 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5547C84BA4; Fri, 19 Aug 2022 16:01:58 +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="MYnLvZtR"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 9EB4184B5F; Fri, 19 Aug 2022 16:01:19 +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 EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2041.outbound.protection.outlook.com [40.107.22.41]) (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 DD80A84B65 for ; Fri, 19 Aug 2022 16:01:02 +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=NRM1V2BO4VNafXH33+0DcAEjfBfDXL/Q3a6cRB8HKOLHzmLjKVd2SErGeVZIx8OVxLqBA+RzFfWNXNAhZruZrpiXe1uHugV5og1AXWkt01vi6nrsykYkQqV8QrE6BSFfw976Pfld+GWX/RZY24H4k25F73WsKmG6RYkNHyMh+KycuhPj/xzsVumoOdkBOLsjXXHpx9G5D+p21QfMTKDx+TseQDB5rHPY5f9ZDToJZCWG3nhpstQf6NeQfJ3bPKFqSjAe7V8xR9/2iuOOCffwsKo9gaoHsIjkSUNNB7S9satOglEXVAI7uO4OkH/Aj2f/9APlqVMPvyzY1h9Id9aQZg== 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=sPY0aAHW1gt7WusB4fqpphDLSymJzCkc4eOIZoPBdeQ=; b=BwN7WUyYf7HMwNGzukdUDZfcyjRUow9Q3ZovCwXz3fVAISDe6AYYU51fODo2g4faOPWSNallbgYiD54uqhKS8NyGZPNz0lwIR4OS4aMxQYibeKfgKYV60Ydx+927qN9ZiYDdTUecneHB7PACfvKpd/bgCg4ZsXW/vpRMErWNp0kmB5qHdd9yBq+ekGwori0ju/DQ3NWg790CKPzEeS156aCxcIf/ojCjd3e5etLZn83SXfEB8zlfK5XYIapJC3gmhAuXfCAKiCa4KTAbfCdmcXobYJ/he+fURicx1fZVkxwFSJ5/4qCXLr2338dw8ARyjDLLjkgErh62INJB7BuXaA== 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=sPY0aAHW1gt7WusB4fqpphDLSymJzCkc4eOIZoPBdeQ=; b=MYnLvZtRBFfw/UhNnuknTHZ0bjtyX6cFWIBZs6OR/fvyFWc+WPRLVW8CMWlKRF+trAJU+c6dyhnpr41w42UyRcaLI0poIhfdjqUe/wzbYGXJuH9R6Lfat+gvEbNDGl4AGXiUIIc1lD2oN0vC+vYXt0f++UJCWAsXm2XkAVPEFMw= 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 DU2PR08MB7373.eurprd08.prod.outlook.com (2603:10a6:10:2f1::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5546.16; Fri, 19 Aug 2022 14:01:01 +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:01:01 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de Cc: Stefan Herbrechtsmeier , Alper Nebi Yasak , Simon Glass Subject: [PATCH v5 16/21] binman: Add BintoolPacker class to bintool Date: Fri, 19 Aug 2022 16:00:30 +0200 Message-Id: <20220819140035.32760-17-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220819140035.32760-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220819140035.32760-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS4P251CA0011.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:5d2::7) 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: dc35ddd3-3320-43bc-8e42-08da81eb3fed X-MS-TrafficTypeDiagnostic: DU2PR08MB7373:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8M6XDcOh3BOmxEysnHR26RVMgwM2kGBHH2ZtUaQB5xxTvJkkAThVyYT1LS/XXe4Piy7+U2oIpV57SJKCwDgzkVmjHeGs+P+uNgxqnP0S8TEFfoOHK/jV7deWTA/NMJ8LYFGzxC7BVnmJvOCy+b5sN3366koiQQvt7wOrdZMjkDhOiZKz8dPScoWf189CChVJPlJkwQn1yYM++xf6Fd9aDD+IRzyQF3fjvy6HtGKODXWaZ7v+jF9HoRRbFZ3HyGYTEHb146RpOOnOoOkm9gaseXWogZQNlIkKSR+pnxjRliROkmG/49l5orQBL/hj275KDCX1OW7BmRmPVqN3iHUixiYibx1YB/SJ30/AIptR3jqbGijE6AjKKAXPP6fJi9qkKCWmx8tTnFGge5YJtrVOzkOIzw4XnwursoAcWfxI5quOaYfloleTkKCwbhKYuCxqsfR5XBLU1H9b/LxEVbxKJM0Vh4CWfNoV0TW+fMMzIBA+IJ/jzltRSwMNQzwkg6ODj+Ex6TDS9AftISR+r6acAvfqW/U7z/ve4MkyoUXL1BjyzfEg+pgvl3Fsuet6rBOchaOZpqc40k1jBGrBzKvnK25X184xdrIWnJsWgePWgrv8gdIDcBLGcJ6l/GE8gchXqi6TE3+6Z1I4bWh4rl0CRqQOoNvBcHlVGBAw9AUIpFcdXQ0loZGbDwKKUrrsCgOyQ1mbJJ30QRdap8wCAeIFemAwhSXc1EnOS6YkdlKQFEnMwVnDClPWl5fyPBOeTrsFc08uBLbwgxURYkMilc1ANA== 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)(39860400002)(346002)(366004)(136003)(396003)(376002)(4326008)(41300700001)(52116002)(6506007)(6666004)(186003)(38100700002)(36756003)(54906003)(6916009)(5660300002)(38350700002)(8936002)(316002)(2906002)(26005)(1076003)(83380400001)(8676002)(6486002)(86362001)(478600001)(6512007)(66946007)(66556008)(66476007)(66574015)(2616005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?JClC4na9P4AgYhY96y2oq867KSz5?= =?utf-8?q?qREhDKyxbOepT/z6Oh7+xmvYD9nYjRs6lQw2XQFVqnFIUURw6ja405rKXPCKCwn3l?= =?utf-8?q?2ISVYMJvSUbwgR4JvZuo+YgO0G0e2/XsKIqdU3LQ3tis6ES+jlhxis9FJ3wccc/ie?= =?utf-8?q?3hfMxaA3soWx4MRlbPuzN9QRI4NEPo664UBuYqp80EF34SYdDrWVvzxKUbIImwZyU?= =?utf-8?q?po5XA0lA/ILhlJS5R9u+/1yNk4vVmgsej8aS0fRKORTYtDtg57KgMnelYuAirJ/bL?= =?utf-8?q?jEi9vV6uwnS2IcPUxhGtpssF27cy/DePkzcOeNg+6hQH4CJvkDiRFwMIqyRhlgeqF?= =?utf-8?q?CF82QkqhTU9OFa6+dkGGYYQkH3EULJNXPhwO6ubyFqzRFdpedAxsHQip5CNt1woVY?= =?utf-8?q?Wk2/Yl4x2dLV2vRkF4rrJfDilPgjniObcOoWs4xK0HZ+Piyokg2Nednr+0Fmz5kyK?= =?utf-8?q?P0FKuBf9DjiuMywQdFT+tlf1pkzHmZLCJARcBldbwsD9SAv1hUT/jICY2Dyls4LIs?= =?utf-8?q?6EzYXu/C06Psn1HqQ0wIui2btesntz1zUuo4QyEZkW3HscFwqvYnemdXis/WeweNW?= =?utf-8?q?upE+auN86srHpoSuSogLiMUlG1Ee0pKH8meuE3T7hUwobexWTWJLROKGJkdJR2lQ6?= =?utf-8?q?HYykAVJXgDLDGas54TOtBfAyHFq7UPyA8BmLkyzGl9hBARD1rAy06edMxSwWJrEP2?= =?utf-8?q?UnouFNVZuEvJ8M/BMPAJj9zrP32CtRuGGLFfS/ELhQMysxJf3iV1/pYzYmP4Ubi4g?= =?utf-8?q?Plkb3HA/KdUZoOD+1NQDeyHdcaG6Tw/OkB0sYxGLLqursWduaSqYeNu4SJ05vJFQq?= =?utf-8?q?bcnAa8l7z2cNov/M50U4MeZgL10lX/e+PYRlsup54GfpoeosjQwVuiWJpHf4vgDaP?= =?utf-8?q?Vh0nyyQYwlb2rcfIkEN6eKdd0wep5Fv8c7YzIYtIxJy0i1AH6uj98WKq7613y0zJc?= =?utf-8?q?ItjLm3P4FEfT5bmV5YwUW436wnnTiU+kvoXQeBQCv32ijrCNynpFp0BkyZstnDEqO?= =?utf-8?q?rKB5hO3Tjtp4If+6watkPtMKbGGLjA4U8dpZG8b1bvID1pb1yiGfuFznDtxjdh9aW?= =?utf-8?q?BZrh7VSKdfeWjfXQnAytUMB+jkme/YxhokStZP9XpeNtW5DQIPTp9zf4EJVnQ3x7k?= =?utf-8?q?xEAEa2xN582hymBu4DNXMwSMjpbo4BCy1t+Y0/QsfKl6nZZPQVONe0CFtvzyZS76F?= =?utf-8?q?iEpUOTqsbaorGcd2x9E8Cr1BFdIE0nECkV63ZgPY35H3VLQXPdXd8df1jiyQ7Tj6d?= =?utf-8?q?b0TQdQVbb5HCNIi2JvQ/AWGS+oRZVrfBDOT9h5nB4qyrBXqiDltnlxlHCwV03mfsV?= =?utf-8?q?DLE6IebWkeUFbzA6+tDxYUTJtJFM3bpNUIx4CnfunoJVEe8cUiLXKyBzyKPAu4NHv?= =?utf-8?q?Qu3OsTdPdUAqTtyWvkF4YhziRCepwpGC38WcAPN6Q0x+E9mzABMwsboUwpClRdxZp?= =?utf-8?q?cqQ5lVbgsNDxRcDA7NFOduGGFEZDJeYoSeeK0URMXr22tS2tlobuSTVMXq7sChA8Z?= =?utf-8?q?JrSqdVKz4Sy8EMsIR0wOIH5I/j9nG5JQIQ=3D=3D?= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc35ddd3-3320-43bc-8e42-08da81eb3fed 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:01:01.7426 (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: hRaZZI6aQPR4Y04DOzCQZkxd/LegCOYqpxADLwwOwCb4w8vDDP9X3LZvq0jl7X5NlXhweAHeXxH71nRd5jsHDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR08MB7373 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 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