sbclPackages: fix build of qt, qt-libs and qtools

This commit is contained in:
Kasper Gałkowski 2022-10-09 19:38:32 +02:00
parent fd3646f517
commit 422f1c24bd
3 changed files with 146 additions and 0 deletions

View file

@ -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

View file

@ -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)

View file

@ -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