mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-23 06:03:40 +00:00
503f8efbcd
Don't rely on questionable impact of DT_RPATH on dlopen(). This is a bit of a messy subject, but probably the clearest reference to motivate *not* relying on how dlopen() behaves in the presence of RPATH or RUNPATH is the following: https://sourceware.org/ml/libc-hacker/2002-11/msg00011.html FWIW the dlopen() manpage only mentions the the RPATH and RUNPATH in the "executable file for the calling program"; no mention of the executable files for libraries-- this has been brought to the attention of the relevant parties and AFAICT nothing has been done. The best reference for glibc behavior is apparently to ... "try it and see". Luckily a generous soul did exactly that and reported the findings: https://www.spinics.net/lists/linux-man/msg02291.html Qt wrote on the subject a bit when they were bit by this, linking to the above articles (directly or indirectly). See: http://blog.qt.io/blog/2011/10/28/rpath-and-runpath/ -------- Since we know the path of libGL at build-time for libepoxy, there's a simple solution we can use to avoid all of this: simply teach libepoxy to explicitly look in the libGL path. This commit patches libepoxy to accomplish this, looking to "LIBGL_PATH" as a fallback if it cannot find the libraries otherwise. --------- This fixes use of libepoxy w/musl on NixOS!
40 lines
1.0 KiB
Nix
40 lines
1.0 KiB
Nix
{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, utilmacros, python
|
|
, libGL, libX11
|
|
}:
|
|
|
|
with stdenv.lib;
|
|
|
|
stdenv.mkDerivation rec {
|
|
name = "epoxy-${version}";
|
|
version = "1.5.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "anholt";
|
|
repo = "libepoxy";
|
|
rev = "${version}";
|
|
sha256 = "1ixpqb10pmdy3n9nxd5inflig9dal5502ggadcns5b58j6jr0yv0";
|
|
};
|
|
|
|
outputs = [ "out" "dev" ];
|
|
|
|
nativeBuildInputs = [ autoreconfHook pkgconfig utilmacros python ];
|
|
buildInputs = [ libGL libX11 ];
|
|
|
|
preConfigure = optionalString stdenv.isDarwin ''
|
|
substituteInPlace configure --replace build_glx=no build_glx=yes
|
|
substituteInPlace src/dispatch_common.h --replace "PLATFORM_HAS_GLX 0" "PLATFORM_HAS_GLX 1"
|
|
'';
|
|
|
|
patches = [ ./libgl-path.patch ];
|
|
|
|
NIX_CFLAGS_COMPILE = ''-DLIBGL_PATH="${getLib libGL}/lib"'';
|
|
|
|
meta = {
|
|
description = "A library for handling OpenGL function pointer management";
|
|
homepage = https://github.com/anholt/libepoxy;
|
|
license = licenses.mit;
|
|
maintainers = [ maintainers.goibhniu ];
|
|
platforms = platforms.unix;
|
|
};
|
|
}
|