qt5: build in emulator
qt5.qtbase does build, after an hour. qtdeclarative fails to complete even after 3 hours
This commit is contained in:
parent
2b5365d774
commit
bec5241326
|
@ -1295,22 +1295,101 @@ in {
|
||||||
# })
|
# })
|
||||||
# ];
|
# ];
|
||||||
|
|
||||||
qt5 = (prev.qt5.override {
|
# qt5 = prev.qt5.overrideScope (self: super: {
|
||||||
# build all qt5 modules using emulation...
|
# # emulate all qt5 modules
|
||||||
inherit (emulated) stdenv;
|
# # this is a good idea, because qt is touchy about mixing "versions",
|
||||||
}).overrideScope (self: super: {
|
# # but idk if it's necessary -- i haven't tried selective emulation.
|
||||||
# but for anything using `libsForQt5.callPackage`, don't emulate.
|
# #
|
||||||
# note: alternative approach is to only `libsForQt5` (it's a separate scope),.
|
# # qt5's `callPackage` doesn't use the final `qtModule`, but the non-overriden one.
|
||||||
# it inherits so much from the `qt5` scope, so not a clear improvement.
|
# # so to modify `qtModule` we have to go through callPackage.
|
||||||
mkDerivation = self.mkDerivationWith final.stdenv.mkDerivation;
|
# callPackage = self.newScope {
|
||||||
callPackage = self.newScope { inherit (self) qtCompatVersion qtModule srcs; inherit (final) stdenv; };
|
# inherit (self) qtCompatVersion srcs stdenv;
|
||||||
qtbase = emulateBuildMachine super.qtbase;
|
# qtModule = args: emulateBuildMachine {
|
||||||
# qtbase = super.qtbase.override {
|
# # clunky emulateBuildMachine API, when not used via `callPackage`
|
||||||
# # qtbase is the only thing in `qt5` scope that references `[stdenv.]mkDerivation`.
|
# override = _attrs: super.qtModule args;
|
||||||
# # to emulate it, we emulate stdenv; all the other qt5 members are emulated via `qt5.qtModule`
|
# };
|
||||||
# inherit (emulated) stdenv;
|
# };
|
||||||
# };
|
# # emulate qtbase (which doesn't go through qtModule)
|
||||||
});
|
# qtbase = emulateBuildMachine super.qtbase;
|
||||||
|
# });
|
||||||
|
|
||||||
|
# qt5 = prev.qt5.overrideScope (self: super:
|
||||||
|
# let
|
||||||
|
# emulateQtModule = pkg: emulateBuildMachine {
|
||||||
|
# # qtModule never gets `stdenv`
|
||||||
|
# override = _stdenv: pkg;
|
||||||
|
# };
|
||||||
|
# in {
|
||||||
|
# qtbase = emulateBuildMachine super.qtbase;
|
||||||
|
# qtdeclarative = emulateQtModule super.qtdeclarative;
|
||||||
|
# qtgraphicaleffects = emulateQtModule super.qtgraphicaleffects;
|
||||||
|
# qtimageformats = emulateQtModule super.qtimageformats;
|
||||||
|
# qtkeychain = emulateQtModule super.qtkeychain;
|
||||||
|
# qtmultimedia = emulateQtModule super.qtmultimedia;
|
||||||
|
# qtquickcontrols = emulateQtModule super.qtquickcontrols;
|
||||||
|
# qtquickcontrols2 = emulateQtModule super.qtquickcontrols2;
|
||||||
|
# qtsvg = emulateQtModule super.qtsvg;
|
||||||
|
# qttools = emulateQtModule super.qttools;
|
||||||
|
# qtwayland = emulateQtModule super.qtwayland;
|
||||||
|
# });
|
||||||
|
|
||||||
|
qt5 = prev.qt5.override {
|
||||||
|
# emulate qt5base and all qtModules.
|
||||||
|
# because qt5 doesn't place this `stdenv` argument into its scope, `libsForQt5` doesn't inherit
|
||||||
|
# this stdenv. so anything using `libsForQt5.callPackage` builds w/o emulation.
|
||||||
|
stdenv = final.stdenv // {
|
||||||
|
mkDerivation = args: emulateBuildMachine {
|
||||||
|
override = { stdenv }: stdenv.mkDerivation args;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# qt5 = prev.qt5.overrideScope (self: super: {
|
||||||
|
# # stdenv.mkDerivation is used by qtModule, so this emulates all the qt modules
|
||||||
|
# stdenv = final.stdenv // {
|
||||||
|
# mkDerivation = args: emulateBuildMachine {
|
||||||
|
# override = { stdenv }: stdenv.mkDerivation args;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# # callPackage/mkDerivation is used by libsForQt5, so we avoid emulating qt consumers.
|
||||||
|
# # mkDerivation = final.stdenv.mkDerivation;
|
||||||
|
# # callPackage = self.newScope {
|
||||||
|
# # inherit (self) qtCompatVersion qtModule srcs;
|
||||||
|
# # inherit (final) stdenv;
|
||||||
|
# # };
|
||||||
|
|
||||||
|
# # qtbase = emulateBuildMachine super.qtbase;
|
||||||
|
# });
|
||||||
|
# libsForQt5 = prev.libsForQt5.overrideScope (self: super: {
|
||||||
|
# stdenv = final.stdenv;
|
||||||
|
# inherit (self.stdenv) mkderivation;
|
||||||
|
# });
|
||||||
|
|
||||||
|
# qt5 = (prev.qt5.override {
|
||||||
|
# # qt5 modules see this stdenv; they don't pick up the scope's qtModule or stdenv
|
||||||
|
# stdenv = emulated.stdenv // {
|
||||||
|
# # mkDerivation = args: emulateBuildMachine (final.stdenv.mkDerivation args);
|
||||||
|
# mkDerivation = args: emulateBuildMachine {
|
||||||
|
# # clunky emulateBuildMachine API, when not used via `callPackage`
|
||||||
|
# override = _attrs: final.stdenv.mkDerivation args;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# }).overrideScope (self: super: {
|
||||||
|
# # but for anything using `libsForQt5.callPackage`, don't emulate.
|
||||||
|
# # note: alternative approach is to only `libsForQt5` (it's a separate scope),.
|
||||||
|
# # it inherits so much from the `qt5` scope, so not a clear improvement.
|
||||||
|
# mkDerivation = self.mkDerivationWith final.stdenv.mkDerivation;
|
||||||
|
# callPackage = self.newScope { inherit (self) qtCompatVersion qtModule srcs; inherit (final) stdenv; };
|
||||||
|
# # except, still emulate qtbase.
|
||||||
|
# # all other modules build with qtModule (which emulates), except for qtbase which is behind a `callPackage` and uses `stdenv.mkDerivation`.
|
||||||
|
# # therefore we need to re-emulate it when make callPackage not emulate here.
|
||||||
|
# qtbase = emulateBuildMachine super.qtbase;
|
||||||
|
# # qtbase = super.qtbase.override {
|
||||||
|
# # # qtbase is the only thing in `qt5` scope that references `[stdenv.]mkDerivation`.
|
||||||
|
# # # to emulate it, we emulate stdenv; all the other qt5 members are emulated via `qt5.qtModule`
|
||||||
|
# # inherit (emulated) stdenv;
|
||||||
|
# # };
|
||||||
|
# });
|
||||||
# qt5 = emulated.qt5.overrideScope (self: super: {
|
# qt5 = emulated.qt5.overrideScope (self: super: {
|
||||||
# # emulate all the qt5 packages, but rework `libsForQt5.callPackage` and `mkDerivation`
|
# # emulate all the qt5 packages, but rework `libsForQt5.callPackage` and `mkDerivation`
|
||||||
# # to use non-emulated stdenv by default.
|
# # to use non-emulated stdenv by default.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user