diff --git a/pkgs/development/lisp-modules-new/packages.nix b/pkgs/development/lisp-modules-new/packages.nix index 97c1cf0fca5b..1ad06f615b56 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 000000000000..e21a44c2a17d --- /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 000000000000..b380894b04a8 --- /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