masking nvidia-drivers-180.06 because it's a beta driver
[fwz-overlay.git] / x11-drivers / nvidia-drivers / nvidia-drivers-177.82.ebuild
blob1f3f6155bfbef61dc045a47224a96910c418fcc0
1 # Copyright 1999-2008 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-177.80.ebuild,v 1.1 2008/10/13 00:35:38 ricmm 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? ( http://us.download.nvidia.com/XFree86/Linux-x86/${PV}/${X86_NV_PACKAGE}-pkg0.run )
14 amd64? ( http://us.download.nvidia.com/XFree86/Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}-pkg2.run )
15 x86-fbsd? ( http://us.download.nvidia.com/freebsd/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )"
17 LICENSE="NVIDIA"
18 SLOT="0"
19 KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
20 IUSE="acpi custom-cflags gtk multilib kernel_linux"
21 RESTRICT="strip"
22 EMULTILIB_PKG="true"
24 COMMON="x11-base/xorg-server
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"
29 DEPEND="${COMMON}
30 kernel_linux? ( virtual/linux-sources )
31 app-admin/eselect-opengl"
32 RDEPEND="${COMMON}
33 kernel_linux? ( virtual/modutils )
34 media-libs/mesa
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}"
48 QA_TEXTRELS_x86_fbsd="boot/modules/nvidia.ko
49 usr/lib/opengl/nvidia/lib/libGL.so.1
50 usr/lib/opengl/nvidia/lib/libGLcore.so.1
51 usr/lib/opengl/nvidia/lib/libnvidia-cfg.so.1
52 usr/lib/opengl/nvidia/no-tls/libnvidia-tls.so.1
53 usr/lib/opengl/nvidia/extensions/libglx.so
54 usr/lib/xorg/modules/drivers/nvidia_drv.so"
56 QA_TEXTRELS_amd64="usr/lib32/opengl/nvidia/tls/libnvidia-tls.so.${PV}
57 usr/lib32/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
58 usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
59 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
60 usr/lib32/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
61 usr/lib32/libcuda.so.${PV}"
63 QA_EXECSTACK_x86="usr/lib/opengl/nvidia/lib/libGL.so.${PV}
64 usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
65 usr/lib/opengl/nvidia/extensions/libglx.so"
67 QA_EXECSTACK_amd64="usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
68 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
69 usr/lib64/xorg/modules/drivers/nvidia_drv.so
70 usr/lib64/libXvMCNVIDIA.so.${PV}
71 usr/lib64/opengl/nvidia/tls/libnvidia-tls.so.${PV}
72 usr/lib64/opengl/nvidia/no-tls/libnvidia-tls.so.${PV}
73 usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
74 usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
75 usr/lib64/opengl/nvidia/lib/libnvidia-cfg.so.${PV}
76 usr/lib64/opengl/nvidia/extensions/libglx.so
77 usr/bin/nvidia-xconfig"
79 QA_WX_LOAD_x86="usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
80 usr/lib/opengl/nvidia/lib/libGL.so.${PV}
81 usr/lib/opengl/nvidia/extensions/libglx.so"
83 QA_WX_LOAD_amd64="usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
84 usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
85 usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
86 usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
87 usr/lib64/opengl/nvidia/extensions/libglx.so"
89 if use x86; then
90 PKG_V="-pkg0"
91 NV_PACKAGE="${X86_NV_PACKAGE}"
92 elif use amd64; then
93 PKG_V="-pkg2"
94 NV_PACKAGE="${AMD64_NV_PACKAGE}"
95 elif use x86-fbsd; then
96 PKG_V=""
97 NV_PACKAGE="${X86_FBSD_NV_PACKAGE}"
100 S="${WORKDIR}/${NV_PACKAGE}${PKG_V}"
102 mtrr_check() {
103 ebegin "Checking for MTRR support"
104 linux_chkconfig_present MTRR
105 eend $?
107 if [[ $? -ne 0 ]] ; then
108 eerror "Please enable MTRR support in your kernel config, found at:"
109 eerror
110 eerror " Processor type and features"
111 eerror " [*] MTRR (Memory Type Range Register) support"
112 eerror
113 eerror "and recompile your kernel ..."
114 die "MTRR support not detected!"
118 paravirt_check() {
119 ebegin "Checking for Paravirtualized guest support"
120 linux_chkconfig_present PARAVIRT
122 if [[ $? -eq 0 ]]; then
123 eerror "Please disable PARAVIRT in your kernel config, found at:"
124 eerror
125 eerror " Processor type and features"
126 eerror " [*] Paravirtualized guest support"
127 eerror
128 eerror "or XEN support"
129 eerror
130 eerror "and recompile your kernel .."
131 die "PARAVIRT support detected!"
135 pkg_setup() {
136 # try to turn off distcc and ccache for people that have a problem with it
137 export DISTCC_DISABLE=1
138 export CCACHE_DISABLE=1
140 if use amd64 && has_multilib_profile && [ "${DEFAULT_ABI}" != "amd64" ]; then
141 eerror "This ebuild doesn't currently support changing your default abi."
142 die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
145 if use kernel_linux; then
146 linux-mod_pkg_setup
147 MODULE_NAMES="nvidia(video:${S}/usr/src/nv)"
148 BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
149 SYSOUT=${KV_OUT_DIR} HOST_CC=$(tc-getBUILD_CC)"
150 mtrr_check
151 paravirt_check
154 # On BSD userland it wants real make command
155 use userland_BSD && MAKE="$(get_bmake)"
157 export _POSIX2_VERSION="199209"
159 # Since Nvidia ships 3 different series of drivers, we need to give the user
160 # some kind of guidance as to what version they should install. This tries
161 # to point the user in the right direction but can't be perfect. check
162 # nvidia-driver.eclass
163 nvidia-driver-check-warning
165 # set variables to where files are in the package structure
166 if use kernel_FreeBSD; then
167 NV_DOC="${S}/doc"
168 NV_EXEC="${S}/obj"
169 NV_SRC="${S}/src"
170 elif use kernel_linux; then
171 NV_DOC="${S}/usr/share/doc"
172 NV_EXEC="${S}/usr/bin"
173 NV_SRC="${S}/usr/src/nv"
174 else
175 die "Could not determine proper NVIDIA package"
179 src_unpack() {
180 if use kernel_linux && kernel_is lt 2 6 7; then
181 echo
182 ewarn "Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
183 ewarn "This is not officially supported for ${P}. It is likely you"
184 ewarn "will not be able to compile or use the kernel module."
185 ewarn "It is recommended that you upgrade your kernel to a version >= 2.6.7"
186 echo
187 ewarn "DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."
190 if ! use x86-fbsd; then
191 cd "${WORKDIR}"
192 bash "${DISTDIR}"/${NV_PACKAGE}${PKG_V}.run --extract-only
193 else
194 unpack ${A}
197 # Patches go below here, add brief description
198 cd "${S}"
199 use x86-fbsd && cd doc
201 # Use the correct defines to make gtkglext build work
202 epatch "${FILESDIR}"/NVIDIA_glx-defines.patch
203 # Use some more sensible gl headers and make way for new glext.h
204 epatch "${FILESDIR}"/NVIDIA_glx-glheader.patch
206 # allow on board sensors to work with lm_sensors
207 if use kernel_linux; then
208 epatch "${FILESDIR}"/NVIDIA_i2c-hwmon.patch
211 if use kernel_linux; then
212 # Quiet down warnings the user does not need to see
213 sed -i \
214 -e 's:-Wpointer-arith::g' \
215 -e 's:-Wsign-compare::g' \
216 "${NV_SRC}"/Makefile.kbuild
218 # If you set this then it's your own fault when stuff breaks :)
219 use custom-cflags && sed -i "s:-O:${CFLAGS}:" Makefile.*
221 # If greater than 2.6.5 use M= instead of SUBDIR=
222 convert_to_m "${NV_SRC}"/Makefile.kbuild
226 src_compile() {
227 # This is already the default on Linux, as there's no toplevel Makefile, but
228 # on FreeBSD there's one and triggers the kernel module build, as we install
229 # it by itself, pass this.
231 cd "${NV_SRC}"
232 if use x86-fbsd; then
233 MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
234 LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
235 elif use kernel_linux; then
236 linux-mod_src_compile
240 src_install() {
241 local MLTEST=$(type dyn_unpack)
243 cd "${S}"
245 if use kernel_linux; then
246 linux-mod_src_install
248 VIDEOGROUP="$(egetent group video | cut -d ':' -f 3)"
249 if [ -z "$VIDEOGROUP" ]; then
250 eerror "Failed to determine the video group gid."
251 die "Failed to determine the video group gid."
254 # Add the aliases
255 [ -f "${FILESDIR}/nvidia" ] || die "nvidia missing in FILESDIR"
256 sed -e 's:PACKAGE:'${PF}':g' \
257 -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07 > \
258 "${WORKDIR}"/nvidia
259 insinto /etc/modprobe.d
260 doins "${WORKDIR}"/nvidia || die
261 elif use x86-fbsd; then
262 insinto /boot/modules
263 doins "${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld" || die
265 exeinto /boot/modules
266 doexe "${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko" || die
269 if has_multilib_profile ; then
270 local OABI=${ABI}
271 for ABI in $(get_install_abis) ; do
272 src_install-libs
273 done
274 ABI=${OABI}
275 unset OABI
276 elif use amd64 ; then
277 src_install-libs lib32 $(get_multilibdir)
278 src_install-libs lib $(get_libdir)
280 rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/include
281 rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/extensions
282 else
283 src_install-libs
286 is_final_abi || return 0
288 # Documentation
289 dodoc "${NV_DOC}"/{XF86Config.sample,Copyrights}
290 dohtml "${NV_DOC}"/html/*
291 if use x86-fbsd; then
292 dodoc "${NV_DOC}/README"
293 else
294 # Docs
295 newdoc "${NV_DOC}/README.txt" README
296 dodoc "${NV_DOC}/NVIDIA_Changelog"
299 # Helper Apps
300 dobin ${NV_EXEC}/nvidia-xconfig || die
301 dobin ${NV_EXEC}/nvidia-bug-report.sh || die
304 # Install nvidia library:
305 # the first parameter is the place where to install it
306 # the second parameter is the base name of the library
307 # the third parameter is the provided soversion
308 donvidia() {
309 dodir $1
310 exeinto $1
312 libname=$(basename $2)
314 # libnvidia-cfg.so is no longer supplied in lib32; step over it gracefully
315 if [ -e $2.$3 ] ; then
316 doexe $2.$3
317 dosym ${libname}.$3 $1/${libname}
318 [[ $3 != "1" ]] && dosym ${libname}.$3 $1/${libname}.1
322 src_install-libs() {
323 local pkglibdir=lib
324 local inslibdir=$(get_libdir)
326 if [[ ${#} -eq 2 ]] ; then
327 pkglibdir=${1}
328 inslibdir=${2}
329 elif has_multilib_profile && [[ ${ABI} == "x86" ]] ; then
330 pkglibdir=lib32
333 local usrpkglibdir=usr/${pkglibdir}
334 local libdir=usr/X11R6/${pkglibdir}
335 local drvdir=${libdir}/modules/drivers
336 local extdir=${libdir}/modules/extensions
337 local incdir=usr/include/GL
338 local sover=${PV}
339 local NV_ROOT="/usr/${inslibdir}/opengl/nvidia"
340 local NO_TLS_ROOT="${NV_ROOT}/no-tls"
341 local TLS_ROOT="${NV_ROOT}/tls"
342 local X11_LIB_DIR="/usr/${inslibdir}/xorg"
344 if use x86-fbsd; then
345 # on FreeBSD everything is on obj/
346 pkglibdir=obj
347 usrpkglibdir=obj
348 x11pkglibdir=obj
349 drvdir=obj
350 extdir=obj
352 # don't ask me why the headers are there.. glxext.h is missing
353 incdir=doc
355 # on FreeBSD it has just .1 suffix
356 sover=1
359 # The GLX libraries
360 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGL.so ${sover}
361 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGLcore.so ${sover}
363 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libnvidia-cfg.so ${sover}
365 dodir ${NO_TLS_ROOT}
366 donvidia ${NO_TLS_ROOT} ${usrpkglibdir}/libnvidia-tls.so ${sover}
368 if ! use x86-fbsd; then
369 donvidia ${TLS_ROOT} ${usrpkglibdir}/tls/libnvidia-tls.so ${sover}
372 if want_tls ; then
373 dosym ../tls/libnvidia-tls.so ${NV_ROOT}/lib
374 dosym ../tls/libnvidia-tls.so.1 ${NV_ROOT}/lib
375 dosym ../tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib
376 else
377 dosym ../no-tls/libnvidia-tls.so ${NV_ROOT}/lib
378 dosym ../no-tls/libnvidia-tls.so.1 ${NV_ROOT}/lib
379 dosym ../no-tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib
382 if ! use x86-fbsd; then
383 # Install the .la file for libtool, to prevent e.g. bug #176423
384 [ -f "${FILESDIR}/libGL.la-r2" ] || die "libGL.la-r2 missing in FILESDIR"
385 local ver1=$(get_version_component_range 1)
386 local ver2=$(get_version_component_range 2)
387 local ver3=$(get_version_component_range 3)
388 sed -e "s:\${PV}:${PV}:" \
389 -e "s:\${ver1}:${ver1}:" \
390 -e "s:\${ver2}:${ver2}:" \
391 -e "s:\${ver3}:${ver3}:" \
392 -e "s:\${libdir}:${inslibdir}:" \
393 "${FILESDIR}"/libGL.la-r2 > "${D}"/${NV_ROOT}/lib/libGL.la
396 exeinto ${X11_LIB_DIR}/modules/drivers
398 [[ -f ${drvdir}/nvidia_drv.so ]] && \
399 doexe ${drvdir}/nvidia_drv.so
401 insinto /usr/${inslibdir}
402 [[ -f ${libdir}/libXvMCNVIDIA.a ]] && \
403 doins ${libdir}/libXvMCNVIDIA.a
404 exeinto /usr/${inslibdir}
405 # fix Bug 131315
406 [[ -f ${libdir}/libXvMCNVIDIA.so.${PV} ]] && \
407 doexe ${libdir}/libXvMCNVIDIA.so.${PV} && \
408 dosym libXvMCNVIDIA.so.${PV} \
409 /usr/${inslibdir}/libXvMCNVIDIA.so
411 exeinto ${NV_ROOT}/extensions
412 [[ -f ${libdir}/modules/libnvidia-wfb.so.${sover} ]] && \
413 newexe ${libdir}/modules/libnvidia-wfb.so.${sover} libwfb.so
414 [[ -f ${extdir}/libglx.so.${sover} ]] && \
415 newexe ${extdir}/libglx.so.${sover} libglx.so
417 # Includes
418 insinto ${NV_ROOT}/include
419 doins ${incdir}/*.h
421 #cuda
422 if [[ -f usr/include/cuda/cuda.h ]]; then
423 dodir /usr/include/cuda
424 insinto /usr/include/cuda
425 doins usr/include/cuda/*.h
427 if [[ -f usr/${pkglibdir}/libcuda.so.${PV} ]]; then
428 dolib.so usr/${pkglibdir}/libcuda.so.${PV}
429 dosym libcuda.so.${PV} /usr/${inslibdir}/libcuda.so.1
430 dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
435 pkg_preinst() {
437 # Clean the dynamic libGL stuff's home to ensure
438 # we dont have stale libs floating around
439 if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
440 rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
442 # Make sure we nuke the old nvidia-glx's env.d file
443 if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
444 rm -f "${ROOT}"/etc/env.d/09nvidia
448 pkg_postinst() {
449 if use kernel_linux; then
450 linux-mod_pkg_postinst
453 # Switch to the nvidia implementation
454 eselect opengl set --use-old nvidia
456 echo
457 elog "You must be in the video group to use the NVIDIA device"
458 elog "For more info, read the docs at"
459 elog "http://www.gentoo.org/doc/en/nvidia-guide.xml#doc_chap3_sect6"
460 elog
462 elog "This ebuild installs a kernel module and X driver. Both must"
463 elog "match explicitly in their version. This means, if you restart"
464 elog "X, you most modprobe -r nvidia before starting it back up"
465 elog
467 elog "To use the NVIDIA GLX, run \"eselect opengl set nvidia\""
468 elog
469 elog "nVidia has requested that any bug reports submitted have the"
470 elog "output of /usr/bin/nvidia-bug-report.sh included."
471 elog
472 elog "To work with compiz, you must enable the AddARGBGLXVisuals option."
473 elog
474 elog "If you are having resolution problems, try disabling DynamicTwinView."
475 echo
478 want_tls() {
479 # For uclibc or anything non glibc, return false
480 has_version sys-libs/glibc || return 1
482 # Old versions of glibc were lt/no-tls only
483 has_version '<sys-libs/glibc-2.3.2' && return 1
485 if use x86 ; then
486 case ${CHOST/-*} in
487 i486|i586|i686) ;;
488 *) return 1 ;;
489 esac
492 # If we've got nptl, we've got tls
493 built_with_use --missing true sys-libs/glibc nptl && return 0
495 # 2.3.5 turned off tls for linuxthreads glibc on i486 and i586
496 if use x86 && has_version '>=sys-libs/glibc-2.3.5' ; then
497 case ${CHOST/-*} in
498 i486|i586) return 1 ;;
499 esac
502 # These versions built linuxthreads version to support tls, too
503 has_version '>=sys-libs/glibc-2.3.4.20040619-r2' && return 0
505 return 1
508 pkg_postrm() {
509 if use kernel_linux; then
510 linux-mod_pkg_postrm
512 eselect opengl set --use-old xorg-x11