Merge pull request #187636 from tjni/cffi
python310Packages.cffi: patch closures to work on M1 machines
This commit is contained in:
@@ -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"
|
||||
];
|
||||
}
|
||||
@@ -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 { };
|
||||
|
||||
Reference in New Issue
Block a user