python311Packages.tpm2-pytss: fix cross-compilation

When tpm2-pytss builds, it will parse headers files from tpm2-tss. Those
files are fed through cpp via pycparser.

Because our cross-compilation environment uses prefixed binaries like
`aarch64-unknown-linux-gnu-cpp`, those can't be found by pycparser.

This adds a patch to the setup.py to provide the name of the binary.

Fixes #302878
This commit is contained in:
Arthur Gautier 2024-04-09 20:50:06 -07:00
parent 1049436671
commit bd17c30c75
2 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,22 @@
diff --git a/setup.py b/setup.py
index 1b5f513..d660b9a 100644
--- a/setup.py
+++ b/setup.py
@@ -184,7 +184,8 @@ class type_generator(build_ext):
f"unable to find tss2_tpm2_types.h in {pk['include_dirs']}"
)
pdata = preprocess_file(
- header_path, cpp_args=["-D__extension__=", "-D__attribute__(x)="]
+ header_path, cpp_args=["-D__extension__=", "-D__attribute__(x)="],
+ cpp_path="@crossPrefix@-cpp",
)
parser = c_parser.CParser()
ast = parser.parse(pdata, "tss2_tpm2_types.h")
@@ -210,6 +211,7 @@ class type_generator(build_ext):
"-D__float128=long double",
"-D_FORTIFY_SOURCE=0",
],
+ cpp_path="@crossPrefix@-cpp",
)
parser = c_parser.CParser()
past = parser.parse(pdata, "tss2_policy.h")

View File

@ -1,4 +1,6 @@
{ lib
, stdenv
, substituteAll
, buildPythonPackage
, fetchPypi
, pythonOlder
@ -17,6 +19,9 @@
, swtpm
}:
let
isCross = (stdenv.buildPlatform != stdenv.hostPlatform);
in
buildPythonPackage rec {
pname = "tpm2-pytss";
version = "2.2.1";
@ -32,6 +37,18 @@ buildPythonPackage rec {
patches = [
# Fix hardcoded `fapi-config.json` configuration path
./fapi-config.patch
] ++ lib.optionals isCross [
# pytss will regenerate files from headers of tpm2-tss.
# Those headers are fed through a compiler via pycparser. pycparser expects `cpp`
# to be in the path.
# This is put in the path via stdenv when not cross-compiling, but this is absent
# when cross-compiling is turned on.
# This patch changes the call to pycparser.preprocess_file to provide the name
# of the cross-compiling cpp
(substituteAll {
src = ./cross.patch;
crossPrefix = stdenv.hostPlatform.config;
})
];
postPatch = ''