lol
1{ stdenv, fetchurl, sbclBootstrap, clisp, which}:
2
3stdenv.mkDerivation rec {
4 name = "sbcl-${version}";
5 version = "1.2.5";
6
7 src = fetchurl {
8 url = "mirror://sourceforge/project/sbcl/sbcl/${version}/${name}-source.tar.bz2";
9 sha256 = "0nmb9amygr5flzk2z9fa6wzwqknbgd2qrkybxkxkamvbdwyayvzr";
10 };
11
12 buildInputs = [ which ]
13 ++ (stdenv.lib.optional stdenv.isDarwin sbclBootstrap)
14 ++ (stdenv.lib.optional stdenv.isLinux clisp)
15 ;
16
17 patchPhase = ''
18 echo '"${version}.nixos"' > version.lisp-expr
19 echo "
20 (lambda (features)
21 (flet ((enable (x)
22 (pushnew x features))
23 (disable (x)
24 (setf features (remove x features))))
25 (enable :sb-thread))) " > customize-target-features.lisp
26
27 pwd
28
29 # SBCL checks whether files are up-to-date in many places..
30 # Unfortunately, same timestamp is not good enough
31 sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp
32 sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp
33 sed -i src/cold/slam.lisp -e \
34 '/file-write-date input/a)'
35 sed -i src/cold/slam.lisp -e \
36 '/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))'
37 sed -i src/code/target-load.lisp -e \
38 '/date defaulted-fasl/a)'
39 sed -i src/code/target-load.lisp -e \
40 '/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))'
41
42 # Fix software version retrieval
43 sed -e "s@/bin/uname@$(which uname)@g" -i src/code/*-os.lisp
44
45 # Fix the tests
46 sed -e '/deftest pwent/inil' -i contrib/sb-posix/posix-tests.lisp
47 sed -e '/deftest grent/inil' -i contrib/sb-posix/posix-tests.lisp
48 sed -e '/deftest .*ent.non-existing/,+5d' -i contrib/sb-posix/posix-tests.lisp
49 sed -e '/deftest \(pw\|gr\)ent/,+3d' -i contrib/sb-posix/posix-tests.lisp
50
51 sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp
52 sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp
53
54 # Use whatever `cc` the stdenv provides
55 substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc
56 '';
57
58 preBuild = ''
59 export INSTALL_ROOT=$out
60 mkdir -p test-home
61 export HOME=$PWD/test-home
62 '';
63
64 buildPhase = if stdenv.isLinux
65 then ''
66 sh make.sh clisp --prefix=$out
67 ''
68 else ''
69 sh make.sh --prefix=$out --xc-host='${sbclBootstrap}/bin/sbcl --core ${sbclBootstrap}/share/sbcl/sbcl.core --disable-debugger --no-userinit --no-sysinit'
70 '';
71
72 installPhase = ''
73 INSTALL_ROOT=$out sh install.sh
74 '';
75
76 meta = {
77 description = "Lisp compiler";
78 homepage = http://www.sbcl.org;
79 license = stdenv.lib.licenses.bsd3;
80 maintainers = [stdenv.lib.maintainers.raskin];
81 platforms = stdenv.lib.platforms.all;
82 inherit version;
83 };
84}