about summary refs log tree commit diff
path: root/pkgs/development/lisp-modules-new
diff options
context:
space:
mode:
authorVladimír Čunát <v@cunat.cz>2022-11-10 18:57:02 +0100
committerVladimír Čunát <v@cunat.cz>2022-11-10 19:05:29 +0100
commitcb6f2178554cc85ce217cc4b25ea68e12bf1aac4 (patch)
tree871587824e088047c841f2e24fbefd3847308439 /pkgs/development/lisp-modules-new
parent0e837209a8e86488c2aedc316ca50ed466e15570 (diff)
parent422f1c24bd9ebb0c413d74bf11f28eb82441e525 (diff)
Merge #195393: lispPackages_new.sbclPackages: fix Qt4
Diffstat (limited to 'pkgs/development/lisp-modules-new')
-rw-r--r--pkgs/development/lisp-modules-new/packages.nix91
-rw-r--r--pkgs/development/lisp-modules-new/patches/qt-libs-dont-download.patch36
-rw-r--r--pkgs/development/lisp-modules-new/patches/qtools-use-nix-libs.patch19
3 files changed, 146 insertions, 0 deletions
diff --git a/pkgs/development/lisp-modules-new/packages.nix b/pkgs/development/lisp-modules-new/packages.nix
index 97c1cf0fca5b6..1ad06f615b56e 100644
--- a/pkgs/development/lisp-modules-new/packages.nix
+++ b/pkgs/development/lisp-modules-new/packages.nix
@@ -11,6 +11,9 @@ let
     optionals
     hasSuffix
     splitString
+    remove
+    optionalString
+    stringLength
   ;
 
   # Used by builds that would otherwise attempt to write into storeDir.
@@ -42,6 +45,11 @@ let
       # Patches are already applied in `build`
       patches = [];
       src = build;
+      # TODO(kasper): handle this with a setup hook
+      LD_LIBRARY_PATH =
+        build.LD_LIBRARY_PATH
+        + (optionalString (stringLength build.LD_LIBRARY_PATH != 0) ":")
+        + "${build}";
     });
 
   # A little hacky
@@ -332,6 +340,89 @@ let
     version = "f19162e76";
   });
 
