x11-drivers/nvidia-drivers-190.16: Bump (without keyword in Documentation)
[otih-overlay.git] / x11-drivers / nvidia-drivers / nvidia-drivers-190.16.ebuild
blobc5f2e426fe712c6af30eab61c9b7481ce2b0e850
1 # Copyright 1999-2009 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: $
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=""
20 IUSE="acpi custom-cflags gtk multilib kernel_linux"
21 RESTRICT="strip"
22 EMULTILIB_PKG="true"
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"
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 mkdir "${S}"
192 cd "${S}"
193 unpack_makeself
194 else
195 unpack ${A}
198 # Patches go below here, add brief description
199 cd "${S}"
200 use x86-fbsd && cd doc
202 # Use the correct defines to make gtkglext build work
203 epatch "${FILESDIR}"/NVIDIA_glx-defines.patch
204 # Use some more sensible gl headers and make way for new glext.h
205 epatch "${FILESDIR}"/NVIDIA_glx-glheader.patch
207 # allow on board sensors to work with lm_sensors
208 if use kernel_linux; then
209 epatch "${FILESDIR}"/NVIDIA_i2c-hwmon.patch
212 if use kernel_linux; then
213 # Quiet down warnings the user does not need to see
214 sed -i \
215 -e 's:-Wpointer-arith::g' \
216 -e 's:-Wsign-compare::g' \
217 "${NV_SRC}"/Makefile.kbuild
219 # If you set this then it's your own fault when stuff breaks :)
220 use custom-cflags && sed -i "s:-O:${CFLAGS}:" "${NV_SRC}"/Makefile.*
222 # If greater than 2.6.5 use M= instead of SUBDIR=
223 convert_to_m "${NV_SRC}"/Makefile.kbuild
227 src_compile() {
228 # This is already the default on Linux, as there's no toplevel Makefile, but
229 # on FreeBSD there's one and triggers the kernel module build, as we install
230 # it by itself, pass this.
232 cd "${NV_SRC}"
233 if use x86-fbsd; then
234 MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
235 LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
236 elif use kernel_linux; then
237 linux-mod_src_compile
241 src_install() {
242 local MLTEST=$(type dyn_unpack)
244 cd "${S}"
246 if use kernel_linux; then
247 linux-mod_src_install
249 VIDEOGROUP="$(egetent group video | cut -d ':' -f 3)"
250 if [ -z "$VIDEOGROUP" ]; then
251 eerror "Failed to determine the video group gid."
252 die "Failed to determine the video group gid."
255 # Add the aliases
256 [ -f "${FILESDIR}/nvidia" ] || die "nvidia missing in FILESDIR"
257 sed -e 's:PACKAGE:'${PF}':g' \
258 -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07 > \
259 "${WORKDIR}"/nvidia
260 insinto /etc/modprobe.d
261 doins "${WORKDIR}"/nvidia || die
262 elif use x86-fbsd; then
263 insinto /boot/modules
264 doins "${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld" || die
266 exeinto /boot/modules
267 doexe "${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko" || die
270 if has_multilib_profile ; then
271 local OABI=${ABI}
272 for ABI in $(get_install_abis) ; do
273 src_install-libs
274 done
275 ABI=${OABI}
276 unset OABI
277 elif use amd64 ; then
278 src_install-libs lib32 $(get_multilibdir)
279 src_install-libs lib $(get_libdir)
281 rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/include
282 rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/extensions
283 else
284 src_install-libs
287 is_final_abi || return 0
289 # Documentation
290 dodoc "${NV_DOC}"/{XF86Config.sample,Copyrights}
291 dohtml "${NV_DOC}"/html/*
292 if use x86-fbsd; then
293 dodoc "${NV_DOC}/README"
294 else
295 # Docs
296 newdoc "${NV_DOC}/README.txt" README
297 dodoc "${NV_DOC}/NVIDIA_Changelog"
300 # Helper Apps
301 dobin ${NV_EXEC}/nvidia-xconfig || die
302 dobin ${NV_EXEC}/nvidia-bug-report.sh || die
305 # Install nvidia library:
306 # the first parameter is the place where to install it
307 # the second parameter is the base name of the library
308 # the third parameter is the provided soversion
309 donvidia() {
310 dodir $1
311 exeinto $1
313 libname=$(basename $2)
315 # libnvidia-cfg.so is no longer supplied in lib32; step over it gracefully
316 if [ -e $2.$3 ] ; then
317 doexe $2.$3
318 dosym ${libname}.$3 $1/${libname}
319 [[ $3 != "1" ]] && dosym ${libname}.$3 $1/${libname}.1
323 src_install-libs() {
324 local pkglibdir=lib
325 local inslibdir=$(get_libdir)
327 if [[ ${#} -eq 2 ]] ; then
328 pkglibdir=${1}
329 inslibdir=${2}
330 elif has_multilib_profile && [[ ${ABI} == "x86" ]] ; then
331 pkglibdir=lib32
334 local usrpkglibdir=usr/${pkglibdir}
335 local libdir=usr/X11R6/${pkglibdir}
336 local drvdir=${libdir}/modules/drivers
337 local extdir=${libdir}/modules/extensions
338 local incdir=usr/include/GL
339 local sover=${PV}
340 local NV_ROOT="/usr/${inslibdir}/opengl/nvidia"
341 local NO_TLS_ROOT="${NV_ROOT}/no-tls"
342 local TLS_ROOT="${NV_ROOT}/tls"
343 local X11_LIB_DIR="/usr/${inslibdir}/xorg"
345 if use x86-fbsd; then
346 # on FreeBSD everything is on obj/
347 pkglibdir=obj
348 usrpkglibdir=obj
349 x11pkglibdir=obj
350 drvdir=obj
351 extdir=obj
353 # don't ask me why the headers are there.. glxext.h is missing
354 incdir=doc
356 # on FreeBSD it has just .1 suffix
357 sover=1
360 # The GLX libraries
361 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGL.so ${sover}
362 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGLcore.so ${sover}
364 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libnvidia-cfg.so ${sover}
366 dodir ${NO_TLS_ROOT}
367 donvidia ${NO_TLS_ROOT} ${usrpkglibdir}/libnvidia-tls.so ${sover}
369 if ! use x86-fbsd; then
370 donvidia ${TLS_ROOT} ${usrpkglibdir}/tls/libnvidia-tls.so ${sover}
373 if want_tls ; then
374 dosym ../tls/libnvidia-tls.so ${NV_ROOT}/lib
375 dosym ../tls/libnvidia-tls.so.1 ${NV_ROOT}/lib
376 dosym ../tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib
377 else
378 dosym ../no-tls/libnvidia-tls.so ${NV_ROOT}/lib
379 dosym ../no-tls/libnvidia-tls.so.1 ${NV_ROOT}/lib
380 dosym ../no-tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib
383 if ! use x86-fbsd; then
384 # Install the .la file for libtool, to prevent e.g. bug #176423
385 [ -f "${FILESDIR}/libGL.la-r2" ] || die "libGL.la-r2 missing in FILESDIR"
386 local ver1=$(get_version_component_range 1)
387 local ver2=$(get_version_component_range 2)
388 local ver3=$(get_version_component_range 3)
389 sed -e "s:\${PV}:${PV}:" \
390 -e "s:\${ver1}:${ver1}:" \
391 -e "s:\${ver2}:${ver2}:" \
392 -e "s:\${ver3}:${ver3}:" \
393 -e "s:\${libdir}:${inslibdir}:" \
394 "${FILESDIR}"/libGL.la-r2 > "${D}"/${NV_ROOT}/lib/libGL.la
397 exeinto ${X11_LIB_DIR}/modules/drivers
399 [[ -f ${drvdir}/nvidia_drv.so ]] && \
400 doexe ${drvdir}/nvidia_drv.so
402 insinto /usr/${inslibdir}
403 [[ -f ${libdir}/libXvMCNVIDIA.a ]] && \
404 doins ${libdir}/libXvMCNVIDIA.a
405 exeinto /usr/${inslibdir}
406 # fix Bug 131315
407 [[ -f ${libdir}/libXvMCNVIDIA.so.${PV} ]] && \
408 doexe ${libdir}/libXvMCNVIDIA.so.${PV} && \
409 dosym libXvMCNVIDIA.so.${PV} \
410 /usr/${inslibdir}/libXvMCNVIDIA.so
412 exeinto ${NV_ROOT}/extensions
413 [[ -f ${libdir}/modules/libnvidia-wfb.so.${sover} ]] && \
414 newexe ${libdir}/modules/libnvidia-wfb.so.${sover} libwfb.so
415 [[ -f ${extdir}/libglx.so.${sover} ]] && \
416 newexe ${extdir}/libglx.so.${sover} libglx.so
418 # Includes
419 insinto ${NV_ROOT}/include
420 doins ${incdir}/*.h
422 #cuda
423 if [[ -f usr/include/cuda/cuda.h ]]; then
424 dodir /usr/include/cuda
425 insinto /usr/include/cuda
426 doins usr/include/cuda/*.h
428 if [[ -f usr/${pkglibdir}/libcuda.so.${PV} ]]; then
429 dolib.so usr/${pkglibdir}/libcuda.so.${PV}
430 dosym libcuda.so.${PV} /usr/${inslibdir}/libcuda.so.1
431 dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
435 #vdpau
436 if [[ -f usr/include/vdpau/vdpau.h ]]; then
437 dodir /usr/include/vdpau
438 insinto /usr/include/vdpau
439 doins usr/include/vdpau/*.h
441 for vdpaulib in vdpau_nvidia vdpau vdpau_trace; do
442 dolib.so usr/${pkglibdir}/lib${vdpaulib}.so.${PV}
443 dosym lib${vdpaulib}.so.${PV} /usr/${inslibdir}/lib${vdpaulib}.so.1
444 dosym lib${vdpaulib}.so.1 /usr/${inslibdir}/lib${vdpaulib}.so
445 done
449 pkg_preinst() {
451 # Clean the dynamic libGL stuff's home to ensure
452 # we dont have stale libs floating around
453 if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
454 rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
456 # Make sure we nuke the old nvidia-glx's env.d file
457 if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
458 rm -f "${ROOT}"/etc/env.d/09nvidia
462 pkg_postinst() {
463 if use kernel_linux; then
464 linux-mod_pkg_postinst
467 # Switch to the nvidia implementation
468 eselect opengl set --use-old nvidia
470 echo
471 elog "You must be in the video group to use the NVIDIA device"
472 elog "For more info, read the docs at"
473 elog "http://www.gentoo.org/doc/en/nvidia-guide.xml#doc_chap3_sect6"
474 elog
476 elog "This ebuild installs a kernel module and X driver. Both must"
477 elog "match explicitly in their version. This means, if you restart"
478 elog "X, you most modprobe -r nvidia before starting it back up"
479 elog
481 elog "To use the NVIDIA GLX, run \"eselect opengl set nvidia\""
482 elog
483 elog "nVidia has requested that any bug reports submitted have the"
484 elog "output of /usr/bin/nvidia-bug-report.sh included."
485 elog
486 elog "To work with compiz, you must enable the AddARGBGLXVisuals option."
487 elog
488 elog "If you are having resolution problems, try disabling DynamicTwinView."
489 echo
492 want_tls() {
493 # For uclibc or anything non glibc, return false
494 has_version sys-libs/glibc || return 1
496 # Old versions of glibc were lt/no-tls only
497 has_version '<sys-libs/glibc-2.3.2' && return 1
499 if use x86 ; then
500 case ${CHOST/-*} in
501 i486|i586|i686) ;;
502 *) return 1 ;;
503 esac
506 # If we've got nptl, we've got tls
507 built_with_use --missing true sys-libs/glibc nptl && return 0
509 # 2.3.5 turned off tls for linuxthreads glibc on i486 and i586
510 if use x86 && has_version '>=sys-libs/glibc-2.3.5' ; then
511 case ${CHOST/-*} in
512 i486|i586) return 1 ;;
513 esac
516 # These versions built linuxthreads version to support tls, too
517 has_version '>=sys-libs/glibc-2.3.4.20040619-r2' && return 0
519 return 1
522 pkg_postrm() {
523 if use kernel_linux; then
524 linux-mod_pkg_postrm
526 eselect opengl set --use-old xorg-x11