Skip to content

Commit 7647185

Browse files
committed
WIP: More gtk building
We need GL support because of gdk -> epoxy -> GL.
1 parent 4279149 commit 7647185

File tree

1 file changed

+62
-34
lines changed

1 file changed

+62
-34
lines changed

survey/default.nix

Lines changed: 62 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,12 @@ let
614614
"--enable-static"
615615
];
616616
});
617-
cairo = previous.cairo.overrideAttrs (old: { dontDisableStatic = true; });
617+
cairo = (previous.cairo.overrideAttrs (old: { dontDisableStatic = true; })).override {
618+
# Disabling OpenGL support for now because I don't know if statically
619+
# linking it is possible (it may depend on the hardware).
620+
libGLSupported = false;
621+
glSupport = false;
622+
};
618623
libpng = previous.libpng.overrideAttrs (old: { dontDisableStatic = true; });
619624
libpng_apng = previous.libpng_apng.overrideAttrs (old: { dontDisableStatic = true; });
620625
libpng12 = previous.libpng12.overrideAttrs (old: { dontDisableStatic = true; });
@@ -642,20 +647,45 @@ let
642647
dbus = previous.dbus.overrideAttrs (old: { dontDisableStatic = true; });
643648
utillinuxMinimal = previous.utillinuxMinimal.overrideAttrs (old: { dontDisableStatic = true; });
644649

645-
libxcb = previous.xorg.libxcb.overrideAttrs (old: { dontDisableStatic = true; });
646-
libX11 = previous.xorg.libX11.overrideAttrs (old: { dontDisableStatic = true; });
647-
libXau = previous.xorg.libXau.overrideAttrs (old: { dontDisableStatic = true; });
648-
libXcursor = previous.xorg.libXcursor.overrideAttrs (old: { dontDisableStatic = true; });
649-
libXdmcp = previous.xorg.libXdmcp.overrideAttrs (old: { dontDisableStatic = true; });
650-
libXext = previous.xorg.libXext.overrideAttrs (old: { dontDisableStatic = true; });
651-
libXtst = previous.xorg.libXtst.overrideAttrs (old: { dontDisableStatic = true; });
652-
libXfixes = previous.xorg.libXfixes.overrideAttrs (old: { dontDisableStatic = true; });
653-
libXi = previous.xorg.libXi.overrideAttrs (old: { dontDisableStatic = true; });
654-
libXinerama = previous.xorg.libXinerama.overrideAttrs (old: { dontDisableStatic = true; });
655-
libXrandr = previous.xorg.libXrandr.overrideAttrs (old: { dontDisableStatic = true; });
656-
libXrender = previous.xorg.libXrender.overrideAttrs (old: { dontDisableStatic = true; });
657-
libXScrnSaver = previous.xorg.libXScrnSaver.overrideAttrs (old: { dontDisableStatic = true; });
658-
libXxf86vm = previous.xorg.libXxf86vm.overrideAttrs (old: { dontDisableStatic = true; });
650+
# Note that the addition of `xorg.*` packages to the global
651+
# package set available to derivation (`callPackage`) arguments
652+
# is set up here:
653+
# https://github.com/NixOS/nixpkgs/blob/9a2c7caa43f1cb83b3efd156de35aea85196f32f/pkgs/top-level/splice.nix#L125-L132
654+
# According to `clever`, the right place to override them should
655+
# be inside `xorg` and then the top-level ones should be
656+
# overridden automatically.
657+
#
658+
# Btw, creating overridable scopes works like this:
659+
# https://github.com/cleverca22/nix-tests/blob/22a32a1c43162817dba0cd9dd6f2b35590582e63/kexec/simple-test.nix#L52
660+
xorg = previous.xorg.overrideScope' (final_xorg: previous_xorg:
661+
lib.mapAttrs
662+
(name: value: value.overrideAttrs (old: { dontDisableStatic = true; }))
663+
previous_xorg
664+
);
665+
epoxy = previous.epoxy.override {
666+
enableStatic = true;
667+
enableEgl = false;
668+
};
669+
graphite2 = previous.graphite2.override { enableStatic = true; };
670+
harfbuzz = previous.harfbuzz.override { enableStatic = true; };
671+
wayland = previous.wayland.override { enableStatic = true; };
672+
673+
at-spi2-atk = previous.at-spi2-atk.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
674+
at-spi2-core = previous.at-spi2-core.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
675+
atk = previous.atk.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
676+
fribidi = previous.fribidi.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
677+
gdk-pixbuf = previous.gdk-pixbuf.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
678+
glib = previous.glib.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
679+
libxkbcommon = previous.libxkbcommon.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
680+
pango = previous.pango.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
681+
# mesa_glu = previous.mesa_glu.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
682+
libglvnd = previous.libglvnd.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
683+
684+
# Changing `shared_library` -> `library` and using `-Ddefault_library=both`
685+
# in mesa did not work for me (still to investigate why), but doing the
686+
# same with `-Ddefault_library=static` worked.
687+
# mesa = previous.mesa.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=both" ]; });
688+
mesa = previous.mesa.overrideAttrs (old: { mesonFlags = (old.mesonFlags or []) ++ [ "-Ddefault_library=static" ]; });
659689

