diff --git a/pkgs/development/python-modules/tpm2-pytss/cross.patch b/pkgs/development/python-modules/tpm2-pytss/cross.patch new file mode 100644 index 000000000000..8fa2956c11d0 --- /dev/null +++ b/pkgs/development/python-modules/tpm2-pytss/cross.patch @@ -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") diff --git a/pkgs/development/python-modules/tpm2-pytss/default.nix b/pkgs/development/python-modules/tpm2-pytss/default.nix index 484f3dc2d16e..7b5fd56b0a10 100644 --- a/pkgs/development/python-modules/tpm2-pytss/default.nix +++ b/pkgs/development/python-modules/tpm2-pytss/default.nix @@ -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 = ''