Merge pull request #187636 from tjni/cffi

python310Packages.cffi: patch closures to work on M1 machines
This commit is contained in:
Domen Kožar
2022-11-28 13:17:44 +00:00
committed by GitHub
4 changed files with 92 additions and 5 deletions
@@ -0,0 +1,21 @@
diff -r bac92fcfe4d7 c/_cffi_backend.c
--- a/c/_cffi_backend.c Mon Jul 18 15:58:34 2022 +0200
+++ b/c/_cffi_backend.c Sat Aug 20 12:38:31 2022 -0700
@@ -96,7 +96,7 @@
# define CFFI_CHECK_FFI_PREP_CIF_VAR 0
# define CFFI_CHECK_FFI_PREP_CIF_VAR_MAYBE 0
-#elif defined(__APPLE__) && defined(FFI_AVAILABLE_APPLE)
+#elif defined(__APPLE__)
# define CFFI_CHECK_FFI_CLOSURE_ALLOC __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
# define CFFI_CHECK_FFI_CLOSURE_ALLOC_MAYBE 1
@@ -6413,7 +6413,7 @@
else
#endif
{
-#if defined(__APPLE__) && defined(FFI_AVAILABLE_APPLE) && !FFI_LEGACY_CLOSURE_API
+#if defined(__APPLE__) && !FFI_LEGACY_CLOSURE_API
PyErr_Format(PyExc_SystemError, "ffi_prep_closure_loc() is missing");
goto error;
#else
@@ -1,5 +1,12 @@
{ lib, stdenv, buildPythonPackage, isPyPy, fetchPypi, pytestCheckHook,
libffi, pkg-config, pycparser
{ lib
, stdenv
, buildPythonPackage
, isPyPy
, fetchPypi
, pytestCheckHook
, libffi
, pkg-config
, pycparser
}:
if isPyPy then null else buildPythonPackage rec {
@@ -11,6 +18,20 @@ if isPyPy then null else buildPythonPackage rec {
sha256 = "sha256-1AC/uaN7E1ElPLQCZxzqfom97MKU6AFqcH9tHYrJNPk=";
};
patches = [
#
# Trusts the libffi library inside of nixpkgs on Apple devices.
#
# Based on some analysis I did:
#
# https://groups.google.com/g/python-cffi/c/xU0Usa8dvhk
#
# I believe that libffi already contains the code from Apple's fork that is
# deemed safe to trust in cffi.
#
./darwin-use-libffi-closures.diff
];
buildInputs = [ libffi ];
nativeBuildInputs = [ pkg-config ];
@@ -29,9 +50,7 @@ if isPyPy then null else buildPythonPackage rec {
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang
"-Wno-unused-command-line-argument -Wno-unreachable-code -Wno-c++11-narrowing";
# Lots of tests fail on aarch64-darwin due to "Cannot allocate write+execute memory":
# * https://cffi.readthedocs.io/en/latest/using.html#callbacks
doCheck = !stdenv.hostPlatform.isMusl && !(stdenv.isDarwin && stdenv.isAarch64);
doCheck = !stdenv.hostPlatform.isMusl;
checkInputs = [ pytestCheckHook ];
@@ -0,0 +1,45 @@
{ lib, stdenv, cffi }:
if cffi == null then null else cffi.overridePythonAttrs {
disabledTests = lib.optionals stdenv.isDarwin [
# cannot load library 'c'
"test_FILE"
"test_FILE_object"
"test_FILE_only_for_FILE_arg"
"test_load_and_call_function"
"test_load_library"
# cannot load library 'dl'
"test_dlopen_handle"
# cannot load library 'm'
"test_dir_on_dlopen_lib"
"test_dlclose"
"test_dlopen"
"test_dlopen_constant"
"test_dlopen_flags"
"test_function_typedef"
"test_line_continuation_in_defines"
"test_missing_function"
"test_remove_comments"
"test_remove_line_continuation_comments"
"test_simple"
"test_sin"
"test_sinf"
"test_stdcall_only_on_windows"
"test_wraps_from_stdlib"
# MemoryError
"test_callback_as_function_argument"
"test_callback_crash"
"test_callback_decorator"
"test_callback_large_struct"
"test_callback_returning_void"
"test_cast_functionptr_and_int"
"test_function_pointer"
"test_functionptr_intptr_return"
"test_functionptr_simple"
"test_functionptr_void_return"
"test_functionptr_voidptr_return"
];
}
+2
View File
@@ -15,6 +15,8 @@ with self; with super; {
certifi = callPackage ../development/python2-modules/certifi { };
cffi = callPackage ../development/python2-modules/cffi { inherit cffi; };
chardet = callPackage ../development/python2-modules/chardet { };
cheetah = callPackage ../development/python2-modules/cheetah { };