mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-26 06:44:06 +00:00
baed870448
Without this patch, the following build error occurs for me on NixOS: ``` $ nix-build -A clisp --check <snipped> Running phase: buildPhase build flags: SHELL=/nix/store/q8qq40xg2grfh9ry1d9x4g7lq4ra7n81-bash-5.2-p21/bin/bash ln -s ../src/.gdbinit .gdbinit rm -f build-aux ln -s ../src/build-aux build-aux mkdir -p gllib test -f gllib/Makefile || sh config.status gllib/Makefile depfiles cd gllib && make CFLAGS="-g -O2 -no-integrated-cpp -W -Wswitch -Wcomment -Wpointer-arith -Wreturn-type -Wmissing-declarations -Wimplicit -Wno-sign-compare -Wno-format-nonliteral -Wno-shift-negative-value -O -fwrapv -pthread -fno-strict-aliasing -DNO_ASM -DENABLE_UNICODE -DMULTITHREAD -DPOSIX_THREADS -DDYNAMIC_FFI -DDYNAMIC_MODULES -fPIC -DPIC " top_srcdir="/build/source/src" make[1]: Entering directory '/build/source/builddir/gllib' cd /build/source/src && /nix/store/q8qq40xg2grfh9ry1d9x4g7lq4ra7n81-bash-5.2-p21/bin/bash /build/source/src/build-aux/missing automake-1.16 --gnits gllib/Makefile /build/source/src/build-aux/missing: line 81: automake-1.16: command not found WARNING: 'automake-1.16' is missing on your system. You should only need it if you modified 'Makefile.am' or 'configure.ac' or m4 files included by 'configure.ac'. The 'automake' program is part of the GNU Automake package: <https://www.gnu.org/software/automake> It also requires GNU Autoconf, GNU m4 and Perl in order to run: <https://www.gnu.org/software/autoconf> <https://www.gnu.org/software/m4/> <https://www.perl.org/> make[1]: *** [Makefile:1333: ../../src/gllib/Makefile.in] Error 127 make[1]: Leaving directory '/build/source/builddir/gllib' make: *** [Makefile:648: gllib/libgnu.a] Error 2 ``` This message was also reproduced by @2xsaiko on their NAS machine. I don't know why this error sometimes occurs and sometimes does not. On my Ubuntu machines, this error does not occur, and instead it does this: ``` Running phase: buildPhase build flags: SHELL=/nix/store/q8qq40xg2grfh9ry1d9x4g7lq4ra7n81-bash-5.2-p21/bin/bash ln -s ../src/.gdbinit .gdbinit rm -f build-aux ln -s ../src/build-aux build-aux mkdir -p gllib test -f gllib/Makefile || sh config.status gllib/Makefile depfiles cd gllib && make CFLAGS="-g -O2 -no-integrated-cpp -W -Wswitch -Wcomment -Wpointer-arith -Wreturn-type -Wmissing-declarations -Wimplicit -Wno-sign-compare -Wno-format-nonliteral -Wno-shift-negative-value -O -fwrapv -pthread -fno-strict-aliasing -DNO_ASM -DENABLE_UNICODE -DMULTITHREAD -DPOSIX_THREADS -DDYNAMIC_FFI -DDYNAMIC_MODULES -fPIC -DPIC " top_srcdir="/build/source/src" make[1]: Entering directory '/build/source/builddir/gllib' make[2]: Entering directory '/build/source/builddir' make[2]: Nothing to be done for 'am--refresh'. make[2]: Leaving directory '/build/source/builddir' cd .. && make am--refresh make[2]: Entering directory '/build/source/builddir' make[2]: Nothing to be done for 'am--refresh'. make[2]: Leaving directory '/build/source/builddir' <snipped> ``` In any case, these changes work successfully on all platforms I've tested them on: 1. NixOS 2. Ubuntu 22.04 3. MacOS x86_64 4. MacOS aarch64
134 lines
3.9 KiB
Nix
134 lines
3.9 KiB
Nix
# there are the following linking sets:
|
|
# - boot (not installed): without modules, only used when building clisp
|
|
# - base (default): contains readline and i18n, regexp and syscalls modules
|
|
# by default
|
|
# - full: contains base plus modules in withModules
|
|
{ lib
|
|
, stdenv
|
|
, fetchFromGitLab
|
|
, autoconf269
|
|
, automake
|
|
, libtool
|
|
, libsigsegv
|
|
, gettext
|
|
, ncurses
|
|
, pcre
|
|
, zlib
|
|
, readline
|
|
, libffi
|
|
, libffcall
|
|
, libX11
|
|
, libXau
|
|
, libXt
|
|
, libXpm
|
|
, libXext
|
|
, xorgproto
|
|
, coreutils
|
|
# build options
|
|
, threadSupport ? (stdenv.hostPlatform.isx86 && ! stdenv.hostPlatform.isDarwin)
|
|
, x11Support ? (stdenv.hostPlatform.isx86 && ! stdenv.hostPlatform.isDarwin)
|
|
, dllSupport ? true
|
|
, withModules ? [
|
|
"asdf"
|
|
"pcre"
|
|
"rawsock"
|
|
]
|
|
++ lib.optionals stdenv.isLinux [ "bindings/glibc" "zlib" ]
|
|
++ lib.optional x11Support "clx/new-clx"
|
|
}:
|
|
|
|
assert x11Support -> (libX11 != null && libXau != null && libXt != null
|
|
&& libXpm != null && xorgproto != null && libXext != null);
|
|
|
|
let
|
|
ffcallAvailable = stdenv.isLinux && (libffcall != null);
|
|
# Some modules need autoreconf called in their directory.
|
|
shouldReconfModule = name: name != "asdf";
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
version = "2.50pre20230112";
|
|
pname = "clisp";
|
|
|
|
src = fetchFromGitLab {
|
|
owner = "gnu-clisp";
|
|
repo = "clisp";
|
|
rev = "bf72805c4dace982a6d3399ff4e7f7d5e77ab99a";
|
|
hash = "sha256-sQoN2FUg9BPaCgvCF91lFsU/zLja1NrgWsEIr2cPiqo=";
|
|
};
|
|
|
|
strictDeps = true;
|
|
nativeBuildInputs = [ autoconf269 automake libtool ];
|
|
buildInputs = [libsigsegv]
|
|
++ lib.optional (gettext != null) gettext
|
|
++ lib.optional (ncurses != null) ncurses
|
|
++ lib.optional (pcre != null) pcre
|
|
++ lib.optional (zlib != null) zlib
|
|
++ lib.optional (readline != null) readline
|
|
++ lib.optional (ffcallAvailable && (libffi != null)) libffi
|
|
++ lib.optional ffcallAvailable libffcall
|
|
++ lib.optionals x11Support [
|
|
libX11 libXau libXt libXpm xorgproto libXext
|
|
];
|
|
|
|
patches = [
|
|
./gnulib_aarch64.patch
|
|
];
|
|
|
|
# First, replace port 9090 (rather low, can be used)
|
|
# with 64237 (much higher, IANA private area, not
|
|
# anything rememberable).
|
|
postPatch = ''
|
|
sed -e 's@9090@64237@g' -i tests/socket.tst
|
|
sed -i 's@/bin/pwd@${coreutils}&@' src/clisp-link.in
|
|
sed -i 's@1\.16\.2@${automake.version}@' src/aclocal.m4
|
|
find . -type f | xargs sed -e 's/-lICE/-lXau &/' -i
|
|
'';
|
|
|
|
preConfigure = lib.optionalString stdenv.isDarwin (''
|
|
(
|
|
cd src
|
|
autoreconf -f -i -I m4 -I glm4
|
|
)
|
|
'' + lib.concatMapStrings (x: ''
|
|
(
|
|
root="$PWD"
|
|
cd modules/${x}
|
|
autoreconf -f -i -I "$root/src" -I "$root/src/m4" -I "$root/src/glm4"
|
|
)
|
|
'') (builtins.filter shouldReconfModule withModules));
|
|
|
|
configureFlags = [ "builddir" ]
|
|
++ lib.optional (!dllSupport) "--without-dynamic-modules"
|
|
++ lib.optional (readline != null) "--with-readline"
|
|
# --with-dynamic-ffi can only exist with --with-ffcall - foreign.d does not compile otherwise
|
|
++ lib.optional (ffcallAvailable && (libffi != null)) "--with-dynamic-ffi"
|
|
++ lib.optional ffcallAvailable "--with-ffcall"
|
|
++ lib.optional (!ffcallAvailable) "--without-ffcall"
|
|
++ builtins.map (x: " --with-module=" + x) withModules
|
|
++ lib.optional threadSupport "--with-threads=POSIX_THREADS";
|
|
|
|
preBuild = ''
|
|
sed -e '/avcall.h/a\#include "config.h"' -i src/foreign.d
|
|
sed -i -re '/ cfree /d' -i modules/bindings/glibc/linux.lisp
|
|
cd builddir
|
|
'';
|
|
|
|
doCheck = true;
|
|
|
|
postInstall =
|
|
lib.optionalString (withModules != [])
|
|
(''./clisp-link add "$out"/lib/clisp*/base "$(dirname "$out"/lib/clisp*/base)"/full''
|
|
+ lib.concatMapStrings (x: " " + x) withModules);
|
|
|
|
env.NIX_CFLAGS_COMPILE = "-O0 -falign-functions=${if stdenv.is64bit then "8" else "4"}";
|
|
|
|
meta = {
|
|
description = "ANSI Common Lisp Implementation";
|
|
homepage = "http://clisp.org";
|
|
maintainers = lib.teams.lisp.members;
|
|
license = lib.licenses.gpl2Plus;
|
|
platforms = with lib.platforms; linux ++ darwin;
|
|
};
|
|
}
|