From 85b6efff7cac3d455228b0207266431ba9e05570 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Sun, 28 Mar 2021 16:40:56 +0200 Subject: [PATCH] quicklispPackages: improve non-SBCL support --- .../cffi-uffi-compat.nix | 31 +++++++++++ .../cl-speedy-queue.nix | 26 ++++++++++ .../quicklisp-to-nix-output/cl-syslog.nix | 33 ++++++++++++ .../quicklisp-to-nix-overrides.nix | 47 ++++++++++++++--- .../lisp-modules/quicklisp-to-nix-systems.txt | 3 ++ .../lisp-modules/quicklisp-to-nix.nix | 52 ++++++++++++++++--- 6 files changed, 178 insertions(+), 14 deletions(-) create mode 100644 pkgs/development/lisp-modules/quicklisp-to-nix-output/cffi-uffi-compat.nix create mode 100644 pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-speedy-queue.nix create mode 100644 pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-syslog.nix diff --git a/pkgs/development/lisp-modules/quicklisp-to-nix-output/cffi-uffi-compat.nix b/pkgs/development/lisp-modules/quicklisp-to-nix-output/cffi-uffi-compat.nix new file mode 100644 index 000000000000..49d8a74df3ec --- /dev/null +++ b/pkgs/development/lisp-modules/quicklisp-to-nix-output/cffi-uffi-compat.nix @@ -0,0 +1,31 @@ +args @ { fetchurl, ... }: +rec { + baseName = ''cffi-uffi-compat''; + version = ''cffi_0.23.0''; + + description = ''UFFI Compatibility Layer for CFFI''; + + deps = [ args."alexandria" args."babel" args."cffi" args."trivial-features" ]; + + src = fetchurl { + url = ''http://beta.quicklisp.org/archive/cffi/2020-07-15/cffi_0.23.0.tgz''; + sha256 = ''1szpbg5m5fjq7bpkblflpnwmgz3ncsvp1y43g3jzwlk7yfxrwxck''; + }; + + packageName = "cffi-uffi-compat"; + + asdFilesToKeep = ["cffi-uffi-compat.asd"]; + overrides = x: x; +} +/* (SYSTEM cffi-uffi-compat DESCRIPTION UFFI Compatibility Layer for CFFI + SHA256 1szpbg5m5fjq7bpkblflpnwmgz3ncsvp1y43g3jzwlk7yfxrwxck URL + http://beta.quicklisp.org/archive/cffi/2020-07-15/cffi_0.23.0.tgz MD5 + a43e3c440fc4f20494e6d2347887c963 NAME cffi-uffi-compat FILENAME + cffi-uffi-compat DEPS + ((NAME alexandria FILENAME alexandria) (NAME babel FILENAME babel) + (NAME cffi FILENAME cffi) + (NAME trivial-features FILENAME trivial-features)) + DEPENDENCIES (alexandria babel cffi trivial-features) VERSION cffi_0.23.0 + SIBLINGS + (cffi-examples cffi-grovel cffi-libffi cffi-tests cffi-toolchain cffi) + PARASITES NIL) */ diff --git a/pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-speedy-queue.nix b/pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-speedy-queue.nix new file mode 100644 index 000000000000..f953573797fe --- /dev/null +++ b/pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-speedy-queue.nix @@ -0,0 +1,26 @@ +args @ { fetchurl, ... }: +rec { + baseName = ''cl-speedy-queue''; + version = ''20150302-git''; + + description = ''cl-speedy-queue is a portable, non-consing, optimized queue implementation.''; + + deps = [ ]; + + src = fetchurl { + url = ''http://beta.quicklisp.org/archive/cl-speedy-queue/2015-03-02/cl-speedy-queue-20150302-git.tgz''; + sha256 = ''1w83vckk0ldr61vpkwg4i8l2b2yx54cs4ak62j4lxhshax105rqr''; + }; + + packageName = "cl-speedy-queue"; + + asdFilesToKeep = ["cl-speedy-queue.asd"]; + overrides = x: x; +} +/* (SYSTEM cl-speedy-queue DESCRIPTION + cl-speedy-queue is a portable, non-consing, optimized queue implementation. + SHA256 1w83vckk0ldr61vpkwg4i8l2b2yx54cs4ak62j4lxhshax105rqr URL + http://beta.quicklisp.org/archive/cl-speedy-queue/2015-03-02/cl-speedy-queue-20150302-git.tgz + MD5 509d1acf7e4cfcef99127de75b16521f NAME cl-speedy-queue FILENAME + cl-speedy-queue DEPS NIL DEPENDENCIES NIL VERSION 20150302-git SIBLINGS NIL + PARASITES NIL) */ diff --git a/pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-syslog.nix b/pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-syslog.nix new file mode 100644 index 000000000000..5fe7fe257673 --- /dev/null +++ b/pkgs/development/lisp-modules/quicklisp-to-nix-output/cl-syslog.nix @@ -0,0 +1,33 @@ +args @ { fetchurl, ... }: +rec { + baseName = ''cl-syslog''; + version = ''20190202-git''; + + description = ''Common Lisp syslog interface.''; + + deps = [ args."alexandria" args."babel" args."cffi" args."global-vars" args."local-time" args."split-sequence" args."trivial-features" args."usocket" ]; + + src = fetchurl { + url = ''http://beta.quicklisp.org/archive/cl-syslog/2019-02-02/cl-syslog-20190202-git.tgz''; + sha256 = ''1kzz613y9fvx33svlwc65vjaj1cafnxz8icds80ww7il7y6alwgh''; + }; + + packageName = "cl-syslog"; + + asdFilesToKeep = ["cl-syslog.asd"]; + overrides = x: x; +} +/* (SYSTEM cl-syslog DESCRIPTION Common Lisp syslog interface. SHA256 + 1kzz613y9fvx33svlwc65vjaj1cafnxz8icds80ww7il7y6alwgh URL + http://beta.quicklisp.org/archive/cl-syslog/2019-02-02/cl-syslog-20190202-git.tgz + MD5 eafff19eb1f38a36a9535c729d2217fe NAME cl-syslog FILENAME cl-syslog DEPS + ((NAME alexandria FILENAME alexandria) (NAME babel FILENAME babel) + (NAME cffi FILENAME cffi) (NAME global-vars FILENAME global-vars) + (NAME local-time FILENAME local-time) + (NAME split-sequence FILENAME split-sequence) + (NAME trivial-features FILENAME trivial-features) + (NAME usocket FILENAME usocket)) + DEPENDENCIES + (alexandria babel cffi global-vars local-time split-sequence + trivial-features usocket) + VERSION 20190202-git SIBLINGS NIL PARASITES NIL) */ diff --git a/pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix b/pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix index 79a799f76fbc..b13794d69918 100644 --- a/pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix +++ b/pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix @@ -1,4 +1,4 @@ -{pkgs, quicklisp-to-nix-packages}: +{pkgs, clwrapper, quicklisp-to-nix-packages}: let addNativeLibs = libs: x: { propagatedBuildInputs = libs; }; skipBuildPhase = x: { @@ -6,6 +6,10 @@ let }; multiOverride = l: x: if l == [] then {} else ((builtins.head l) x) // (multiOverride (builtins.tail l) x); + lispName = (clwrapper.lisp.pname or (builtins.parseDrvName clwrapper.lisp.name).name); + ifLispIn = l: f: if (pkgs.lib.elem lispName l) then f else (x: {}); + ifLispNotIn = l: f: if ! (pkgs.lib.elem lispName l) then f else (x: {}); + extraLispDeps = l: x: { deps = x.deps ++ l; }; in { stumpwm = x:{ @@ -23,7 +27,8 @@ in ''; }; }; - iterate = skipBuildPhase; + iterate = multiOverride [ skipBuildPhase + (ifLispNotIn ["sbcl" "gcl"] (x: { parasites=[]; }))]; cl-fuse = x: { propagatedBuildInputs = [pkgs.fuse]; overrides = y : (x.overrides y) // { @@ -65,15 +70,32 @@ in cl-libuv = addNativeLibs [pkgs.libuv]; cl-async-ssl = addNativeLibs [pkgs.openssl (import ./openssl-lib-marked.nix)]; cl-async-test = addNativeLibs [pkgs.openssl]; - clsql = x: { + clsql = multiOverride [ (x: { propagatedBuildInputs = with pkgs; [libmysqlclient postgresql sqlite zlib]; overrides = y: (x.overrides y) // { preConfigure = ((x.overrides y).preConfigure or "") + '' export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${pkgs.libmysqlclient}/include/mysql" export NIX_LDFLAGS="$NIX_LDFLAGS -L${pkgs.libmysqlclient}/lib/mysql" - ''; - }; - }; + '';};}) + (ifLispIn ["ecl" "clisp"] (x: { + deps = pkgs.lib.filter (x: x.outPath != quicklisp-to-nix-packages.uffi.outPath) + (x.deps ++ (with quicklisp-to-nix-packages; [cffi-uffi-compat])); + overrides = y: (x.overrides y) // { + postUnpack = '' + sed -e '1i(cl:push :clsql-cffi cl:*features*)' -i "$sourceRoot/clsql.asd" + ''; + }; + })) + ]; + clsql-postgresql-socket = ifLispIn ["ecl" "clisp"] (x: { + deps = pkgs.lib.filter (x: x.outPath != quicklisp-to-nix-packages.uffi.outPath) + (x.deps ++ (with quicklisp-to-nix-packages; [cffi-uffi-compat])); + overrides = y: (x.overrides y) // { + postUnpack = '' + sed -e '1i(cl:push :clsql-cffi cl:*features*)' -i "$sourceRoot/clsql-postgresql-socket.asd" + ''; + }; + }); clx-truetype = skipBuildPhase; query-fs = x: { overrides = y: (x.overrides y) // { @@ -241,4 +263,17 @@ $out/lib/common-lisp/query-fs" ''; }; }; + woo = ifLispNotIn ["sbcl" "gcl"] + (extraLispDeps (with quicklisp-to-nix-packages; [cl-speedy-queue])); + cl-syslog = x: { + overrides = y: (x.overrides y) // { + postUnpack = '' + sed -e '1a:serial t' -i $sourceRoot/cl-syslog.asd + ''; + }; + }; + log4cl = ifLispNotIn ["sbcl" "gcl"] + (extraLispDeps (with quicklisp-to-nix-packages; [cl-syslog])); + md5 = ifLispNotIn ["sbcl" "ccl" "gcl"] + (extraLispDeps (with quicklisp-to-nix-packages; [flexi-streams])); } diff --git a/pkgs/development/lisp-modules/quicklisp-to-nix-systems.txt b/pkgs/development/lisp-modules/quicklisp-to-nix-systems.txt index 802a549a093b..119648bb0368 100644 --- a/pkgs/development/lisp-modules/quicklisp-to-nix-systems.txt +++ b/pkgs/development/lisp-modules/quicklisp-to-nix-systems.txt @@ -13,6 +13,7 @@ calispel caveman cffi cffi-grovel +cffi-uffi-compat chanl chipz chunga @@ -64,7 +65,9 @@ cl-protobufs cl-qprint cl-reexport cl-slice +cl-speedy-queue cl-smtp +cl-syslog clsql clsql-postgresql clsql-postgresql-socket diff --git a/pkgs/development/lisp-modules/quicklisp-to-nix.nix b/pkgs/development/lisp-modules/quicklisp-to-nix.nix index d267c221c3a6..f96f1a1f5575 100644 --- a/pkgs/development/lisp-modules/quicklisp-to-nix.nix +++ b/pkgs/development/lisp-modules/quicklisp-to-nix.nix @@ -179,14 +179,6 @@ let quicklisp-to-nix-packages = rec { })); - "global-vars" = buildLispPackage - ((f: x: (x // (f x))) - (qlOverrides."global-vars" or (x: {})) - (import ./quicklisp-to-nix-output/global-vars.nix { - inherit fetchurl; - })); - - "cl-postgres_slash_tests" = quicklisp-to-nix-packages."cl-postgres"; @@ -678,6 +670,14 @@ let quicklisp-to-nix-packages = rec { })); + "global-vars" = buildLispPackage + ((f: x: (x // (f x))) + (qlOverrides."global-vars" or (x: {})) + (import ./quicklisp-to-nix-output/global-vars.nix { + inherit fetchurl; + })); + + "clunit" = buildLispPackage ((f: x: (x // (f x))) (qlOverrides."clunit" or (x: {})) @@ -3179,6 +3179,22 @@ let quicklisp-to-nix-packages = rec { })); + "cl-syslog" = buildLispPackage + ((f: x: (x // (f x))) + (qlOverrides."cl-syslog" or (x: {})) + (import ./quicklisp-to-nix-output/cl-syslog.nix { + inherit fetchurl; + "alexandria" = quicklisp-to-nix-packages."alexandria"; + "babel" = quicklisp-to-nix-packages."babel"; + "cffi" = quicklisp-to-nix-packages."cffi"; + "global-vars" = quicklisp-to-nix-packages."global-vars"; + "local-time" = quicklisp-to-nix-packages."local-time"; + "split-sequence" = quicklisp-to-nix-packages."split-sequence"; + "trivial-features" = quicklisp-to-nix-packages."trivial-features"; + "usocket" = quicklisp-to-nix-packages."usocket"; + })); + + "cl-smtp" = buildLispPackage ((f: x: (x // (f x))) (qlOverrides."cl-smtp" or (x: {})) @@ -3199,6 +3215,14 @@ let quicklisp-to-nix-packages = rec { })); + "cl-speedy-queue" = buildLispPackage + ((f: x: (x // (f x))) + (qlOverrides."cl-speedy-queue" or (x: {})) + (import ./quicklisp-to-nix-output/cl-speedy-queue.nix { + inherit fetchurl; + })); + + "cl-slice" = buildLispPackage ((f: x: (x // (f x))) (qlOverrides."cl-slice" or (x: {})) @@ -3904,6 +3928,18 @@ let quicklisp-to-nix-packages = rec { })); + "cffi-uffi-compat" = buildLispPackage + ((f: x: (x // (f x))) + (qlOverrides."cffi-uffi-compat" or (x: {})) + (import ./quicklisp-to-nix-output/cffi-uffi-compat.nix { + inherit fetchurl; + "alexandria" = quicklisp-to-nix-packages."alexandria"; + "babel" = quicklisp-to-nix-packages."babel"; + "cffi" = quicklisp-to-nix-packages."cffi"; + "trivial-features" = quicklisp-to-nix-packages."trivial-features"; + })); + + "cffi-grovel" = buildLispPackage ((f: x: (x // (f x))) (qlOverrides."cffi-grovel" or (x: {}))