1 # Copyright 1999-2009 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/x11-drivers/nvidia-drivers/nvidia-drivers-190.18.ebuild,v 1.1 2009/07/27 06:37:51 spock Exp $
5 inherit eutils multilib versionator linux-mod flag-o-matic nvidia-driver
7 X86_NV_PACKAGE
="NVIDIA-Linux-x86-${PV}"
8 AMD64_NV_PACKAGE
="NVIDIA-Linux-x86_64-${PV}"
9 X86_FBSD_NV_PACKAGE
="NVIDIA-FreeBSD-x86-${PV}"
11 DESCRIPTION
="NVIDIA X11 driver and GLX libraries"
12 HOMEPAGE
="http://www.nvidia.com/"
13 SRC_URI
="x86? ( ftp://download.nvidia.com/XFree86/Linux-x86/${PV}/${X86_NV_PACKAGE}-pkg0.run )
14 amd64? ( ftp://download.nvidia.com/XFree86/Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}-pkg2.run )
15 x86-fbsd? ( ftp://download.nvidia.com/freebsd/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )"
20 IUSE
="acpi custom-cflags gtk multilib kernel_linux"
24 COMMON
="<x11-base/xorg-server-1.6.99
25 multilib? ( app-emulation/emul-linux-x86-xlibs )
26 kernel_FreeBSD? ( !media-video/nvidia-freebsd )
27 !app-emulation/emul-linux-x86-nvidia
28 !x11-drivers/nvidia-legacy-drivers"
30 kernel_linux? ( virtual/linux-sources )
31 app-admin/eselect-opengl"
33 kernel_linux? ( virtual/modutils )
35 acpi? ( sys-power/acpid )"
36 PDEPEND
="gtk? ( media-video/nvidia-settings )"
38 QA_TEXTRELS_x86
="usr/lib/libXvMCNVIDIA.so.${PV}
39 usr/lib/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
40 usr/lib/opengl/nvidia/tls/libnvidia-tls.so.${PV}
41 usr/lib/opengl/nvidia/lib/libGL.so.${PV}
42 usr/lib/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
43 usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
44 usr/lib/opengl/nvidia/extensions/libglx.so
45 usr/lib/xorg/modules/drivers/nvidia_drv.so
46 usr/lib/libcuda.so.${PV}
47 usr/lib/libvdpau_nvidia.so.${PV}"
49 QA_TEXTRELS_x86_fbsd
="boot/modules/nvidia.ko
50 usr/lib/opengl/nvidia/lib/libGL.so.1
51 usr/lib/opengl/nvidia/lib/libGLcore.so.1
52 usr/lib/opengl/nvidia/lib/libnvidia-cfg.so.1
53 usr/lib/opengl/nvidia/no-tls/libnvidia-tls.so.1
54 usr/lib/opengl/nvidia/extensions/libglx.so
55 usr/lib/xorg/modules/drivers/nvidia_drv.so"
57 QA_TEXTRELS_amd64
="usr/lib32/opengl/nvidia/tls/libnvidia-tls.so.${PV}
58 usr/lib32/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
59 usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
60 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
61 usr/lib32/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
62 usr/lib32/libcuda.so.${PV}
63 usr/lib32/libvdpau_nvidia.so.${PV}"
65 QA_EXECSTACK_x86
="usr/lib/opengl/nvidia/lib/libGL.so.${PV}
66 usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
67 usr/lib/opengl/nvidia/extensions/libglx.so"
69 QA_EXECSTACK_amd64
="usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
70 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
71 usr/lib64/xorg/modules/drivers/nvidia_drv.so
72 usr/lib64/libXvMCNVIDIA.so.${PV}
73 usr/lib64/opengl/nvidia/tls/libnvidia-tls.so.${PV}
74 usr/lib64/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
75 usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
76 usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
77 usr/lib64/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
78 usr/lib64/opengl/nvidia/extensions/libglx.so
79 usr/bin/nvidia-xconfig
80 usr/lib64/libXvMCNVIDIA.a:NVXVMC.o"
82 QA_WX_LOAD_x86
="usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
83 usr/lib/opengl/nvidia/lib/libGL.so.${PV}
84 usr/lib/opengl/nvidia/extensions/libglx.so
85 usr/lib/libXvMCNVIDIA.a"
87 QA_WX_LOAD_amd64
="usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
88 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
89 usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
90 usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
91 usr/lib64/opengl/nvidia/extensions/libglx.so"
93 # we really should have QA_DT_HASH_x86 and QA_DT_HASH_amd64 but Portage
94 # does not support it. bug #271416
96 QA_DT_HASH
="usr/lib32/libvdpau_trace.so.${PV}
97 usr/lib32/libvdpau.so.${PV}
98 usr/lib32/libcuda.so.${PV}
99 usr/lib32/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
100 usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
101 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
102 usr/lib32/opengl/nvidia/tls/libnvidia-tls.so.${PV}
103 usr/lib32/libvdpau_nvidia.so.${PV}
104 usr/bin/nvidia-xconfig
105 usr/lib64/libvdpau_trace.so.${PV}
106 usr/lib64/libvdpau.so.${PV}
107 usr/lib64/libcuda.so.${PV}
108 usr/lib64/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
109 usr/lib64/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
110 usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
111 usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
112 usr/lib64/opengl/nvidia/tls/libnvidia-tls.so.${PV}
113 usr/lib64/opengl/nvidia/extensions/libwfb.so
114 usr/lib64/opengl/nvidia/extensions/libglx.so
115 usr/lib64/xorg/modules/drivers/nvidia_drv.so
116 usr/lib64/libXvMCNVIDIA.so.${PV}
117 usr/lib64/libvdpau_nvidia.so.${PV}
119 usr/lib/libvdpau_trace.so.${PV}
120 usr/lib/libvdpau.so.${PV}
121 usr/lib/libcuda.so.${PV}
122 usr/lib/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
123 usr/lib/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
124 usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
125 usr/lib/opengl/nvidia/lib/libGL.so.${PV}
126 usr/lib/opengl/nvidia/tls/libnvidia-tls.so.${PV}
127 usr/lib/opengl/nvidia/extensions/libwfb.so
128 usr/lib/opengl/nvidia/extensions/libglx.so
129 usr/lib/xorg/modules/drivers/nvidia_drv.so
130 usr/lib/libXvMCNVIDIA.so.${PV}
131 usr/lib/libvdpau_nvidia.so.${PV}"
135 NV_PACKAGE
="${X86_NV_PACKAGE}"
138 NV_PACKAGE
="${AMD64_NV_PACKAGE}"
139 elif use x86-fbsd
; then
141 NV_PACKAGE
="${X86_FBSD_NV_PACKAGE}"
144 S
="${WORKDIR}/${NV_PACKAGE}${PKG_V}"
147 ebegin
"Checking for MTRR support"
148 linux_chkconfig_present MTRR
151 if [[ $?
-ne 0 ]] ; then
152 eerror
"Please enable MTRR support in your kernel config, found at:"
154 eerror
" Processor type and features"
155 eerror
" [*] MTRR (Memory Type Range Register) support"
157 eerror
"and recompile your kernel ..."
158 die
"MTRR support not detected!"
163 ebegin
"Checking for Paravirtualized guest support"
164 linux_chkconfig_present PARAVIRT_GUEST
166 if [[ $?
-eq 0 ]]; then
167 eerror
"Please disable PARAVIRT_GUEST in your kernel config, found at:"
169 eerror
" Processor type and features"
170 eerror
" [*] Paravirtualized guest support"
172 eerror
"or XEN support"
174 eerror
"and recompile your kernel .."
175 die
"PARAVIRT_GUEST support detected!"
180 # try to turn off distcc and ccache for people that have a problem with it
181 export DISTCC_DISABLE
=1
182 export CCACHE_DISABLE
=1
184 if use amd64
&& has_multilib_profile
&& [ "${DEFAULT_ABI}" != "amd64" ]; then
185 eerror
"This ebuild doesn't currently support changing your default abi."
186 die
"Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
189 if use kernel_linux
; then
191 MODULE_NAMES
="nvidia(video:${S}/usr/src/nv)"
192 BUILD_PARAMS
="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
193 SYSOUT=${KV_OUT_DIR} HOST_CC=$(tc-getBUILD_CC)"
198 # On BSD userland it wants real make command
199 use userland_BSD
&& MAKE
="$(get_bmake)"
201 export _POSIX2_VERSION
="199209"
203 # Since Nvidia ships 3 different series of drivers, we need to give the user
204 # some kind of guidance as to what version they should install. This tries
205 # to point the user in the right direction but can't be perfect. check
206 # nvidia-driver.eclass
207 nvidia-driver-check-warning
209 # set variables to where files are in the package structure
210 if use kernel_FreeBSD
; then
214 elif use kernel_linux
; then
215 NV_DOC
="${S}/usr/share/doc"
216 NV_EXEC
="${S}/usr/bin"
217 NV_SRC
="${S}/usr/src/nv"
219 die
"Could not determine proper NVIDIA package"
224 if use kernel_linux
&& kernel_is lt
2 6 7; then
226 ewarn
"Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
227 ewarn
"This is not officially supported for ${P}. It is likely you"
228 ewarn
"will not be able to compile or use the kernel module."
229 ewarn
"It is recommended that you upgrade your kernel to a version >= 2.6.7"
231 ewarn
"DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."
234 if ! use x86-fbsd
; then
242 # Patches go below here, add brief description
244 use x86-fbsd
&& cd doc
246 # Use the correct defines to make gtkglext build work
247 epatch
"${FILESDIR}"/NVIDIA_glx-defines.
patch
248 # Use some more sensible gl headers and make way for new glext.h
249 epatch
"${FILESDIR}"/NVIDIA_glx-glheader.
patch
251 if use kernel_linux
; then
252 # Quiet down warnings the user does not need to see
254 -e 's:-Wpointer-arith::g' \
255 -e 's:-Wsign-compare::g' \
256 "${NV_SRC}"/Makefile.kbuild
258 # If you set this then it's your own fault when stuff breaks :)
259 use custom-cflags
&& sed -i "s:-O:${CFLAGS}:" "${NV_SRC}"/Makefile.
*
261 # If greater than 2.6.5 use M= instead of SUBDIR=
262 convert_to_m
"${NV_SRC}"/Makefile.kbuild
267 # This is already the default on Linux, as there's no toplevel Makefile, but
268 # on FreeBSD there's one and triggers the kernel module build, as we install
269 # it by itself, pass this.
272 if use x86-fbsd
; then
273 MAKE
="$(get_bmake)" CFLAGS
="-Wno-sign-compare" emake CC
="$(tc-getCC)" \
274 LD
="$(tc-getLD)" LDFLAGS
="$(raw-ldflags)" || die
275 elif use kernel_linux
; then
276 linux-mod_src_compile
281 local MLTEST
=$
(type dyn_unpack
)
285 if use kernel_linux
; then
286 linux-mod_src_install
288 VIDEOGROUP
="$(egetent group video | cut -d ':' -f 3)"
289 if [ -z "$VIDEOGROUP" ]; then
290 eerror
"Failed to determine the video group gid."
291 die
"Failed to determine the video group gid."
295 [ -f "${FILESDIR}/nvidia" ] || die
"nvidia missing in FILESDIR"
296 sed -e 's:PACKAGE:'${PF}':g' \
297 -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07
> \
299 insinto
/etc
/modprobe.d
300 newins
"${WORKDIR}"/nvidia nvidia.conf || die
301 elif use x86-fbsd
; then
302 insinto
/boot
/modules
303 doins
"${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld" || die
305 exeinto
/boot
/modules
306 doexe
"${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko" || die
309 if has_multilib_profile
; then
311 for ABI
in $
(get_install_abis
) ; do
320 is_final_abi ||
return 0
323 dodoc
"${NV_DOC}"/{XF86Config.sample
,Copyrights
}
324 dohtml
"${NV_DOC}"/html
/*
325 if use x86-fbsd
; then
326 dodoc
"${NV_DOC}/README"
329 newdoc
"${NV_DOC}/README.txt" README
330 dodoc
"${NV_DOC}/NVIDIA_Changelog"
334 dobin
${NV_EXEC}/nvidia-xconfig || die
335 dobin
${NV_EXEC}/nvidia-bug-report.sh || die
338 # Install nvidia library:
339 # the first parameter is the place where to install it
340 # the second parameter is the base name of the library
341 # the third parameter is the provided soversion
346 libname
=$
(basename $2)
348 # libnvidia-cfg.so is no longer supplied in lib32; step over it gracefully
349 if [ -e $2.
$3 ] ; then
351 dosym
${libname}.
$3 $1/${libname}
352 [[ $3 != "1" ]] && dosym
${libname}.
$3 $1/${libname}.1
358 local inslibdir
=$
(get_libdir
)
360 if [[ ${#} -eq 2 ]] ; then
363 elif has_multilib_profile
&& [[ ${ABI} == "x86" ]] ; then
367 local usrpkglibdir
=usr
/${pkglibdir}
368 local libdir
=usr
/X11R
6/${pkglibdir}
369 local drvdir
=${libdir}/modules
/drivers
370 local extdir
=${libdir}/modules
/extensions
371 local incdir
=usr
/include
/GL
373 local NV_ROOT
="/usr/${inslibdir}/opengl/nvidia"
374 local NO_TLS_ROOT
="${NV_ROOT}/no-tls"
375 local TLS_ROOT
="${NV_ROOT}/tls"
376 local X11_LIB_DIR
="/usr/${inslibdir}/xorg"
378 if use x86-fbsd
; then
379 # on FreeBSD everything is on obj/
386 # don't ask me why the headers are there.. glxext.h is missing
389 # on FreeBSD it has just .1 suffix
394 donvidia
${NV_ROOT}/lib ${usrpkglibdir}/libGL.so ${sover}
395 donvidia
${NV_ROOT}/lib ${usrpkglibdir}/libGLcore.so ${sover}
397 donvidia
${NV_ROOT}/lib ${usrpkglibdir}/libnvidia-cfg.so ${sover}
400 donvidia
${NO_TLS_ROOT} ${usrpkglibdir}/libnvidia-tls.so ${sover}
402 if ! use x86-fbsd
; then
403 donvidia
${TLS_ROOT} ${usrpkglibdir}/tls/libnvidia-tls.so ${sover}
407 dosym ..
/tls
/libnvidia-tls.so
${NV_ROOT}/lib
408 dosym ..
/tls
/libnvidia-tls.so
.1 ${NV_ROOT}/lib
409 dosym ..
/tls
/libnvidia-tls.so.
${sover} ${NV_ROOT}/lib
411 dosym ..
/no-tls
/libnvidia-tls.so
${NV_ROOT}/lib
412 dosym ..
/no-tls
/libnvidia-tls.so
.1 ${NV_ROOT}/lib
413 dosym ..
/no-tls
/libnvidia-tls.so.
${sover} ${NV_ROOT}/lib
416 if ! use x86-fbsd
; then
417 # Install the .la file for libtool, to prevent e.g. bug #176423
418 [ -f "${FILESDIR}/libGL.la-r2" ] || die
"libGL.la-r2 missing in FILESDIR"
419 local ver1
=$
(get_version_component_range
1)
420 local ver2
=$
(get_version_component_range
2)
421 local ver3
=$
(get_version_component_range
3)
422 sed -e "s:\${PV}:${PV}:" \
423 -e "s:\${ver1}:${ver1}:" \
424 -e "s:\${ver2}:${ver2}:" \
425 -e "s:\${ver3}:${ver3}:" \
426 -e "s:\${libdir}:${inslibdir}:" \
427 "${FILESDIR}"/libGL.la-r2 > "${D}"/${NV_ROOT}/lib/libGL.la
430 exeinto ${X11_LIB_DIR}/modules/drivers
432 [[ -f ${drvdir}/nvidia_drv.so ]] && \
433 doexe ${drvdir}/nvidia_drv.so
435 insinto /usr/${inslibdir}
436 [[ -f ${libdir}/libXvMCNVIDIA.a ]] && \
437 doins ${libdir}/libXvMCNVIDIA.a
438 exeinto /usr/${inslibdir}
440 [[ -f ${libdir}/libXvMCNVIDIA.so.${PV} ]] && \
441 doexe ${libdir}/libXvMCNVIDIA.so.${PV} && \
442 dosym libXvMCNVIDIA.so.${PV} \
443 /usr/${inslibdir}/libXvMCNVIDIA.so
445 exeinto ${NV_ROOT}/extensions
446 [[ -f ${libdir}/modules/libnvidia-wfb.so.${sover} ]] && \
447 newexe ${libdir}/modules/libnvidia-wfb.so.${sover} libwfb.so
448 [[ -f ${extdir}/libglx.so.${sover} ]] && \
449 newexe ${extdir}/libglx.so.${sover} libglx.so
452 insinto ${NV_ROOT}/include
456 if [[ -f usr/include/cuda/cuda.h ]]; then
457 dodir /usr/include/cuda
458 insinto /usr/include/cuda
459 doins usr/include/cuda/*.h
461 if [[ -f usr/${pkglibdir}/libcuda.so.${PV} ]]; then
462 dolib.so usr/${pkglibdir}/libcuda.so.${PV}
463 dosym libcuda.so.${PV} /usr/${inslibdir}/libcuda.so.1
464 dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
469 if [[ -f usr/include/vdpau/vdpau.h ]]; then
470 dodir /usr/include/vdpau
471 insinto /usr/include/vdpau
472 doins usr/include/vdpau/*.h
474 for vdpaulib in vdpau_nvidia vdpau vdpau_trace; do
475 dolib.so usr/${pkglibdir}/lib${vdpaulib}.so.${PV}
476 dosym lib${vdpaulib}.so.${PV} /usr/${inslibdir}/lib${vdpaulib}.so.1
477 dosym lib${vdpaulib}.so.1 /usr/${inslibdir}/lib${vdpaulib}.so
484 # Clean the dynamic libGL stuff's home to ensure
485 # we dont have stale libs floating around
486 if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
487 rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
489 # Make sure we nuke the old nvidia-glx's env.d file
490 if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
491 rm -f "${ROOT}"/etc/env.d/09nvidia
496 if use kernel_linux; then
497 linux-mod_pkg_postinst
500 # Switch to the nvidia implementation
501 eselect opengl set --use-old nvidia
504 elog "You must be
in the video group to use the NVIDIA device
"
505 elog "For
more info
, read the docs
at"
506 elog "http
://www.gentoo.org
/doc
/en
/nvidia-guide.xml
#doc_chap3_sect6"
509 elog
"This ebuild installs a kernel module and X driver. Both must"
510 elog
"match explicitly in their version. This means, if you restart"
511 elog
"X, you most modprobe -r nvidia before starting it back up"
514 elog
"To use the NVIDIA GLX, run \"eselect opengl set nvidia\""
516 elog
"nVidia has requested that any bug reports submitted have the"
517 elog
"output of /usr/bin/nvidia-bug-report.sh included."
519 elog
"To work with compiz, you must enable the AddARGBGLXVisuals option."
521 elog
"If you are having resolution problems, try disabling DynamicTwinView."
526 # For uclibc or anything non glibc, return false
527 has_version sys-libs
/glibc ||
return 1
529 # Old versions of glibc were lt/no-tls only
530 has_version
'<sys-libs/glibc-2.3.2' && return 1
539 # If we've got nptl, we've got tls
540 built_with_use
--missing true sys-libs
/glibc nptl
&& return 0
542 # 2.3.5 turned off tls for linuxthreads glibc on i486 and i586
543 if use x86
&& has_version
'>=sys-libs/glibc-2.3.5' ; then
545 i486|i586
) return 1 ;;
549 # These versions built linuxthreads version to support tls, too
550 has_version
'>=sys-libs/glibc-2.3.4.20040619-r2' && return 0
556 if use kernel_linux
; then
559 eselect opengl
set --use-old xorg-x11