+  qt = let
+    rev = "dffff3ee3dbd0686c85c323f579b8bbf4881e60e";
+  in build-with-compile-into-pwd rec {
+    pname = "commonqt";
+    version = builtins.substring 0 7 rev;
+
+    src = pkgs.fetchFromGitHub {
+      inherit rev;
+      owner = pname;
+      repo = pname;
+      hash = "sha256-GAgwT0D9mIkYPTHfCH/KxxIv7b6QGwcxwZE7ehH5xug=";
+    };
+
+    buildInputs = [ pkgs.qt4 ];
+    nativeBuildInputs = [ pkgs.smokegen pkgs.smokeqt ];
+    nativeLibs = [ pkgs.qt4 pkgs.smokegen pkgs.smokeqt ];
+
+    systems = [ "qt" ];
+
+    lispLibs = with ql; [
+      cffi named-readtables cl-ppcre alexandria
+      closer-mop iterate trivial-garbage bordeaux-threads
+    ];
+  };
+
+  qt-libs = build-with-compile-into-pwd {
+    inherit (ql.qt-libs) pname version src;
+    patches = [ ./patches/qt-libs-dont-download.patch ];
+    prePatch = ''
+      substituteInPlace systems/*.asd --replace ":qt+libs" ":qt"
+      echo "LD Path: $LD_LIBRARY_PATH"
+    '';
+    lispLibs = ql.qt-libs.lispLibs ++ [ qt ];
+    systems = [
+      "qt-libs"
+      "commonqt"
+      # "phonon"
+      # "qimageblitz"
+      # "qsci"
+      "qt3support"
+      "qtcore"
+      "qtdbus"
+      "qtdeclarative"
+      "qtgui"
+      "qthelp"
+      "qtnetwork"
+      "qtopengl"
+      "qtscript"
+      "qtsql"
+      "qtsvg"
+      "qttest"
+      "qtuitools"
+      # "qtwebkit"
+      "qtxml"
+      "qtxmlpatterns"
+      # "qwt"
+      "smokebase"
+    ];
+  };
+  commonqt = qt-libs;
+  qt3support = qt-libs;
+  qtcore = qt-libs;
+  qtdbus = qt-libs;
+  qtdeclarative = qt-libs;
+  qtgui = qt-libs;
+  qthelp = qt-libs;
+  qtnetwork = qt-libs;
+  qtopengl = qt-libs;
+  qtscript = qt-libs;
+  qtsql = qt-libs;
+  qtsvg = qt-libs;
+  qttest = qt-libs;
+  qtuitools = qt-libs;
+  qtxml = qt-libs;
+  qtxmlpatterns = qt-libs;
+  smokebase = qt-libs;
+
+  qtools = build-with-compile-into-pwd {
+    inherit (ql.qtools) pname version src nativeLibs;
+    lispLibs = [ qt ] ++ remove ql.qt_plus_libs ql.qtools.lispLibs ++ [ qt-libs ];
+    patches = [ ./patches/qtools-use-nix-libs.patch ];
+  };
+
   };
 
 in packages
diff --git a/pkgs/development/lisp-modules-new/patches/qt-libs-dont-download.patch b/pkgs/development/lisp-modules-new/patches/qt-libs-dont-download.patch
new file mode 100644
index 0000000000000..e21a44c2a17d1
--- /dev/null
+++ b/pkgs/development/lisp-modules-new/patches/qt-libs-dont-download.patch
@@ -0,0 +1,36 @@
+--- a/qt-libs.asd
++++ b/qt-libs.asd
+@@ -17,5 +17,4 @@
+   :components ((:file "qt-libs"))
+   :depends-on (:qt-lib-generator
+                :cl-ppcre
+-               :cffi)
+-  :perform (asdf:load-op :after (op c) (uiop:symbol-call :qt-libs :ensure-standalone-libs)))
++               :cffi))
+--- a/qt-libs.lisp
++++ b/qt-libs.lisp
+@@ -94,16 +94,14 @@
+   standalone-dir)
+
+ (defun %ensure-lib-loaded (file)
+-  (let ((file (etypecase file
+-                (pathname file)
+-                (string (installed-library-file file))))
+-        (name (intern (string-upcase (pathname-name file))))
+-        #+sbcl(sb-ext:*muffled-warnings* 'style-warning))
+-    (cffi::register-foreign-library
+-     name `((T ,file))
+-     :search-path (to-directory file))
+-    (unless (cffi:foreign-library-loaded-p name)
+-      (cffi:load-foreign-library name))))
++ (let ((name (make-pathname :name (format nil "lib~a" file)
++                             :type #+unix "so"
++                                   #+darwin "dylib")))
++    (or (find-if (lambda (lib)
++                   (equal (cffi:foreign-library-pathname lib)
++                          (namestring name)))
++                 (cffi:list-foreign-libraries))
++        (cffi:load-foreign-library name))))
+
+ (defun ensure-lib-loaded (file)
+   (cond ((pathnamep file)
\ No newline at end of file
diff --git a/pkgs/development/lisp-modules-new/patches/qtools-use-nix-libs.patch b/pkgs/development/lisp-modules-new/patches/qtools-use-nix-libs.patch
new file mode 100644
index 0000000000000..b380894b04a83
--- /dev/null
+++ b/pkgs/development/lisp-modules-new/patches/qtools-use-nix-libs.patch
@@ -0,0 +1,19 @@
+Dont use the qt+libs system for managing Qt dependencies, because Nix provides
+them already.
+Don't build the deploy.lisp helper file, because Nix also can handle deployment.
+--- a/qtools.asd
++++ b/qtools.asd
+@@ -33,10 +33,9 @@
+                (:file "generate")
+                (:file "dynamic")
+                (:file "precompile")
+-               (:file "deploy")
+                (:file "fast-call")
+                (:file "documentation"))
+-  :depends-on (:qt+libs
++  :depends-on (:qt
+                :deploy
+                :cl-ppcre
+                :closer-mop
+
+Diff finished.  Sun Oct  2 14:38:06 2022
\ No newline at end of file