660690
SDL2 = previous.SDL2.overrideAttrs (old: { dontDisableStatic = true; });
661691
SDL2_gfx = previous.SDL2_gfx.overrideAttrs (old: { dontDisableStatic = true; });
@@ -669,6 +699,10 @@ let
669699

670700
openssl = previous.openssl.override { static = true; };
671701

702+
# Disabling kerberos support for now, as openssh's `./configure` fails to
703+
# detect its functions due to linker error, so the build breaks, see #68.
704+
openssh = previous.openssh.override { withKerberos = false; };
705+
672706
krb5 = previous.krb5.override {
673707
# Note [krb5 can only be static XOR shared]
674708
# krb5 does not support building both static and shared at the same time.
@@ -711,11 +745,16 @@ let
711745
doCheck = false;
712746
});
713747

714-
gtk3 = previous.gtk3.overrideAttrs (old: {
748+
gtk3 = (previous.gtk3.overrideAttrs (old: {
715749
mesonFlags = (old.mesonFlags or []) ++ [
750+
# Just `static` doesn't currently work, the `g-ir-scanner` fails during gtk's build then.
716751
"-Ddefault_library=both"
717752
#"-Dintrospection=false"
718753
];
754+
})).override (old_gtk3: {
755+
# Wayland requires EGL support for which we have not figured out yet
756+
# whether it can be statically linked.
757+
waylandSupport = false;
719758
});
720759

721760
gtk4 = (previous.gtk3.override {
@@ -809,6 +848,7 @@ let
809848
meson, ninja, pkgconfig, gtk3,
810849
pcre_static,
811850
zlib_both,
851+
bzip2_static,
812852
harfbuzz,
813853
libpthreadstubs,
814854
libXdmcp,
@@ -820,6 +860,9 @@ let
820860
at-spi2-core,
821861
dbus,
822862
libXtst,
863+
libGL,
864+
mesa,
865+
binutils,
823866
}: final.stdenv.mkDerivation {
824867
pname = "meson-tutorial-gtk";
825868
version = "0.0.1";
@@ -829,6 +872,7 @@ let
829872
gtk3
830873
pcre_static
831874
zlib_both
875+
bzip2_static
832876
harfbuzz
833877
libpthreadstubs
834878
libXdmcp
@@ -840,6 +884,8 @@ let
840884
at-spi2-core
841885
dbus
842886
libXtst
887+
libGL
888+
mesa
843889
];
844890
preConfigure = ''
845891
echo
@@ -1283,32 +1329,14 @@ let
12831329
# Most likely it is because the `libX*` packages are available once on the top-level
12841330
# namespace (where we override them), and once under `xorg.libX*`, where we don't
12851331
# override them; it seems that `X11` depends on the latter.
1286-
# Note that the addition of `xorg.*` packages to the global
1287-
# package set available to derivation (`callPackage`) arguments
1288-
# is set up here:
1289-
# https://github.com/NixOS/nixpkgs/blob/9a2c7caa43f1cb83b3efd156de35aea85196f32f/pkgs/top-level/splice.nix#L125-L132
1290-
# According to `clever`, the right place to override them should
1291-
# be inside `xorg` and then the top-level ones should be
1292-
# overridden automatically.
12931332
X11 = super.X11.override {
12941333
libX11 = final.libX11;
12951334
libXext = final.libXext;
12961335
libXinerama = final.libXinerama;
12971336
libXrandr = final.libXrandr;
12981337
libXrender = final.libXrender;
12991338
libXScrnSaver = final.libXScrnSaver;
1300-
13011339
};
1302-
xorg = super.xorg.override (old: {
1303-
libX11 = final.libX11;
1304-
libXext = final.libXext;
1305-
libXinerama = final.libXinerama;
1306-
libXrandr = final.libXrandr;
1307-
libXrender = final.libXrender;
1308-
libXScrnSaver = final.libXScrnSaver;
1309-
1310-
libXtst = final.libXtst;
1311-
});
13121340

13131341

13141342
# Note that xmonad links, but it doesn't run, because it tries to open

0 commit comments

Comments
 (0)