ccef83bd40
* Use --with-gmp-incdir and --with-gmp-libdir (like for the main ecl derivation), so ecl can figure out the flags to pass on its own. Remove NIX_LDFLAGS hack for gmp. * Make sure ecl can find boehmgc when linking programs / libraries via NIX_LDFLAGS. Pass correct -I for boehmgc via NIX_CFLAGS_COMPILE since there's no --with-boehmgc-prefix configure flag to achieve the same result. * Use correct suffixSalt for every flag. This makes NIX_CFLAGS_COMPILE work properly in the first place and should prevent the extra flags hacks leaking into other places in some edge cases.
97 lines
3.2 KiB
Nix
97 lines
3.2 KiB
Nix
{ lib, stdenv, fetchurl, fetchpatch
|
|
, libtool, autoconf, automake
|
|
, gmp, mpfr, libffi, makeWrapper
|
|
, noUnicode ? false
|
|
, gcc
|
|
, threadSupport ? false
|
|
, useBoehmgc ? true, boehmgc
|
|
}:
|
|
|
|
assert useBoehmgc -> boehmgc != null;
|
|
|
|
let
|
|
s = # Generated upstream information
|
|
rec {
|
|
baseName="ecl";
|
|
version="16.1.2";
|
|
name="${baseName}-${version}";
|
|
url="https://common-lisp.net/project/ecl/static/files/release/ecl-16.1.2.tgz";
|
|
sha256="16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d";
|
|
};
|
|
buildInputs = [
|
|
libtool autoconf automake makeWrapper
|
|
];
|
|
propagatedBuildInputs = [
|
|
libffi gmp mpfr gcc
|
|
] ++ lib.optionals useBoehmgc [
|
|
# replaces ecl's own gc which other packages can depend on, thus propagated
|
|
boehmgc
|
|
];
|
|
in
|
|
stdenv.mkDerivation {
|
|
inherit (s) name version;
|
|
inherit buildInputs propagatedBuildInputs;
|
|
|
|
src = fetchurl {
|
|
inherit (s) url sha256;
|
|
};
|
|
|
|
configureFlags = [
|
|
(if threadSupport then "--enable-threads" else "--disable-threads")
|
|
"--with-gmp-incdir=${lib.getDev gmp}/include"
|
|
"--with-gmp-libdir=${lib.getLib gmp}/lib"
|
|
# -incdir, -libdir doesn't seem to be supported for libffi
|
|
"--with-libffi-prefix=${lib.getDev libffi}"
|
|
]
|
|
++
|
|
(lib.optional (! noUnicode)
|
|
"--enable-unicode")
|
|
;
|
|
|
|
patches = [
|
|
(fetchpatch {
|
|
# Avoid infinite loop, see https://gitlab.com/embeddable-common-lisp/ecl/issues/43 (fixed upstream)
|
|
name = "avoid-infinite-loop.patch";
|
|
url = "https://gitlab.com/embeddable-common-lisp/ecl/commit/caba1989f40ef917e7486f41b9cd5c7e3c5c2d79.patch";
|
|
sha256 = "07vw91psbc9gdn8grql46ra8lq3bgkzg5v480chnbryna4sv6lbb";
|
|
})
|
|
(fetchpatch {
|
|
# Fix getcwd with long pathnames
|
|
# Rebased version of
|
|
# https://gitlab.com/embeddable-common-lisp/ecl/commit/ac5f011f57a85a38627af154bc3ee7580e7fecd4.patch
|
|
name = "getcwd.patch";
|
|
url = "https://git.sagemath.org/sage.git/plain/build/pkgs/ecl/patches/16.1.2-getcwd.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
|
|
sha256 = "1fbi8gn7rv8nqff5mpaijsrch3k3z7qc5cn4h1vl8qrr8xwqlqhb";
|
|
})
|
|
./ecl-1.16.2-libffi-3.3-abi.patch
|
|
];
|
|
|
|
hardeningDisable = [ "format" ];
|
|
|
|
postInstall = ''
|
|
sed -e 's/@[-a-zA-Z_]*@//g' -i $out/bin/ecl-config
|
|
wrapProgram "$out/bin/ecl" \
|
|
--prefix PATH ':' "${gcc}/bin" \
|
|
''
|
|
# ecl 16.1.2 is too old to have -libdir for libffi and boehmgc, so we need to
|
|
# use NIX_LDFLAGS_BEFORE to make gcc find these particular libraries.
|
|
# Since it is missing even the prefix flag for boehmgc we also need to inject
|
|
# the correct -I flag via NIX_CFLAGS_COMPILE. Since we have access to it, we
|
|
# create the variables with suffixSalt (which seems to be necessary for
|
|
# NIX_CFLAGS_COMPILE even).
|
|
+ lib.optionalString useBoehmgc ''
|
|
--prefix NIX_CFLAGS_COMPILE_${gcc.suffixSalt} ' ' "-I${lib.getDev boehmgc}/include" \
|
|
--prefix NIX_LDFLAGS_BEFORE_${gcc.bintools.suffixSalt} ' ' "-L${lib.getLib boehmgc}/lib" \
|
|
'' + ''
|
|
--prefix NIX_LDFLAGS_BEFORE_${gcc.bintools.suffixSalt} ' ' "-L${lib.getLib libffi}/lib"
|
|
'';
|
|
|
|
meta = {
|
|
inherit (s) version;
|
|
description = "Lisp implementation aiming to be small, fast and easy to embed";
|
|
license = lib.licenses.mit ;
|
|
maintainers = [lib.maintainers.raskin];
|
|
platforms = lib.platforms.unix;
|
|
};
|
|
}
|