From patchwork Mon Jul 13 14:21:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Moessbauer X-Patchwork-Id: 5221 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Mon, 13 Jul 2026 16:22:30 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-qt1-f184.google.com (mail-qt1-f184.google.com [209.85.160.184]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 66DEMRhj011617 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 13 Jul 2026 16:22:28 +0200 Received: by mail-qt1-f184.google.com with SMTP id d75a77b69052e-51c20762d21sf35720941cf.0 for ; Mon, 13 Jul 2026 07:22:28 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1783952542; cv=pass; d=google.com; s=arc-20260327; b=LunPFykp20N71I9dFK7dddTSle3rpW16MVShFKoMhAoM6UcPqMujdR2MenCQdQegH6 YiQkq6yg1eZAPIoQjOniVkrw7ln4Qj5WAb81zS4RXcGuQCzhqH+RAcZgmyjU13Xi04Ny T5b1InQX1HvR5HXZPUQJg51wUKx4PJZEdJDn2zMpJ9TdYp2pP4TIQSvWkWm3aaovO2df AYTxmB7RXIKezpyqHu7OBzh4Huo53XNhtyhYBKvvGJjuX0yA/Y5TflofxGWfWiCLm+Kg FVRunwNlng4z6EZW6sItY8sO+Dobogl8m2+hzLQ8Tq/zgVvVLOWGofwwN9FLRTMvZMoi lZ8g== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:mime-version :content-transfer-encoding:message-id:date:subject:cc:to:from :dkim-signature; bh=2VZy7jdu2nyjLmnZgVxD981RdL+SLAGTCmf64cQWe+0=; fh=aT1IAW8lC64m0m+NUZvv3/AoIXsZeUiT9jQ2uGkCFHk=; b=ayCAIoZ3l5FtESWqhDRJHLaogPVHf5YfgaYHgnrQRSw4tTA52qYkhSZueZZpKYEAHO 5JB2XOkqov35AgsQFTy8vzFiU/nYNLnlJUn6k374dCs0Sr7m6zWT6wKBL5Z8iW3Nvj2Q WzJZkrFuTE2vtyyiLTRTAZcNF9PoS3ve8cIYgBY6lEfTPHJF1G0dl8YCVaFT4Dqasa2r mIqd4WKGh3Q4gCR3ZCOPGzZDLPeEF1tsJqLpBxCiELMqRdEGmDbaYla+Lfd4owL3ABN8 IHmcG1dkSZ7BQCm4FphVQumVFHCBS1rY4elGL2feprKoiLuNZ8xl8cWzluklpcWdsp85 QsHw==; darn=isar-build.org ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=NDruJoqI; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 2a01:111:f403:c201::3 as permitted sender) smtp.mailfrom=felix.moessbauer@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20251104; t=1783952542; x=1784557342; darn=isar-build.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :content-type:content-transfer-encoding:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=2VZy7jdu2nyjLmnZgVxD981RdL+SLAGTCmf64cQWe+0=; b=nbVQjwQ9hjf0H/NzFuKaFtqqXJbCRK/8usR7Ml7epglxH1SGi3vmSZrm4rI2eXEtPy Ni7KNLNPLc1Kit2hkLmWtxxUp9Vc7j6vqCaod53eYMT1jYUemAmsJWhpP864B9iF9PJT W7dduWWrTM9/luSjmLnw8FRs+igTrPi1qqvreXRaKLjfwU17cDbGN51y1N5HnKvJ6GnN hngGnS0LgwDojoSt7J8c4EouBjek0cOiyyqP2Z/mfUi3WnzBTuqqiTTGu8/VvEVVxWfg +o6MhF02vF0X6SImLZpZrPG0k8MnA5vM09rDoPpMXJx4KifmMP6AZCMqyTNj5JcDv07T ms0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783952542; x=1784557342; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :content-type:content-transfer-encoding:message-id:date:subject:cc :to:from:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2VZy7jdu2nyjLmnZgVxD981RdL+SLAGTCmf64cQWe+0=; b=R0OIUAkQtvDUQ+6aKOomNatHac6f3D6A7eJlI0UPAsq3lY6aasqjn5/L0U+N+sfvnv FetfdcHhCZmsW9rAA/kE6htr8eSy22FODHs0ZMNaZ4VCYaRd6VruTjZgEwE5NQiQmH6G 4YHOrUOhbooa2Rujs7YE9YaEG2X9mi8NMsXKbX82Di5PoioMzy6pb/1jWPc6mKvSb0gE 2ttwevMk7I9B01phI7sicS+OC6LQ/nxoUef4PzPJyH+K+2DeyQDB7gWV1WbmQSjpeLfT AH4fJhUSuzKcNYL4M41QjfY9O/RDiAfPjxYjMqWoGvJdKEBwQceuzmrMKtMzU683lyyK 9bTg== X-Forwarded-Encrypted: i=3; AHgh+RowfqDhhF428yyQ+mbD8v7p1bCOe9VaSLdI1jGK4VkCidya6F93isdOFMf1a7lA0yIRvM4aqoc=@isar-build.org X-Gm-Message-State: AOJu0Yym4XTYggAoqKFbiAPdOlZv3hfw3Cisg1ul7/k6rLO/qoDDHk3z sF1/gcx0FQ5rTwrwdPsoB1CGr9BdHXiPRfvSr5fBbNO6hQ5ANg0pYBQt X-Received: by 2002:a05:622a:40e:b0:51c:25da:903f with SMTP id d75a77b69052e-51cbf27db96mr89605331cf.59.1783952541652; Mon, 13 Jul 2026 07:22:21 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="AX0PUUeDfC9px1qg0qsbW+Q3HLaCZQ3RMKFmX2MVK6MvXjvaTw==" Received: by 2002:a05:622a:1913:b0:51c:48c:b7b9 with SMTP id d75a77b69052e-51c88399690ls112839241cf.0.-pod-prod-08-us; Mon, 13 Jul 2026 07:22:20 -0700 (PDT) X-Received: by 2002:a05:6122:4d82:b0:5bf:5c31:fe5d with SMTP id 71dfb90a1353d-5bfbf2d7da8mr4544097e0c.8.1783952540149; Mon, 13 Jul 2026 07:22:20 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1783952540; cv=pass; d=google.com; s=arc-20260327; b=LkGZeGW5J/Eb5VWVXtmxEWgCnkhgTM6vpkvkDcSoBascRosknWz6vmxLl3zjzjsZUl JEmuU6OmZbspHocndf1bAutpbJK3pnAdiJo4Sid8kpcgnIqeX+ZdYNqcA34G/0z6EiwV M8VNtBRPG8SgiSJvtHLGmZOP5Ffmq/HNFX6AaUAQ5NDVC2yKC2EUsOrpg1Vbc+YaV/n/ 8VBctf5xH7a0NXjzHIUQS0/RJyC7P1k767bP8NLV4W65Zg+ukqJ+C4x3cUzzGqY3qy0L Ig8AW7av3zM+IpxfaFcBg4BNOSxEchNzRwUY1ha2/jaPwCyUOe3u/KX88VRDcapzzOFp fFOg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:message-id:date:subject:cc :to:from:dkim-signature; bh=u3lneQyhnCHridwTPIi46po1vqkrtTQbzgLf6V09W3o=; fh=Xwx5KAQd7M5XPJvQVz6xz/z//08kOEttrlFeLBySLJ8=; b=Z2nv13bJeXwNxlVc5vBly0QxX8Zw81v4w/0O6yCOQM5TV21iPoWUwb0rICwJ/I8mRK xQZ4ZrmVO+h3qoTUeLmUGkPCNrs9wt8Jcp70sI4R1oczgrL1u8MnVJNalt2nwA2zWjsL xSfSuxdWy7Qm7Lb59q4Hp1bJVKzzJCjWw6H0bCcmpYfVsb08jTyXXr/X+eFmgQGCuT0x C82O1v7hZgttp/3B380yqwr65nGUy5r4x3gFTm+rCKqsKtCFFjdQeJY1eTTyHDVsZeFA /QdcB5lcsZgqzPNwGMPlHZSuMUq0AtUhez/ibV8LvLetNIorZdrmCnvOV/W1Woff9+6b snLA==; dara=google.com ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=NDruJoqI; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 2a01:111:f403:c201::3 as permitted sender) smtp.mailfrom=felix.moessbauer@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazlp170110003.outbound.protection.outlook.com. [2a01:111:f403:c201::3]) by gmr-mx.google.com with ESMTPS id 71dfb90a1353d-5bfa7d3d1d7si387409e0c.2.2026.07.13.07.22.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 07:22:19 -0700 (PDT) Received-SPF: pass (google.com: domain of felix.moessbauer@siemens.com designates 2a01:111:f403:c201::3 as permitted sender) client-ip=2a01:111:f403:c201::3; ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MZE2LGOJv0G3kGRkXgg9TZ5Cfu7ym+kizYbNvSaORgrir9qMMTMmIHtY3u+wBGBmn+51HurkoLyhv3CNgvJRfWmh4PJGwFS4Duj0ofi95uJai6wVrb8Qnbmli2eSBqn1jVm4PuqF72MrLcZ+31yhjyPkBk5PzTCcxQ48ZIvk9/pDveuGNwbb1PZwS7NPqkt0SU6x2noCJ9sA+YHoZay4UzUxyDt1cKvUjoQ3HS484btci4dd5bRJDpYP3KvRXpZX/EdU+fGPgrI4UX26fkc1D9rIRtEdphS9RKd2q/SoHaCF2EKVnaO6Qov8fezrdTGXpi68zoZ0ou5A+qkcEKKLQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=u3lneQyhnCHridwTPIi46po1vqkrtTQbzgLf6V09W3o=; b=k3YPOUaqkQA/l9/+U94dpk8vFoE3vDoIn7iYriCuEgpy9yqL/2Z0oTpxEKtWbtbsImDeeJdRVpSXeyZtdz2IlnLh8Hsw8D3WRGtYf+gU0PrDG/rXYhfZtgQsjHZn+z8Rrac5vSBBxvsx/YBaqw4xvvH0EC7vCxVL3pmDiHV+ZOfVKrsNnKAgZWOZukmIcZGz2GD2LZInLaY4byXtywQgyn2YByzuvpMJJ6WDZGzLFrhuFjqh3zwkADc27zKQqfLZZ1zLxRe5AeJDEMdlavPFCk5cH9vfmd7DbV0IaWP/anyXcQI9t3itEP330iFGfw5KOqde/pmoF9M0uKJZ333VPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none Received: from AM7PR10MB3956.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:17e::10) by PRAPR10MB5400.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:294::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.23; Mon, 13 Jul 2026 14:22:16 +0000 Received: from AM7PR10MB3956.EURPRD10.PROD.OUTLOOK.COM ([fe80::c54c:ccd8:ebbf:477c]) by AM7PR10MB3956.EURPRD10.PROD.OUTLOOK.COM ([fe80::c54c:ccd8:ebbf:477c%5]) with mapi id 15.21.0202.018; Mon, 13 Jul 2026 14:22:16 +0000 X-Patchwork-Original-From: "'Felix Moessbauer' via isar-users" From: Felix Moessbauer To: isar-users@googlegroups.com Cc: adriaan.schmidt@siemens.com, Felix Moessbauer Subject: [PATCH 1/1] meta: Update sstate.bbclass to v5.0.3 Date: Mon, 13 Jul 2026 16:21:52 +0200 Message-ID: <20260713142154.1547339-1-felix.moessbauer@siemens.com> X-Mailer: git-send-email 2.53.0 X-ClientProxiedBy: FR4P281CA0240.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e9::19) To AM7PR10MB3956.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:17e::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM7PR10MB3956:EE_|PRAPR10MB5400:EE_ X-MS-Office365-Filtering-Correlation-Id: f3439e3f-7727-423b-5026-08dee0ea23b2 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|18002099003|55112099003|11063799006|5023799004|3023799007|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: iOQ6Es6adLkMuH5uUilQYffWbgyZmLIuC897v+ZqP+ghZR6GBDsUf+h0lZxFcmcZLS8cHy/y86j9UWuP2+OF9NC2N/RFrk/JpUKPbZIw0wGso32HPvsmTSX5TLyzwMeDFU7na5KaQxbkbFzwvNOuFkS9GNG57xYsDZjYRdkao+99SUADAK4HwQ6lPD+eeYZBU0mZgprBm9Z0iL3CxLN7fzEzzagLpOtbtU8IYPoJ0NKTwkaU1OPb51EwqU5CscS8P7s35cdAGosudI9uyTXQ8N0syZFL7kjUWEAUFlFYHi8SecBQHEuxLWGdWmjK3ecXXHcpVbQG1C86pqB0bpyeapytMIZmeotrCXtDZAdlXi/wRUGNBOMe9pgJqu3HARfLRFiBsmxakW7ebMKooRHHctZ8txYXYAbG7ABcP/yVWDGl0oYIkRtyFaad4IHqvO09scqeHL6DdeN889JdvNlimz8gpyK7p1b9BppirzBST1mpbE4j1xK65LMuGN0IXibgoMPQ8yOZVDGgYgNIgBtqSkwTHrtsmKsCNOVDHj4AWo3RpNzZRJ/YV8qDP/MWg9HDu+fI1XO+IBKiCfYnEu1R2ippdtTVqsBieceKfrOB5G0RePV/1icauiqkGSaOrI5wlJqOtctI2WEZhVnCEo4h+F+E5GqvpuJrTx8ngSAlZRU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM7PR10MB3956.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(18002099003)(55112099003)(11063799006)(5023799004)(3023799007)(56012099006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: U3CrKTDqGXdAohNZEX6DX712XBMVY3a6UYaAySzumviuwk5bGXJaUfNY12HEF+TVYMkASu7+6XSxqsG/ALYkIr0AXXnuc7bNKhp8RBGcImd9OKliPsj6GHYY6lDwz8w3eivw6npGswweYGQLx9uAUadt4eTWR/tmU92X/6EVrM0PAc71GufAuUMXA1IEtEprHiKBvT3OizsKZUoSAgX97ktP7eDd4xLd1WgHDyXHBp1dAyIC7NyZnjYtGxlKfd2ox5fqsCff3exZiOFjzWdxrYrg7zjLSDsSM/MGgQ4uqGq0fXWFBujyuY10Gotj1IThQd2DS9w1PYNd39ORFfbpkTQ2KY1mXakvZq0aSNCIXOxZpaHIGFLd1PQjDdhdTh0p7QN/IkqXLZ9PTKgkBSavD0GKO7a9WqXPotdHHXDnQRTVmUJjxG1PksqLs2VF6Q1RA+g97FY4QgV0tvhSUr9+iHQmZjg8rI6JkAmH1QAiP54zWFtD7CoVJlrm+8+3UfQF/dpH1AvEQlOCqAxFNeXXrbEAMwpsDIGXLzeIFGmxu7Uk1MEA0z8VIxmTG+v5eBnKmxJ29YZdeXhYpC6XxliOMVB7dJ7fX3wVBVBFkyicN6l3CqOUd1bOmLzV4rc0bboQObfOQStcZGoqW0CUPA+nllMeC5vq835R9SUHTgl8TQKMhPaIOYsuJAa0dyKti0lROMpDXIj6Xkl9nDYHW9lF4nXK7ARYIHY+bXeuerXKrttMR/4HkmGtzHTYKq2Nz8ZoSyVZQEJyWy9LRr9NFGvsC1FlVobLIH6F3GWWHhFDrXm38zjC+aEm7jFoZx3GWm+zgQNdmlc0AHHEwMWeBkCc3LMeQTR8fuS9RoNZNx1fo8FjM4xfW9NIfyM0yPIbaE/uFKbxfWHJe/3xQNSXnRQz8aVLaQSCweGY5YM1xV6ht3aFBjrXMwKFduLHfJfuQSxGZVawx6pkamwq0zjorp0jGGhnuOni0SOO2d/q6Q6oxwIqjzBvUsGUCxiXs68wLjhEDk9LraqmNnQhyljO8b9Zjx9Bt5jYeV5Z5311tTZP2JpDm6nFQzx0bpaXMylVPWiS5oz0SN82VOxDcHQ78cHzPX6/Mk+ZCTqP3/JxzKNjeOWK5LdJ9G7NCFYZmEllDsn2lGX80Og4JkqaUUhrX00T/P5xgsAf9plk6FWp0ztW2U8L6z9ZhZA8OpnGq1MhCF2pev/wOV6luSmhkJ+/NGk9VKwyoDQScvHTTzetdhXNSj3LvQxPP/n1SM8lxsr052xOtY8Zrh6E22TXI36Kcc7vI7KwJIy89nQtOPsQsl+r8MZNsvv2gEvT27cM7liuHSRv/yzZZJKo7h1lvWlXNpiqiTNYYZG5+cTG2kK/hsSk+9cNJllwncYcKbC9ecDxuqQpWvwX+Q31z3UdaeOMCNIbNGsxj/r2qt8A1NrHB5W7OAIsneCBJZ+rNtlG5kOwDscaSc1UbykQhvAo+Bd5oQbDhuwhJfbngK+ejmXgTYDO3QHauWjqwMb5IhuzkWjj2ECahP2tq8N4aV/Jr1oSOhGd3Rn5WnUixMhgfwOzZXxTagTW0LsnTuWMtNGr6u30jz5BrJySLkLXuBEtBNACPJD61uzsBBxcqnmhP84XwHpRD2ztIIshgXlWLLzFLHaK/2ModrODqtqrZjkTaAFWBpl+N/YqB9e6Kzr3Pe1k/Pv9vyH3KcXbCgMn4AvhhO1q4NZrg9PaZbQXh/T1/GV7M6Wm5tuwAdFtozH2fde7x6pYtwo= X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3439e3f-7727-423b-5026-08dee0ea23b2 X-MS-Exchange-CrossTenant-AuthSource: AM7PR10MB3956.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 14:22:16.5543 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YLgnqfzXKGxfM22qqpR5SUEwxkyxiE+rEg1Bg1BGyoZmyIC6BrLU4JRkONcNyy6yu4Lhqxf7pA61eEpoSsCNuXqsV6WtLCHLU2M2lAshdZI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PRAPR10MB5400 X-Original-Sender: felix.moessbauer@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=NDruJoqI; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of felix.moessbauer@siemens.com designates 2a01:111:f403:c201::3 as permitted sender) smtp.mailfrom=felix.moessbauer@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Felix Moessbauer Reply-To: Felix Moessbauer Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, RCVD_IN_RP_CERTIFIED,RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= OE-core Revision: 236ac1b43308df722a78d3aa20aef065dfae5b2b. Note, that this has to be done in a lockstep with the oe-libs update. Fixes: 50254447 ("meta: Update OE-libs to v5.0.3") Signed-off-by: Felix Moessbauer --- PS: I tested this in a CI environment that failed previously. However, I did not check if the sstate.bbclass had changes that were isar specific (a git log did not indicate that, though). I further did not check if other classes also need to be copied in for v5.0.3 update. Best regards, Felix meta/classes-global/sstate.bbclass | 256 +++++++++++++++++------------ 1 file changed, 147 insertions(+), 109 deletions(-) diff --git a/meta/classes-global/sstate.bbclass b/meta/classes-global/sstate.bbclass index 3513269b..76a7b596 100644 --- a/meta/classes-global/sstate.bbclass +++ b/meta/classes-global/sstate.bbclass @@ -1,4 +1,10 @@ -SSTATE_VERSION = "10" +# +# Copyright OpenEmbedded Contributors +# +# SPDX-License-Identifier: MIT +# + +SSTATE_VERSION = "12" SSTATE_ZSTD_CLEVEL ??= "8" @@ -49,8 +55,6 @@ PV[vardepvalue] = "${PV}" SSTATE_EXTRAPATH[vardepvalue] = "" SSTATE_EXTRAPATHWILDCARD[vardepvalue] = "" -# For multilib rpm the allarch packagegroup files can overwrite (in theory they're identical) -SSTATE_ALLOW_OVERLAP_FILES = "${DEPLOY_DIR}/licenses/" # Avoid docbook/sgml catalog warnings for now SSTATE_ALLOW_OVERLAP_FILES += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml" # sdk-provides-dummy-nativesdk and nativesdk-buildtools-perl-dummy overlap for different SDKMACHINE @@ -79,14 +83,15 @@ SSTATE_HASHEQUIV_FILEMAP ?= " \ BB_HASHFILENAME = "False ${SSTATE_PKGSPEC} ${SSTATE_SWSPEC}" +SSTATE_ARCHS_TUNEPKG ??= "${TUNE_PKGARCH}" SSTATE_ARCHS = " \ ${BUILD_ARCH} \ ${BUILD_ARCH}_${ORIGNATIVELSBSTRING} \ ${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS} \ ${SDK_ARCH}_${SDK_OS} \ - ${SDK_ARCH}_${PACKAGE_ARCH} \ + ${SDK_ARCH}_${SDK_ARCH}-${SDKPKGSUFFIX} \ allarch \ - ${PACKAGE_ARCH} \ + ${SSTATE_ARCHS_TUNEPKG} \ ${PACKAGE_EXTRA_ARCHS} \ ${MACHINE_ARCH}" SSTATE_ARCHS[vardepsexclude] = "ORIGNATIVELSBSTRING" @@ -262,7 +267,7 @@ def sstate_install(ss, d): overlap_allowed = (d.getVar("SSTATE_ALLOW_OVERLAP_FILES") or "").split() match = [] for f in sharedfiles: - if os.path.exists(f) and not os.path.islink(f): + if os.path.exists(f): f = os.path.normpath(f) realmatch = True for w in overlap_allowed: @@ -272,36 +277,18 @@ def sstate_install(ss, d): break if realmatch: match.append(f) - sstate_search_cmd = "grep -rlF '%s' %s --exclude=master.list | sed -e 's:^.*/::'" % (f, d.expand("${SSTATE_MANIFESTS}")) + sstate_search_cmd = "grep -rlF '%s' %s --exclude=index-* | sed -e 's:^.*/::'" % (f, d.expand("${SSTATE_MANIFESTS}")) search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] if search_output: match.append(" (matched in %s)" % search_output.decode('utf-8').rstrip()) else: match.append(" (not matched to any task)") if match: - bb.error("The recipe %s is trying to install files into a shared " \ - "area when those files already exist. Those files and their manifest " \ - "location are:\n %s\nPlease verify which recipe should provide the " \ - "above files.\n\nThe build has stopped, as continuing in this scenario WILL " \ - "break things - if not now, possibly in the future (we've seen builds fail " \ - "several months later). If the system knew how to recover from this " \ - "automatically it would, however there are several different scenarios " \ - "which can result in this and we don't know which one this is. It may be " \ - "you have switched providers of something like virtual/kernel (e.g. from " \ - "linux-yocto to linux-yocto-dev), in that case you need to execute the " \ - "clean task for both recipes and it will resolve this error. It may be " \ - "you changed DISTRO_FEATURES from systemd to udev or vice versa. Cleaning " \ - "those recipes should again resolve this error, however switching " \ - "DISTRO_FEATURES on an existing build directory is not supported - you " \ - "should really clean out tmp and rebuild (reusing sstate should be safe). " \ - "It could be the overlapping files detected are harmless in which case " \ - "adding them to SSTATE_ALLOW_OVERLAP_FILES may be the correct solution. It could " \ - "also be your build is including two different conflicting versions of " \ - "things (e.g. bluez 4 and bluez 5 and the correct solution for that would " \ - "be to resolve the conflict. If in doubt, please ask on the mailing list, " \ - "sharing the error and filelist above." % \ + bb.fatal("Recipe %s is trying to install files into a shared " \ + "area when those files already exist. The files and the manifests listing " \ + "them are:\n %s\n" + "Please adjust the recipes so only one recipe provides a given file. " % \ (d.getVar('PN'), "\n ".join(match))) - bb.fatal("If the above message is too much, the simpler version is you're advised to wipe out tmp and rebuild (reusing sstate is fine). That will likely fix things in most (but not all) cases.") if ss['fixmedir'] and os.path.exists(ss['fixmedir'] + "/fixmepath.cmd"): sharedfiles.append(ss['fixmedir'] + "/fixmepath.cmd") @@ -349,7 +336,7 @@ def sstate_install(ss, d): for lock in locks: bb.utils.unlockfile(lock) -sstate_install[vardepsexclude] += "SSTATE_ALLOW_OVERLAP_FILES STATE_MANMACH SSTATE_MANFILEPREFIX" +sstate_install[vardepsexclude] += "SSTATE_ALLOW_OVERLAP_FILES SSTATE_MANMACH SSTATE_MANFILEPREFIX" sstate_install[vardeps] += "${SSTATEPOSTINSTFUNCS}" def sstate_installpkg(ss, d): @@ -359,8 +346,9 @@ def sstate_installpkg(ss, d): d.setVar("SSTATE_CURRTASK", ss['task']) sstatefetch = d.getVar('SSTATE_PKGNAME') sstatepkg = d.getVar('SSTATE_PKG') + verify_sig = bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False) - if not os.path.exists(sstatepkg): + if not os.path.exists(sstatepkg) or (verify_sig and not os.path.exists(sstatepkg + '.sig')): pstaging_fetch(sstatefetch, d) if not os.path.isfile(sstatepkg): @@ -371,7 +359,7 @@ def sstate_installpkg(ss, d): d.setVar('SSTATE_INSTDIR', sstateinst) - if bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False): + if verify_sig: if not os.path.isfile(sstatepkg + '.sig'): bb.warn("No signature file for sstate package %s, skipping acceleration..." % sstatepkg) return False @@ -715,9 +703,7 @@ def sstate_package(ss, d): if d.getVar('SSTATE_SKIP_CREATION') == '1': return - sstate_create_package = ['sstate_report_unihash', 'sstate_create_package'] - if d.getVar('SSTATE_SIG_KEY'): - sstate_create_package.append('sstate_sign_package') + sstate_create_package = ['sstate_report_unihash', 'sstate_create_and_sign_package'] for f in (d.getVar('SSTATECREATEFUNCS') or '').split() + \ sstate_create_package + \ @@ -762,7 +748,6 @@ def pstaging_fetch(sstatefetch, d): localdata.setVar('FILESPATH', dldir) localdata.setVar('DL_DIR', dldir) localdata.setVar('PREMIRRORS', mirrors) - localdata.setVar('SRCPV', d.getVar('SRCPV')) # if BB_NO_NETWORK is set but we also have SSTATE_MIRROR_ALLOW_NETWORK, # we'll want to allow network access for the current set of fetches. @@ -778,6 +763,7 @@ def pstaging_fetch(sstatefetch, d): uris += ['file://{0}.sig;downloadfilename={0}.sig'.format(sstatefetch)] for srcuri in uris: + localdata.delVar('SRC_URI') localdata.setVar('SRC_URI', srcuri) try: fetcher = bb.fetch2.Fetch([srcuri], localdata, cache=False) @@ -787,9 +773,6 @@ def pstaging_fetch(sstatefetch, d): except bb.fetch2.BBFetchException: pass -pstaging_fetch[vardepsexclude] += "SRCPV" - - def sstate_setscene(d): shared_state = sstate_state_fromvars(d) accelerate = sstate_installpkg(shared_state, d) @@ -825,21 +808,100 @@ python sstate_task_postfunc () { } sstate_task_postfunc[dirs] = "${WORKDIR}" +# Create a sstate package +# If enabled, sign the package. +# Package and signature are created in a sub-directory +# and renamed in place once created. +python sstate_create_and_sign_package () { + from pathlib import Path -# -# Shell function to generate a sstate package from a directory -# set as SSTATE_BUILDDIR. Will be run from within SSTATE_BUILDDIR. -# -sstate_create_package () { - # Exit early if it already exists - if [ -e ${SSTATE_PKG} ]; then - touch ${SSTATE_PKG} 2>/dev/null || true - return - fi + # Best effort touch + def touch(file): + try: + file.touch() + except: + pass + + def update_file(src, dst, force=False): + if dst.is_symlink() and not dst.exists(): + force=True + try: + # This relies on that src is a temporary file that can be renamed + # or left as is. + if force: + src.rename(dst) + else: + os.link(src, dst) + return True + except: + pass + + if dst.exists(): + touch(dst) + + return False - mkdir --mode=0775 -p `dirname ${SSTATE_PKG}` - TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX` + sign_pkg = ( + bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG")) and + bool(d.getVar("SSTATE_SIG_KEY")) + ) + + sstate_pkg = Path(d.getVar("SSTATE_PKG")) + sstate_pkg_sig = Path(str(sstate_pkg) + ".sig") + if sign_pkg: + if sstate_pkg.exists() and sstate_pkg_sig.exists(): + touch(sstate_pkg) + touch(sstate_pkg_sig) + return + else: + if sstate_pkg.exists(): + touch(sstate_pkg) + return + # Create the required sstate directory if it is not present. + if not sstate_pkg.parent.is_dir(): + with bb.utils.umask(0o002): + bb.utils.mkdirhier(str(sstate_pkg.parent)) + + if sign_pkg: + from tempfile import TemporaryDirectory + with TemporaryDirectory(dir=sstate_pkg.parent) as tmp_dir: + tmp_pkg = Path(tmp_dir) / sstate_pkg.name + d.setVar("TMP_SSTATE_PKG", str(tmp_pkg)) + bb.build.exec_func('sstate_archive_package', d) + + from oe.gpg_sign import get_signer + signer = get_signer(d, 'local') + signer.detach_sign(str(tmp_pkg), d.getVar('SSTATE_SIG_KEY'), None, + d.getVar('SSTATE_SIG_PASSPHRASE'), armor=False) + + tmp_pkg_sig = Path(tmp_dir) / sstate_pkg_sig.name + if not update_file(tmp_pkg_sig, sstate_pkg_sig): + # If the created signature file could not be copied into place, + # then we should not use the sstate package either. + return + + # If the .sig file was updated, then the sstate package must also + # be updated. + update_file(tmp_pkg, sstate_pkg, force=True) + else: + from tempfile import NamedTemporaryFile + with NamedTemporaryFile(prefix=sstate_pkg.name, dir=sstate_pkg.parent) as tmp_pkg_fd: + tmp_pkg = tmp_pkg_fd.name + d.setVar("TMP_SSTATE_PKG", str(tmp_pkg)) + bb.build.exec_func('sstate_archive_package',d) + update_file(tmp_pkg, sstate_pkg) + # update_file() may have renamed tmp_pkg, which must exist when the + # NamedTemporaryFile() context handler ends. + touch(Path(tmp_pkg)) + +} + +# Shell function to generate a sstate package from a directory +# set as SSTATE_BUILDDIR. Will be run from within SSTATE_BUILDDIR. +# The calling function handles moving the sstate package into the final +# destination. +sstate_archive_package () { OPT="-cS" ZSTD="zstd -${SSTATE_ZSTD_CLEVEL} -T${ZSTD_THREADS}" # Use pzstd if available @@ -850,42 +912,18 @@ sstate_create_package () { # Need to handle empty directories if [ "$(ls -A)" ]; then set +e - tar -I "$ZSTD" $OPT -f $TFILE * + tar -I "$ZSTD" $OPT -f ${TMP_SSTATE_PKG} * ret=$? if [ $ret -ne 0 ] && [ $ret -ne 1 ]; then exit 1 fi set -e else - tar -I "$ZSTD" $OPT --file=$TFILE --files-from=/dev/null - fi - chmod 0664 $TFILE - # Skip if it was already created by some other process - if [ -h ${SSTATE_PKG} ] && [ ! -e ${SSTATE_PKG} ]; then - # There is a symbolic link, but it links to nothing. - # Forcefully replace it with the new file. - ln -f $TFILE ${SSTATE_PKG} || true - elif [ ! -e ${SSTATE_PKG} ]; then - # Move into place using ln to attempt an atomic op. - # Abort if it already exists - ln $TFILE ${SSTATE_PKG} || true - else - touch ${SSTATE_PKG} 2>/dev/null || true + tar -I "$ZSTD" $OPT --file=${TMP_SSTATE_PKG} --files-from=/dev/null fi - rm $TFILE + chmod 0664 ${TMP_SSTATE_PKG} } -python sstate_sign_package () { - from oe.gpg_sign import get_signer - - - signer = get_signer(d, 'local') - sstate_pkg = d.getVar('SSTATE_PKG') - if os.path.exists(sstate_pkg + '.sig'): - os.unlink(sstate_pkg + '.sig') - signer.detach_sign(sstate_pkg, d.getVar('SSTATE_SIG_KEY', False), None, - d.getVar('SSTATE_SIG_PASSPHRASE'), armor=False) -} python sstate_report_unihash() { report_unihash = getattr(bb.parse.siggen, 'report_unihash', None) @@ -918,6 +956,8 @@ sstate_unpack_package () { BB_HASHCHECK_FUNCTION = "sstate_checkhashes" def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, **kwargs): + import itertools + found = set() missed = set() @@ -950,6 +990,7 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, sstatefile = d.expand("${SSTATE_DIR}/" + getsstatefile(tid, siginfo, d)) if os.path.exists(sstatefile): + oe.utils.touch(sstatefile) found.add(tid) bb.debug(2, "SState: Found valid sstate file %s" % sstatefile) else: @@ -977,15 +1018,19 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, localdata.delVar('BB_NO_NETWORK') from bb.fetch2 import FetchConnectionCache - def checkstatus_init(thread_worker): - thread_worker.connection_cache = FetchConnectionCache() + def checkstatus_init(): + while not connection_cache_pool.full(): + connection_cache_pool.put(FetchConnectionCache()) - def checkstatus_end(thread_worker): - thread_worker.connection_cache.close_connections() + def checkstatus_end(): + while not connection_cache_pool.empty(): + connection_cache = connection_cache_pool.get() + connection_cache.close_connections() - def checkstatus(thread_worker, arg): + def checkstatus(arg): (tid, sstatefile) = arg + connection_cache = connection_cache_pool.get() localdata2 = bb.data.createCopy(localdata) srcuri = "file://" + sstatefile localdata2.setVar('SRC_URI', srcuri) @@ -995,7 +1040,7 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, try: fetcher = bb.fetch2.Fetch(srcuri.split(), localdata2, - connection_cache=thread_worker.connection_cache) + connection_cache=connection_cache) fetcher.checkstatus() bb.debug(2, "SState: Successful fetch test for %s" % srcuri) found.add(tid) @@ -1005,8 +1050,11 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, except Exception as e: bb.error("SState: cannot test %s: %s\n%s" % (srcuri, repr(e), traceback.format_exc())) + connection_cache_pool.put(connection_cache) + if progress: - bb.event.fire(bb.event.ProcessProgress(msg, len(tasklist) - thread_worker.tasks.qsize()), d) + bb.event.fire(bb.event.ProcessProgress(msg, next(cnt_tasks_done)), d) + bb.event.check_for_interrupts(d) tasklist = [] for tid in missed: @@ -1016,6 +1064,8 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, if tasklist: nproc = min(int(d.getVar("BB_NUMBER_THREADS")), len(tasklist)) + ## thread-safe counter + cnt_tasks_done = itertools.count(start = 1) progress = len(tasklist) >= 100 if progress: msg = "Checking sstate mirror object availability" @@ -1025,13 +1075,13 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, fetcherenv = bb.fetch2.get_fetcher_environment(d) with bb.utils.environment(**fetcherenv): bb.event.enable_threadlock() - pool = oe.utils.ThreadedPool(nproc, len(tasklist), - worker_init=checkstatus_init, worker_end=checkstatus_end, - name="sstate_checkhashes-") - for t in tasklist: - pool.add_task(checkstatus, t) - pool.start() - pool.wait_completion() + import concurrent.futures + from queue import Queue + connection_cache_pool = Queue(nproc) + checkstatus_init() + with concurrent.futures.ThreadPoolExecutor(max_workers=nproc) as executor: + executor.map(checkstatus, tasklist.copy()) + checkstatus_end() bb.event.disable_threadlock() if progress: @@ -1065,7 +1115,7 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, bb.parse.siggen.checkhashes(sq_data, missed, found, d) return found -setscene_depvalid[vardepsexclude] = "SSTATE_EXCLUDEDEPS_SYSROOT" +setscene_depvalid[vardepsexclude] = "SSTATE_EXCLUDEDEPS_SYSROOT _SSTATE_EXCLUDEDEPS_SYSROOT" BB_SETSCENE_DEPVALID = "setscene_depvalid" @@ -1084,7 +1134,7 @@ def setscene_depvalid(task, taskdependees, notneeded, d, log=None): logit("Considering setscene task: %s" % (str(taskdependees[task])), log) - directtasks = ["do_populate_lic", "do_deploy_source_date_epoch", "do_shared_workdir", "do_stash_locale", "do_gcc_stash_builddir", "do_create_spdx"] + directtasks = ["do_populate_lic", "do_deploy_source_date_epoch", "do_shared_workdir", "do_stash_locale", "do_gcc_stash_builddir", "do_create_spdx", "do_deploy_archives"] def isNativeCross(x): return x.endswith("-native") or "-cross-" in x or "-crosssdk" in x or x.endswith("-cross") @@ -1120,11 +1170,6 @@ def setscene_depvalid(task, taskdependees, notneeded, d, log=None): if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package', 'do_package_qa']: continue - # This is due to the [depends] in useradd.bbclass complicating matters - # The logic *is* reversed here due to the way hard setscene dependencies are injected - if (taskdependees[task][1] == 'do_package' or taskdependees[task][1] == 'do_populate_sysroot') and taskdependees[dep][0].endswith(('shadow-native', 'shadow-sysroot', 'base-passwd', 'pseudo-native')) and taskdependees[dep][1] == 'do_populate_sysroot': - continue - # Consider sysroot depending on sysroot tasks if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot': # Allow excluding certain recursive dependencies. If a recipe needs it should add a @@ -1187,16 +1232,7 @@ python sstate_eventhandler() { if not os.path.exists(siginfo): bb.siggen.dump_this_task(siginfo, d) else: - try: - os.utime(siginfo, None) - except PermissionError: - pass - except OSError as e: - # Handle read-only file systems gracefully - import errno - if e.errno != errno.EROFS: - raise e - + oe.utils.touch(siginfo) } SSTATE_PRUNE_OBSOLETEWORKDIR ?= "1" @@ -1278,6 +1314,7 @@ python sstate_eventhandler_reachablestamps() { lines.remove(r) removed = removed + 1 bb.event.fire(bb.event.ProcessProgress(msg, removed), d) + bb.event.check_for_interrupts(d) bb.event.fire(bb.event.ProcessFinished(msg), d) @@ -1347,6 +1384,7 @@ python sstate_eventhandler_stalesstate() { bb.utils.remove(stamp) removed = removed + 1 bb.event.fire(bb.event.ProcessProgress(msg, removed), d) + bb.event.check_for_interrupts(d) bb.event.fire(bb.event.ProcessFinished(msg), d) }