Hello, In the interest of creating a future where mesa properly works alongside libglvnd i think there's a few options:- simply adding "-Dglvnd=true" to mesa configure-flags and tediously adding libglvnd to the inputs of every package that links to LibGL, as well as patching anything problematic as mentioned in
https://issues.guix.gnu.org/49339#8- create an abomination, the ONE MESA TO RULE THEM ALL. an example follows:
(define-public mesa/new
(package
(inherit mesa)
(arguments
(substitute-keyword-arguments (package-arguments mesa)
((#:configure-flags flags ''())
#~(append #$flags
(list "-Dglvnd=true")))
((#:phases phases ''())
(with-imported-modules '((guix build union))
#~(modify-phases #$phases
(add-before 'validate-runpath 'unionize
(lambda _ ;; unionize with libglvnd, fixing all problems
(use-modules (ice-9 match)
(guix build union))
(union-build (string-append #$output "/tmp")
'#$(list (this-package-input "libglvnd"))
#:create-all-directories? #t)
(copy-recursively (string-append #$output "/tmp") #$output)
(delete-file-recursively (string-append #$output "/tmp"))
;; leftovers from building with old mesa.
;; some packages still link to these.
;; remove for rebuilding after applying graft?
(symlink (string-append #$output "/lib/libEGL.so.1")
(string-append #$output "/lib/libEGL.so.1.0.0"))
(symlink (string-append #$output "/lib/libGLESv1_CM.so.1")
(string-append #$output "/lib/libGLESv1_CM.so.1.1.0"))
(symlink (string-append #$output "/lib/libGLESv2.so.2")
(string-append #$output "/lib/libGLESv2.so.2.0.0"))
(symlink (string-append #$output "/lib/libGL.so.1")
(string-append #$output "/lib/libGL.so.1.2.0"))))
(add-after 'install 'fix-paths
(lambda _
(substitute*
(string-append #$output "/share/glvnd/egl_vendor.d/50_mesa.json")
(("libEGL_mesa")
(string-append #$output "/lib/libEGL_mesa")))))
(add-after 'fix-paths 'add-external-egl
(lambda _
(mkdir-p (string-append #$output "/share/egl/egl_external_platform.d")))))))))
(native-search-paths (append (package-native-search-paths mesa)
(list
(search-path-specification
(variable "__EGL_VENDOR_LIBRARY_DIRS")
(files '("share/glvnd/egl_vendor.d")))
(search-path-specification
(variable "GBM_BACKENDS_PATH")
(files '("lib")))
(search-path-specification
(variable "XDG_DATA_DIRS")
(files '("share")))
(search-path-specification
(variable "__EGL_EXTERNAL_PLATFORM_CONFIG_DIRS")
(files '("share/egl/egl_external_platform.d"))))))
(inputs (modify-inputs (package-inputs mesa)
(prepend libglvnd)))))
Using this to graft over mesa is a filthy answer to the "GL problem". no rebuilding necessary, it seems to "just work".
Other distributions have settled on packaging mesa build for working with libglvnd and most software seems to expect such.
Perhaps there's another solution?