From 1d095c579e7bd0fe5cb46e66eb30affd5e593ae1 Mon Sep 17 00:00:00 2001 From: Gavin John Date: Wed, 28 Aug 2024 11:11:58 -0700 Subject: [PATCH 1/4] libcapsule: init at 0.20240806.0 --- pkgs/by-name/li/libcapsule/package.nix | 72 ++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 pkgs/by-name/li/libcapsule/package.nix diff --git a/pkgs/by-name/li/libcapsule/package.nix b/pkgs/by-name/li/libcapsule/package.nix new file mode 100644 index 0000000000000..bd1cfc564fc2c --- /dev/null +++ b/pkgs/by-name/li/libcapsule/package.nix @@ -0,0 +1,72 @@ +{ + lib, + stdenv, + fetchFromGitLab, + autoreconfHook, + autoconf-archive, + elfutils, + getopt, + gtk-doc, + intltool, + libtool, + makeWrapper, + patchelf, + pkg-config, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "libcapsule"; + version = "0.20240806.0"; + + src = fetchFromGitLab { + domain = "gitlab.collabora.com"; + owner = "vivek"; + repo = "libcapsule"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-aJV1u047hCVZhuLvAKe8JvoLe/vGkuuCs/LvD+bLTGU="; + }; + + postPatch = '' + patchShebangs data + ''; + + configureFlags = [ "--enable-host-prefix=no" ]; + + nativeBuildInputs = [ + autoreconfHook + autoconf-archive + getopt + gtk-doc + intltool + libtool + makeWrapper + patchelf + pkg-config + ]; + + buildInputs = [ + elfutils + ]; + + postInstall = '' + # Manually remove /build/source/tests/.libs from the rpath of this specific test binary + patchelf --shrink-rpath --allowed-rpath-prefixes /nix/store $out/libexec/installed-tests/libcapsule/tests/libcapsule-test-dependent-runpath.so.1 + + # Tell programs where to find files + wrapProgram $out/bin/capsule-init-project \ + --prefix PATH : ${lib.makeBinPath [ getopt pkg-config ]} \ + --set CAPSULE_MKINC $out/share/libcapsule/ \ + --set CAPSULE_SYMBOLS_TOOL $out/bin/capsule-symbols \ + --set CAPSULE_VERSION_TOOL $out/bin/capsule-version + wrapProgram $out/bin/capsule-mkstublib \ + --prefix PATH : ${lib.makeBinPath [ pkg-config ]} \ + --set CAPSULE_SYMBOLS_TOOL $out/bin/capsule-symbols + ''; + + meta = { + description = "Segregated dynamic linking library"; + homepage = "https://gitlab.collabora.com/vivek/libcapsule"; + mainProgram = "capsule-init-project"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ pandapip1 ]; + }; +}) From 7ae26e722908de27ad8a22f82a520da1dd22c371 Mon Sep 17 00:00:00 2001 From: Gavin John Date: Wed, 28 Aug 2024 11:12:43 -0700 Subject: [PATCH 2/4] mkCapsule: init builder --- pkgs/by-name/li/libcapsule/mkCapsule.nix | 65 ++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 67 insertions(+) create mode 100644 pkgs/by-name/li/libcapsule/mkCapsule.nix diff --git a/pkgs/by-name/li/libcapsule/mkCapsule.nix b/pkgs/by-name/li/libcapsule/mkCapsule.nix new file mode 100644 index 0000000000000..e9e05a0b1868c --- /dev/null +++ b/pkgs/by-name/li/libcapsule/mkCapsule.nix @@ -0,0 +1,65 @@ +{ + lib, + stdenv, + runCommand, + autoreconfHook, + autoconf, + automake, + getopt, + pkg-config, + libcapsule, + libtool, +}: + +{ + pname, + dependencies, + objects, + meta ? {}, +}@args: + +stdenv.mkDerivation (finalAttrs: { + inherit pname; + inherit (libcapsule) version; + + outputs = [ "out" "dev" ]; + + src = runCommand "${pname}-src" { + nativeBuildInputs = [ + autoconf + automake + libtool + pkg-config + ]; + buildInputs = [ + libcapsule + ]; + LD_LIBRARY_PATH = lib.makeLibraryPath dependencies; + } '' + capsule-init-project --destination=$out --package-name=${pname} --runtime-tree="/" ${lib.concatStringsSep " " objects} + ''; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + getopt + ]; + buildInputs = [ + libcapsule + ]; + + # Do hacky stuff to pull dev outputs from dependencies that have them + postInstall = '' + mkdir -p $dev/include $dev/lib/pkgconfig + '' + (lib.concatStringsSep "\n" (builtins.map (dep: '' + cp -r ${dep.dev}/include/. $dev/include/ + for pc in $(find ${dep.dev}/lib/pkgconfig -printf "%P\n"); do + cat "${dep.dev}/lib/pkgconfig/$pc" | sed "s|${dep}|$out|g" | sed "s|${dep.dev}|$dev|g" > $dev/lib/pkgconfig/$pc + done + '') (builtins.filter (dep: builtins.hasAttr "dev" dep) dependencies))); + + meta = { + description = "libcapsule-wrapped ${lib.concatStringsSep ", " objects}"; + license = lib.licenses.gpl3Plus; + } // meta; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0d3e8e80c3f52..b0466342206c7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24571,6 +24571,8 @@ with pkgs; faslExt = "fas"; }; + mkCapsule = callPackage ../../pkgs/by-name/li/libcapsule/mkCapsule.nix { }; + # Steel Bank Common Lisp sbcl_2_4_6 = wrapLisp { pkg = callPackage ../development/compilers/sbcl { version = "2.4.6"; }; From 93667ff71d4b46a0ff9324f97364dc0d8bebf42f Mon Sep 17 00:00:00 2001 From: Gavin John Date: Wed, 28 Aug 2024 11:26:32 -0700 Subject: [PATCH 3/4] libglcapsule: init --- pkgs/by-name/li/libglcapsule/package.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 pkgs/by-name/li/libglcapsule/package.nix diff --git a/pkgs/by-name/li/libglcapsule/package.nix b/pkgs/by-name/li/libglcapsule/package.nix new file mode 100644 index 0000000000000..057b6b8540d44 --- /dev/null +++ b/pkgs/by-name/li/libglcapsule/package.nix @@ -0,0 +1,14 @@ +{ + lib, + mkCapsule, + libglvnd, +}: + +mkCapsule { + pname = "libglcapsule"; + dependencies = [ libglvnd ]; + objects = [ "libGL.so" "libEGL.so" "libGLESv1_CM.so" "libGLESv2.so" "libGLX.so" "libOpenGL.so" ]; + meta = { + maintainers = with lib.maintainers; [ pandapip1 ]; + }; +} From 3163476310a368db9298a6c093d610c484ea3dfd Mon Sep 17 00:00:00 2001 From: Gavin John Date: Wed, 28 Aug 2024 11:27:58 -0700 Subject: [PATCH 4/4] {libGL, libGLX}: point to libglcapsule and make supporting changes --- nixos/modules/hardware/graphics.nix | 4 ++-- pkgs/top-level/all-packages.nix | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/nixos/modules/hardware/graphics.nix b/nixos/modules/hardware/graphics.nix index 99c122f75c2a1..a2392fb354976 100644 --- a/nixos/modules/hardware/graphics.nix +++ b/nixos/modules/hardware/graphics.nix @@ -4,12 +4,12 @@ let driversEnv = pkgs.buildEnv { name = "graphics-drivers"; - paths = [ cfg.package ] ++ cfg.extraPackages; + paths = [ cfg.package pkgs.libGL ] ++ cfg.extraPackages; }; driversEnv32 = pkgs.buildEnv { name = "graphics-drivers-32bit"; - paths = [ cfg.package32 ] ++ cfg.extraPackages32; + paths = [ cfg.package32 pkgs.libGL ] ++ cfg.extraPackages32; }; in { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b0466342206c7..337b3e561f607 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -22589,7 +22589,7 @@ with pkgs; else if stdenv.hostPlatform.isDarwin then darwin.apple_sdk.frameworks.OpenGL else - libglvnd; + libglcapsule; # On macOS, we use the OpenGL framework. Packages that use libGLX on # macOS may need to depend on mesa_glu directly if this doesn’t work. @@ -22600,11 +22600,7 @@ with pkgs; mesa_glu; # libglvnd does not work (yet?) on macOS. - libGLX = - if stdenv.hostPlatform.isDarwin then - mesa - else - libglvnd; + libGLX = libglcapsule; # On macOS, we use the GLUT framework. Packages that use libGLX on # macOS may need to depend on freeglut directly if this doesn’t work.