diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libffi')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/libffi/3.2.1-cygwin.patch | 10 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/libraries/libffi/default.nix | 96 |
2 files changed, 106 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libffi/3.2.1-cygwin.patch b/nixpkgs/pkgs/development/libraries/libffi/3.2.1-cygwin.patch new file mode 100644 index 000000000000..f3b38dbd1c16 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libffi/3.2.1-cygwin.patch @@ -0,0 +1,10 @@ +--- libffi-3.2.1/src/closures.c 2014-11-08 13:47:24.000000000 +0100 ++++ libffi-3.2.1/src/closures.c 2015-05-19 10:15:50.059325900 +0200 +@@ -212,6 +212,7 @@ + #include <sys/mman.h> + + /* Cygwin is Linux-like, but not quite that Linux-like. */ ++#define is_emutramp_enabled() 0 + #define is_selinux_enabled() 0 + + #endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ diff --git a/nixpkgs/pkgs/development/libraries/libffi/default.nix b/nixpkgs/pkgs/development/libraries/libffi/default.nix new file mode 100644 index 000000000000..2918276ef211 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libffi/default.nix @@ -0,0 +1,96 @@ +{ stdenv, fetchurl, fetchpatch +, autoreconfHook + +# libffi is used in darwin stdenv +# we cannot run checks within it +, doCheck ? !stdenv.isDarwin, dejagnu +}: + +stdenv.mkDerivation rec { + name = "libffi-3.2.1"; + + src = fetchurl { + url = "https://sourceware.org/pub/libffi/${name}.tar.gz"; + sha256 = "0dya49bnhianl0r65m65xndz6ls2jn1xngyn72gd28ls3n7bnvnh"; + }; + + patches = stdenv.lib.optional stdenv.isCygwin ./3.2.1-cygwin.patch + ++ stdenv.lib.optional stdenv.isAarch64 (fetchpatch { + url = https://src.fedoraproject.org/rpms/libffi/raw/ccffc1700abfadb0969495a6e51b964117fc03f6/f/libffi-aarch64-rhbz1174037.patch; + sha256 = "1vpirrgny43hp0885rswgv3xski8hg7791vskpbg3wdjdpb20wbc"; + }) + ++ stdenv.lib.optional stdenv.hostPlatform.isMusl (fetchpatch { + name = "gnu-linux-define.patch"; + url = "https://git.alpinelinux.org/cgit/aports/plain/main/libffi/gnu-linux-define.patch?id=bb024fd8ec6f27a76d88396c9f7c5c4b5800d580"; + sha256 = "11pvy3xkhyvnjfyy293v51f1xjy3x0azrahv1nw9y9mw8bifa2j2"; + }) + ++ stdenv.lib.optional stdenv.hostPlatform.isRiscV (fetchpatch { + name = "riscv-support.patch"; + url = https://github.com/sorear/libffi-riscv/commit/e46492e8bb1695a19bc1053ed869e6c2bab02ff2.patch; + sha256 = "1vl1vbvdkigs617kckxvj8j4m2cwg62kxm1clav1w5rnw9afxg0y"; + }) + ++ stdenv.lib.optionals stdenv.isMips [ + (fetchpatch { + name = "0001-mips-Use-compiler-internal-define-for-linux.patch"; + url = "http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-support/libffi/libffi/0001-mips-Use-compiler-internal-define-for-linux.patch?id=318e33a708378652edcf61ce7d9d7f3a07743000"; + sha256 = "1gc53lw90p6hc0cmhj3csrwincfz7va5ss995ksw5gm0yrr9mrvb"; + }) + (fetchpatch { + name = "0001-mips-fix-MIPS-softfloat-build-issue.patch"; + url = "http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-support/libffi/libffi/0001-mips-fix-MIPS-softfloat-build-issue.patch?id=318e33a708378652edcf61ce7d9d7f3a07743000"; + sha256 = "0l8xgdciqalg4z9rcwyk87h8fdxpfv4hfqxwsy2agpnpszl5jjdq"; + }) + ]; + + outputs = [ "out" "dev" "man" "info" ]; + + nativeBuildInputs = stdenv.lib.optional stdenv.hostPlatform.isRiscV autoreconfHook; + + configureFlags = [ + "--with-gcc-arch=generic" # no detection of -march= or -mtune= + "--enable-pax_emutramp" + ]; + + preCheck = '' + # The tests use -O0 which is not compatible with -D_FORTIFY_SOURCE. + NIX_HARDENING_ENABLE=''${NIX_HARDENING_ENABLE/fortify/} + ''; + + checkInputs = [ dejagnu ]; + + inherit doCheck; + + dontStrip = stdenv.hostPlatform != stdenv.buildPlatform; # Don't run the native `strip' when cross-compiling. + + # Install headers and libs in the right places. + postFixup = '' + mkdir -p "$dev/" + mv "$out/lib/${name}/include" "$dev/include" + rmdir "$out/lib/${name}" + substituteInPlace "$dev/lib/pkgconfig/libffi.pc" \ + --replace 'includedir=''${libdir}/libffi-3.2.1' "includedir=$dev" + ''; + + meta = with stdenv.lib; { + description = "A foreign function call interface library"; + longDescription = '' + The libffi library provides a portable, high level programming + interface to various calling conventions. This allows a + programmer to call any function specified by a call interface + description at run-time. + + FFI stands for Foreign Function Interface. A foreign function + interface is the popular name for the interface that allows code + written in one language to call code written in another + language. The libffi library really only provides the lowest, + machine dependent layer of a fully featured foreign function + interface. A layer must exist above libffi that handles type + conversions for values passed between the two languages. + ''; + homepage = http://sourceware.org/libffi/; + # See https://github.com/atgreen/libffi/blob/master/LICENSE . + license = licenses.free; + maintainers = [ ]; + platforms = platforms.all; + }; +} |