@ -1,6 +1,5 @@
{ stdenv , fetchurl , fetchpatch , pkgconfig , intltool , flex , bison , autoreconfHook , substituteAll
, python , libxml2Python , file , expat , makedepend , pythonPackages
, libdrm , xorg , wayland , udev , llvmPackages , libffi , libomxil-bellagio
{ stdenv , fetchurl , fetchpatch , pkgconfig , intltool , autoreconfHook , substituteAll
, file , expat , libdrm , xorg , wayland , udev , llvmPackages , libffi , libomxil-bellagio
, libvdpau , libelf , libva , libclc
, grsecEnabled
, enableTextureFloats ? false # Texture floats are patented, see docs/patents.txt
@ -22,13 +21,14 @@ else
- libOSMesa is in $ osmesa ( ~ 4 MB )
* /
with { inherit ( stdenv . lib ) optional optionalString ; } ;
let
version = " 1 0 . 5 . 3 " ;
# this is the default search path for DRI drivers
driverLink = " / r u n / o p e n g l - d r i v e r " + stdenv . lib . optionalString stdenv . isi686 " - 3 2 " ;
driverLink = " / r u n / o p e n g l - d r i v e r " + optionalString stdenv . isi686 " - 3 2 " ;
clang = if llvmPackages ? clang-unwrapped then llvmPackages . clang-unwrapped else llvmPackages . clang ;
in
with { inherit ( stdenv . lib ) optional optionals optionalString ; } ;
stdenv . mkDerivation {
name = " m e s a - n o g l u - ${ version } " ;
@ -63,7 +63,7 @@ stdenv.mkDerivation {
configureFlags = [
" - - s y s c o n f d i r = / e t c "
" - - l o c a l s t a t e d i r = / v a r "
" - - w i t h - c l a n g - l i b d i r = ${ clang } / l i b "
#"--with-clang-libdir=${clang}/lib "
" - - w i t h - d r i - d r i v e r d i r = $ ( d r i v e r s ) / l i b / d r i "
" - - w i t h - d r i - s e a r c h p a t h = ${ driverLink } / l i b / d r i "
@ -102,17 +102,17 @@ stdenv.mkDerivation {
] ++ optional enableTextureFloats " - - e n a b l e - t e x t u r e - f l o a t "
++ optional grsecEnabled " - - e n a b l e - g l x - r t s " ; # slight performance degradation, enable only for grsec
nativeBuildInputs = [ pkgconfig python makedepend file flex bison pythonPackages . Mako ] ;
nativeBuildInputs = [ pkgconfig file ] ;
propagatedBuildInputs = with xorg ; [ libXdamage libXxf86vm ]
++ optionals stdenv . isLinux [ libdrm ] ;
++ optional stdenv . isLinux libdrm ;
buildInputs = with xorg ; [
autoreconfHook intltool expat libxml2Python l lvmPackages . llvm
autoreconfHook intltool expat llvmPackages . llvm
glproto dri2proto dri3proto presentproto
libX11 libXext libxcb libXt libXfixes libxshmfence
libffi wayland libvdpau libelf libXvMC libomxil-bellagio libva
libclc clang
#libclc clang
] ++ optional stdenv . isLinux udev ;
enableParallelBuilding = true ;
@ -128,16 +128,17 @@ stdenv.mkDerivation {
# ToDo: probably not all .la files are completely fixed, but it shouldn't matter
postInstall = with stdenv . lib ; ''
mv - t " $ d r i v e r s / l i b / " \
'' + o p t i o n a l S t r i n g e n a b l e E x t r a F e a t u r e s ''
` #$out/lib/libXvMC*` \
$ out/lib/gbm $ out/lib/libgbm * \
'' + ''
$ out/lib/gallium-pipe \
$ out/lib/libXvMC * \
$ out/lib/libdricore * \
$ out/lib/libgallium * \
$ out/lib/vdpau \
$ out/lib / { bellagio , d3d } \
$ out/lib/libxatracker *
mv - t " $ d r i v e r s / l i b / d r i / " \
" $ o u t " /lib/dri /*
rmdir " $ o u t / l i b / d r i "
mkdir - p { $ osmesa , $ drivers } /lib/pkgconfig
mv - t $ osmesa/lib / \
$ out/lib/libOSMesa *
@ -150,43 +151,44 @@ stdenv.mkDerivation {
'' + / * n o w f i x r e f e r e n c e s i n . l a f i l e s * / ''
sed " / ^ l i b d i r = / s , $ o u t , $ d r i v e r s , " - i \
'' + o p t i o n a l S t r i n g e n a b l e E x t r a F e a t u r e s ''
` #$drivers/lib/libXvMC*.la` \
'' + ''
$ drivers/lib/gallium-pipe /* . l a \
$ drivers/lib/libgallium.la \
$ drivers/lib/libXvMC * . la \
$ drivers/lib/vdpau /* . l a \
$ drivers/lib/libdricore * . la
sed " s , $ o u t \( / l i b / \( li b d r i c o r e [ 0 - 9 \. ] * \| l i b g a l l i u m \) . l a \) , $ d r i v e r s \1 , g " \
sed " s , $ o u t \( / l i b / l i b d r i c o r e [ 0 - 9 \. ] * . l a \) , $ d r i v e r s \1 , g " \
- i $ drivers/lib /* . l a $ d r i v e r s / l i b / */ * . la
sed " / ^ l i b d i r = / s , $ o u t , $ o s m e s a , " - i \
$ osmesa/lib/libOSMesa * . la
'' + / * w o r k a r o u n d b u g # 5 2 9 , b u t m a y b e $d r i v e r s s h o u l d a l s o b e p a t c h e l f - e d * / ''
find $ drivers / $ osmesa / - type f - executable - print0 | xargs -0 strip - S || true
'' + / * s e t t h e d e f a u l t s e a r c h p a t h f o r D R I d r i v e r s ; u s e d e . g . b y X s e r v e r * / ''
substituteInPlace " $ o u t / l i b / p k g c o n f i g / d r i . p c " - - replace ' $ ( drivers ) ' " ${ driverLink } "
'' + / * m o v e v d p a u d r i v e r s t o $d r i v e r s / l i b , s o t h e y a r e f o u n d * / ''
mv " $ d r i v e r s " /lib/vdpau /* " $ d r i v e r s " / l i b / & & r m d i r " $ d r i v e r s " / l i b / v d p a u
'' ;
#ToDo: @vcunat isn't sure if drirc will be found when in $out/etc/, but it doesn't seem important ATM */
'' + / * a d d R P A T H s o t h e d r i v e r s c a n f i n d t h e m o v e d l i b g a l l i u m a n d l i b d r i c o r e 9 * / ''
postFixup =
# add RPATH so the drivers can find the moved libgallium and libdricore9
# moved here to avoid problems with stripping patchelfed files
''
for lib in $ drivers/lib /* . s o * $ d r i v e r s / l i b / */ * . so * ; do
if [ [ ! - L " $ l i b " ] ] ; then
patchelf - - set-rpath " $ ( p a t c h e l f - - p r i n t - r p a t h $ l i b ) : $ d r i v e r s / l i b " " $ l i b "
fi
done
'' + / * s e t t h e d e f a u l t s e a r c h p a t h f o r D R I d r i v e r s ; u s e d e . g . b y X s e r v e r * / ''
substituteInPlace " $ o u t / l i b / p k g c o n f i g / d r i . p c " - - replace ' $ ( drivers ) ' " ${ driverLink } "
'' + / * m o v e v d p a u d r i v e r s t o $d r i v e r s / l i b , s o t h e y a r e f o u n d * / ''
mv " $ d r i v e r s " /lib/vdpau /* " $ d r i v e r s " / l i b / & & r m d i r " $ d r i v e r s " / l i b / v d p a u
'' ;
#ToDo: @vcunat isn't sure if drirc will be found when in $out/etc/, but it doesn't seem important ATM
# ToDo + /* check $out doesn't depend on llvm */ ''
# builder failures are ignored for some reason
# grep -qv '${llvmPackages.llvm}' -R "$out"
passthru = { inherit libdrm version driverLink ; } ;
meta = {
meta = with stdenv . lib ; {
description = " A n o p e n s o u r c e i m p l e m e n t a t i o n o f O p e n G L " ;
homepage = http://www.mesa3d.org/ ;
license = " b s d " ;
platforms = stdenv . lib . platforms . mesaPlatforms ;
maintainers = with stdenv . lib . maintainers ; [ eduarrrd simons vcunat ] ;
license = licenses . mit ; # X11 variant, in most files
platforms = platforms . mesaPlatforms ;
maintainers = with maintainers ; [ eduarrrd simons vcunat ] ;
} ;
}