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-185.18.31.ebuild,v 1.3 2009/08/03 03:58:20 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 )"
19 KEYWORDS
="-* ~amd64 ~x86 ~x86-fbsd"
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}"
146 # PCI IDs of devices known not to work with this version of the drivers.
147 BROKEN_DEVICES
="10de0429c"
150 ebegin
"Checking for MTRR support"
151 linux_chkconfig_present MTRR
154 if [[ $?
-ne 0 ]] ; then
155 eerror
"Please enable MTRR support in your kernel config, found at:"
157 eerror
" Processor type and features"
158 eerror
" [*] MTRR (Memory Type Range Register) support"
160 eerror
"and recompile your kernel ..."
161 die
"MTRR support not detected!"
165 compat_device_check
() {
166 [ ! -r /proc
/bus
/pci
/devices
-o -z "${BROKEN_DEVICES}" ] && return
168 for dev_id
in ${BROKEN_DEVICES} ; do
169 if [ -n "$(grep ${dev_id} /proc/bus/pci/devices)" ]; then
170 ewarn
"It looks like you have a graphics card that is known not to work"
171 ewarn
"with this version of nvidia-drivers. Strongly consider using an"
172 ewarn
"older version for now."
179 # try to turn off distcc and ccache for people that have a problem with it
180 export DISTCC_DISABLE
=1
181 export CCACHE_DISABLE
=1
183 if use amd64
&& has_multilib_profile
&& [ "${DEFAULT_ABI}" != "amd64" ]; then
184 eerror
"This ebuild doesn't currently support changing your default abi."
185 die
"Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
188 if use kernel_linux
; then
190 MODULE_NAMES
="nvidia(video:${S}/usr/src/nv)"
191 BUILD_PARAMS
="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
192 SYSOUT=${KV_OUT_DIR} HOST_CC=$(tc-getBUILD_CC)"
197 # On BSD userland it wants real make command
198 use userland_BSD
&& MAKE
="$(get_bmake)"
200 export _POSIX2_VERSION
="199209"
202 # Since Nvidia ships 3 different series of drivers, we need to give the user
203 # some kind of guidance as to what version they should install. This tries
204 # to point the user in the right direction but can't be perfect. check
205 # nvidia-driver.eclass
206 nvidia-driver-check-warning
208 # set variables to where files are in the package structure
209 if use kernel_FreeBSD
; then
213 elif use kernel_linux
; then
214 NV_DOC
="${S}/usr/share/doc"
215 NV_EXEC
="${S}/usr/bin"
216 NV_SRC
="${S}/usr/src/nv"
218 die
"Could not determine proper NVIDIA package"
223 if use kernel_linux
&& kernel_is lt
2 6 7; then
225 ewarn
"Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
226 ewarn
"This is not officially supported for ${P}. It is likely you"
227 ewarn
"will not be able to compile or use the kernel module."
228 ewarn
"It is recommended that you upgrade your kernel to a version >= 2.6.7"
230 ewarn
"DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."
233 if ! use x86-fbsd
; then
241 # Patches go below here, add brief description
243 use x86-fbsd
&& cd doc
245 # Use the correct defines to make gtkglext build work
246 epatch
"${FILESDIR}"/NVIDIA_glx-defines.
patch
247 # Use some more sensible gl headers and make way for new glext.h
248 epatch
"${FILESDIR}"/NVIDIA_glx-glheader.
patch
250 if use kernel_linux
; then
251 # Quiet down warnings the user does not need to see
253 -e 's:-Wpointer-arith::g' \
254 -e 's:-Wsign-compare::g' \
255 "${NV_SRC}"/Makefile.kbuild
257 # If you set this then it's your own fault when stuff breaks :)
258 use custom-cflags
&& sed -i "s:-O:${CFLAGS}:" "${NV_SRC}"/Makefile.
*
260 # If greater than 2.6.5 use M= instead of SUBDIR=
261 convert_to_m
"${NV_SRC}"/Makefile.kbuild
266 # This is already the default on Linux, as there's no toplevel Makefile, but
267 # on FreeBSD there's one and triggers the kernel module build, as we install
268 # it by itself, pass this.
271 if use x86-fbsd
; then
272 MAKE
="$(get_bmake)" CFLAGS
="-Wno-sign-compare" emake CC
="$(tc-getCC)" \
273 LD
="$(tc-getLD)" LDFLAGS
="$(raw-ldflags)" || die
274 elif use kernel_linux
; then
275 linux-mod_src_compile
280 local MLTEST
=$
(type dyn_unpack
)
284 if use kernel_linux
; then
285 linux-mod_src_install
287 VIDEOGROUP
="$(egetent group video | cut -d ':' -f 3)"
288 if [ -z "$VIDEOGROUP" ]; then
289 eerror
"Failed to determine the video group gid."
290 die
"Failed to determine the video group gid."
294 [ -f "${FILESDIR}/nvidia" ] || die
"nvidia missing in FILESDIR"
295 sed -e 's:PACKAGE:'${PF}':g' \
296 -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07
> \
298 insinto
/etc
/modprobe.d
299 newins
"${WORKDIR}"/nvidia nvidia.conf || die
300 elif use x86-fbsd
; then
301 insinto
/boot
/modules
302 doins
"${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld" || die
304 exeinto
/boot
/modules
305 doexe
"${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko" || die
308 if has_multilib_profile
; then
310 for ABI
in $
(get_install_abis
) ; do
319 is_final_abi ||
return 0
322 dodoc
"${NV_DOC}"/{XF86Config.sample
,Copyrights
}
323 dohtml
"${NV_DOC}"/html
/*
324 if use x86-fbsd
; then
325 dodoc
"${NV_DOC}/README"
328 newdoc
"${NV_DOC}/README.txt" README
329 dodoc
"${NV_DOC}/NVIDIA_Changelog"
333 dobin
${NV_EXEC}/nvidia-xconfig || die
334 dobin
${NV_EXEC}/nvidia-bug-report.sh || die
337 # Install nvidia library:
338 # the first parameter is the place where to install it
339 # the second parameter is the base name of the library
340 # the third parameter is the provided soversion
345 libname
=$
(basename $2)
347 # libnvidia-cfg.so is no longer supplied in lib32; step over it gracefully
348 if [ -e $2.
$3 ] ; then
350 dosym
${libname}.
$3 $1/${libname}
351 [[ $3 != "1" ]] && dosym
${libname}.
$3 $1/${libname}.1
357 local inslibdir
=$
(get_libdir
)
359 if [[ ${#} -eq 2 ]] ; then
362 elif has_multilib_profile
&& [[ ${ABI} == "x86" ]] ; then
366 local usrpkglibdir
=usr
/${pkglibdir}
367 local libdir
=usr
/X11R
6/${pkglibdir}
368 local drvdir
=${libdir}/modules
/drivers
369 local extdir
=${libdir}/modules
/extensions
370 local incdir
=usr
/include
/GL
372 local NV_ROOT
="/usr/${inslibdir}/opengl/nvidia"
373 local NO_TLS_ROOT
="${NV_ROOT}/no-tls"
374 local TLS_ROOT
="${NV_ROOT}/tls"
375 local X11_LIB_DIR
="/usr/${inslibdir}/xorg"
377 if use x86-fbsd
; then
378 # on FreeBSD everything is on obj/
385 # don't ask me why the headers are there.. glxext.h is missing
388 # on FreeBSD it has just .1 suffix
393 donvidia
${NV_ROOT}/lib ${usrpkglibdir}/libGL.so ${sover}
394 donvidia
${NV_ROOT}/lib ${usrpkglibdir}/libGLcore.so ${sover}
396 donvidia
${NV_ROOT}/lib ${usrpkglibdir}/libnvidia-cfg.so ${sover}
399 donvidia
${NO_TLS_ROOT} ${usrpkglibdir}/libnvidia-tls.so ${sover}
401 if ! use x86-fbsd
; then
402 donvidia
${TLS_ROOT} ${usrpkglibdir}/tls/libnvidia-tls.so ${sover}
406 dosym ..
/tls
/libnvidia-tls.so
${NV_ROOT}/lib
407 dosym ..
/tls
/libnvidia-tls.so
.1 ${NV_ROOT}/lib
408 dosym ..
/tls
/libnvidia-tls.so.
${sover} ${NV_ROOT}/lib
410 dosym ..
/no-tls
/libnvidia-tls.so
${NV_ROOT}/lib
411 dosym ..
/no-tls
/libnvidia-tls.so
.1 ${NV_ROOT}/lib
412 dosym ..
/no-tls
/libnvidia-tls.so.
${sover} ${NV_ROOT}/lib
415 if ! use x86-fbsd
; then
416 # Install the .la file for libtool, to prevent e.g. bug #176423
417 [ -f "${FILESDIR}/libGL.la-r2" ] || die
"libGL.la-r2 missing in FILESDIR"
418 local ver1
=$
(get_version_component_range
1)
419 local ver2
=$
(get_version_component_range
2)
420 local ver3
=$
(get_version_component_range
3)
421 sed -e "s:\${PV}:${PV}:" \
422 -e "s:\${ver1}:${ver1}:" \
423 -e "s:\${ver2}:${ver2}:" \
424 -e "s:\${ver3}:${ver3}:" \
425 -e "s:\${libdir}:${inslibdir}:" \
426 "${FILESDIR}"/libGL.la-r2 > "${D}"/${NV_ROOT}/lib/libGL.la
429 exeinto ${X11_LIB_DIR}/modules/drivers
431 [[ -f ${drvdir}/nvidia_drv.so ]] && \
432 doexe ${drvdir}/nvidia_drv.so
434 insinto /usr/${inslibdir}
435 [[ -f ${libdir}/libXvMCNVIDIA.a ]] && \
436 doins ${libdir}/libXvMCNVIDIA.a
437 exeinto /usr/${inslibdir}
439 [[ -f ${libdir}/libXvMCNVIDIA.so.${PV} ]] && \
440 doexe ${libdir}/libXvMCNVIDIA.so.${PV} && \
441 dosym libXvMCNVIDIA.so.${PV} \
442 /usr/${inslibdir}/libXvMCNVIDIA.so
444 exeinto ${NV_ROOT}/extensions
445 [[ -f ${libdir}/modules/libnvidia-wfb.so.${sover} ]] && \
446 newexe ${libdir}/modules/libnvidia-wfb.so.${sover} libwfb.so
447 [[ -f ${extdir}/libglx.so.${sover} ]] && \
448 newexe ${extdir}/libglx.so.${sover} libglx.so
451 insinto ${NV_ROOT}/include
455 if [[ -f usr/include/cuda/cuda.h ]]; then
456 dodir /usr/include/cuda
457 insinto /usr/include/cuda
458 doins usr/include/cuda/*.h
460 if [[ -f usr/${pkglibdir}/libcuda.so.${PV} ]]; then
461 dolib.so usr/${pkglibdir}/libcuda.so.${PV}
462 dosym libcuda.so.${PV} /usr/${inslibdir}/libcuda.so.1
463 dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
468 if [[ -f usr/include/vdpau/vdpau.h ]]; then
469 dodir /usr/include/vdpau
470 insinto /usr/include/vdpau
471 doins usr/include/vdpau/*.h
473 for vdpaulib in vdpau_nvidia vdpau vdpau_trace; do
474 dolib.so usr/${pkglibdir}/lib${vdpaulib}.so.${PV}
475 dosym lib${vdpaulib}.so.${PV} /usr/${inslibdir}/lib${vdpaulib}.so.1
476 dosym lib${vdpaulib}.so.1 /usr/${inslibdir}/lib${vdpaulib}.so
483 # Clean the dynamic libGL stuff's home to ensure
484 # we dont have stale libs floating around
485 if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
486 rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
488 # Make sure we nuke the old nvidia-glx's env.d file
489 if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
490 rm -f "${ROOT}"/etc/env.d/09nvidia
495 if use kernel_linux; then
496 linux-mod_pkg_postinst
499 # Switch to the nvidia implementation
500 eselect opengl set --use-old nvidia
503 elog "You must be
in the video group to use the NVIDIA device
"
504 elog "For
more info
, read the docs
at"
505 elog "http
://www.gentoo.org
/doc
/en
/nvidia-guide.xml
#doc_chap3_sect6"
508 elog
"This ebuild installs a kernel module and X driver. Both must"
509 elog
"match explicitly in their version. This means, if you restart"
510 elog
"X, you most modprobe -r nvidia before starting it back up"
513 elog
"To use the NVIDIA GLX, run \"eselect opengl set nvidia\""
515 elog
"nVidia has requested that any bug reports submitted have the"
516 elog
"output of /usr/bin/nvidia-bug-report.sh included."
518 elog
"To work with compiz, you must enable the AddARGBGLXVisuals option."
520 elog
"If you are having resolution problems, try disabling DynamicTwinView."
525 # For uclibc or anything non glibc, return false
526 has_version sys-libs
/glibc ||
return 1
528 # Old versions of glibc were lt/no-tls only
529 has_version
'<sys-libs/glibc-2.3.2' && return 1
538 # If we've got nptl, we've got tls
539 built_with_use
--missing true sys-libs
/glibc nptl
&& return 0
541 # 2.3.5 turned off tls for linuxthreads glibc on i486 and i586
542 if use x86
&& has_version
'>=sys-libs/glibc-2.3.5' ; then
544 i486|i586
) return 1 ;;
548 # These versions built linuxthreads version to support tls, too
549 has_version
'>=sys-libs/glibc-2.3.4.20040619-r2' && return 0
555 if use kernel_linux
; then
558 eselect opengl
set --use-old xorg-x11