alsa-utils update, attempted alsa-tools update (which failed, lol missing files ...
[gentoo-diskmaster-overlay.git] / x11-drivers / nvidia-drivers / nvidia-drivers-177.67.ebuild
blob13d4d5bf5a9c6e45512c832e472446c8a40213c4
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.13.ebuild,v 1.1 2008/06/19 12:13:03 chainsaw 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}-pkg1.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="-pkg1"
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
224 cd ${S}/usr/src/nv
225 #epatch "${FILESDIR}"/NV-177.13-new.patch
228 src_compile() {
229 # This is already the default on Linux, as there's no toplevel Makefile, but
230 # on FreeBSD there's one and triggers the kernel module build, as we install
231 # it by itself, pass this.
233 cd "${NV_SRC}"
234 if use x86-fbsd; then
235 MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
236 LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
237 elif use kernel_linux; then
238 linux-mod_src_compile
242 src_install() {
243 local MLTEST=$(type dyn_unpack)
245 cd "${S}"
247 if use kernel_linux; then
248 linux-mod_src_install
250 VIDEOGROUP="$(egetent group video | cut -d ':' -f 3)"
251 if [ -z "$VIDEOGROUP" ]; then
252 eerror "Failed to determine the video group gid."
253 die "Failed to determine the video group gid."
256 # Add the aliases
257 [ -f "${FILESDIR}/nvidia" ] || die "nvidia missing in FILESDIR"
258 sed -e 's:PACKAGE:'${PF}':g' \
259 -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07 > \
260 "${WORKDIR}"/nvidia
261 insinto /etc/modprobe.d
262 doins "${WORKDIR}"/nvidia || die
263 elif use x86-fbsd; then
264 insinto /boot/modules
265 doins "${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld" || die
267 exeinto /boot/modules
268 doexe "${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko" || die
271 if has_multilib_profile ; then
272 local OABI=${ABI}
273 for ABI in $(get_install_abis) ; do
274 src_install-libs
275 done
276 ABI=${OABI}
277 unset OABI
278 elif use amd64 ; then
279 src_install-libs lib32 $(get_multilibdir)
280 src_install-libs lib $(get_libdir)
282 rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/include
283 rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/extensions
284 else
285 src_install-libs
288 is_final_abi || return 0
290 # Documentation
291 dodoc "${NV_DOC}"/{XF86Config.sample,Copyrights}
292 dohtml "${NV_DOC}"/html/*
293 if use x86-fbsd; then
294 dodoc "${NV_DOC}/README"
295 else
296 # Docs
297 newdoc "${NV_DOC}/README.txt" README
298 dodoc "${NV_DOC}/NVIDIA_Changelog"
301 # Helper Apps
302 dobin ${NV_EXEC}/nvidia-xconfig || die
303 dobin ${NV_EXEC}/nvidia-bug-report.sh || die
306 # Install nvidia library:
307 # the first parameter is the place where to install it
308 # the second parameter is the base name of the library
309 # the third parameter is the provided soversion
310 donvidia() {
311 dodir $1
312 exeinto $1
314 libname=$(basename $2)
316 # libnvidia-cfg.so is no longer supplied in lib32; step over it gracefully
317 if [ -e $2.$3 ] ; then
318 doexe $2.$3
319 dosym ${libname}.$3 $1/${libname}
320 [[ $3 != "1" ]] && dosym ${libname}.$3 $1/${libname}.1
324 src_install-libs() {
325 local pkglibdir=lib
326 local inslibdir=$(get_libdir)
328 if [[ ${#} -eq 2 ]] ; then
329 pkglibdir=${1}
330 inslibdir=${2}
331 elif has_multilib_profile && [[ ${ABI} == "x86" ]] ; then
332 pkglibdir=lib32
335 local usrpkglibdir=usr/${pkglibdir}
336 local libdir=usr/X11R6/${pkglibdir}
337 local drvdir=${libdir}/modules/drivers
338 local extdir=${libdir}/modules/extensions
339 local incdir=usr/include/GL
340 local sover=${PV}
341 local NV_ROOT="/usr/${inslibdir}/opengl/nvidia"
342 local NO_TLS_ROOT="${NV_ROOT}/no-tls"
343 local TLS_ROOT="${NV_ROOT}/tls"
344 local X11_LIB_DIR="/usr/${inslibdir}/xorg"
346 if use x86-fbsd; then
347 # on FreeBSD everything is on obj/
348 pkglibdir=obj
349 usrpkglibdir=obj
350 x11pkglibdir=obj
351 drvdir=obj
352 extdir=obj
354 # don't ask me why the headers are there.. glxext.h is missing
355 incdir=doc
357 # on FreeBSD it has just .1 suffix
358 sover=1
361 # The GLX libraries
362 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGL.so ${sover}
363 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGLcore.so ${sover}
365 donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libnvidia-cfg.so ${sover}
367 dodir ${NO_TLS_ROOT}
368 donvidia ${NO_TLS_ROOT} ${usrpkglibdir}/libnvidia-tls.so ${sover}
370 if ! use x86-fbsd; then
371 donvidia ${TLS_ROOT} ${usrpkglibdir}/tls/libnvidia-tls.so ${sover}
374 if want_tls ; then
375 dosym ../tls/libnvidia-tls.so ${NV_ROOT}/lib
376 dosym ../tls/libnvidia-tls.so.1 ${NV_ROOT}/lib
377 dosym ../tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib
378 else
379 dosym ../no-tls/libnvidia-tls.so ${NV_ROOT}/lib
380 dosym ../no-tls/libnvidia-tls.so.1 ${NV_ROOT}/lib
381 dosym ../no-tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib
384 if ! use x86-fbsd; then
385 # Install the .la file for libtool, to prevent e.g. bug #176423
386 [ -f "${FILESDIR}/libGL.la-r2" ] || die "libGL.la-r2 missing in FILESDIR"
387 local ver1=$(get_version_component_range 1)
388 local ver2=$(get_version_component_range 2)
389 local ver3=$(get_version_component_range 3)
390 sed -e "s:\${PV}:${PV}:" \
391 -e "s:\${ver1}:${ver1}:" \
392 -e "s:\${ver2}:${ver2}:" \
393 -e "s:\${ver3}:${ver3}:" \
394 -e "s:\${libdir}:${inslibdir}:" \
395 "${FILESDIR}"/libGL.la-r2 > "${D}"/${NV_ROOT}/lib/libGL.la
398 exeinto ${X11_LIB_DIR}/modules/drivers
400 [[ -f ${drvdir}/nvidia_drv.so ]] && \
401 doexe ${drvdir}/nvidia_drv.so
403 insinto /usr/${inslibdir}
404 [[ -f ${libdir}/libXvMCNVIDIA.a ]] && \
405 doins ${libdir}/libXvMCNVIDIA.a
406 exeinto /usr/${inslibdir}
407 # fix Bug 131315
408 [[ -f ${libdir}/libXvMCNVIDIA.so.${PV} ]] && \
409 doexe ${libdir}/libXvMCNVIDIA.so.${PV} && \
410 dosym libXvMCNVIDIA.so.${PV} \
411 /usr/${inslibdir}/libXvMCNVIDIA.so
413 exeinto ${NV_ROOT}/extensions
414 [[ -f ${libdir}/modules/libnvidia-wfb.so.${sover} ]] && \
415 newexe ${libdir}/modules/libnvidia-wfb.so.${sover} libwfb.so
416 [[ -f ${extdir}/libglx.so.${sover} ]] && \
417 newexe ${extdir}/libglx.so.${sover} libglx.so
419 # Includes
420 insinto ${NV_ROOT}/include
421 doins ${incdir}/*.h
423 #cuda
424 if [[ -f usr/include/cuda/cuda.h ]]; then
425 dodir /usr/include/cuda
426 insinto /usr/include/cuda
427 doins usr/include/cuda/*.h
429 if [[ -f usr/${pkglibdir}/libcuda.so.${PV} ]]; then
430 dolib.so usr/${pkglibdir}/libcuda.so.${PV}
431 dosym libcuda.so.${PV} /usr/${inslibdir}/libcuda.so.1
432 dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
437 pkg_preinst() {
439 # Clean the dynamic libGL stuff's home to ensure
440 # we dont have stale libs floating around
441 if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
442 rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
444 # Make sure we nuke the old nvidia-glx's env.d file
445 if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
446 rm -f "${ROOT}"/etc/env.d/09nvidia
450 pkg_postinst() {
451 if use kernel_linux; then
452 linux-mod_pkg_postinst
455 # Switch to the nvidia implementation
456 eselect opengl set --use-old nvidia
458 echo
459 elog "You must be in the video group to use the NVIDIA device"
460 elog "For more info, read the docs at"
461 elog "http://www.gentoo.org/doc/en/nvidia-guide.xml#doc_chap3_sect6"
462 elog
464 elog "This ebuild installs a kernel module and X driver. Both must"
465 elog "match explicitly in their version. This means, if you restart"
466 elog "X, you most modprobe -r nvidia before starting it back up"
467 elog
469 elog "To use the NVIDIA GLX, run \"eselect opengl set nvidia\""
470 elog
471 elog "nVidia has requested that any bug reports submitted have the"
472 elog "output of /usr/bin/nvidia-bug-report.sh included."
473 elog
474 elog "To work with compiz, you must enable the AddARGBGLXVisuals option."
475 elog
476 elog "If you are having resolution problems, try disabling DynamicTwinView."
477 echo
480 want_tls() {
481 # For uclibc or anything non glibc, return false
482 has_version sys-libs/glibc || return 1
484 # Old versions of glibc were lt/no-tls only
485 has_version '<sys-libs/glibc-2.3.2' && return 1
487 if use x86 ; then
488 case ${CHOST/-*} in
489 i486|i586|i686) ;;
490 *) return 1 ;;
491 esac
494 # If we've got nptl, we've got tls
495 built_with_use --missing true sys-libs/glibc nptl && return 0
497 # 2.3.5 turned off tls for linuxthreads glibc on i486 and i586
498 if use x86 && has_version '>=sys-libs/glibc-2.3.5' ; then
499 case ${CHOST/-*} in
500 i486|i586) return 1 ;;
501 esac
504 # These versions built linuxthreads version to support tls, too
505 has_version '>=sys-libs/glibc-2.3.4.20040619-r2' && return 0
507 return 1
510 pkg_postrm() {
511 if use kernel_linux; then
512 linux-mod_pkg_postrm
514 eselect opengl set --use-old xorg-x11