Gentoo Archives: gentoo-commits

From: Jeroen Roovers <jer@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-drivers/nvidia-drivers/, x11-drivers/nvidia-drivers/files/
Date: Sun, 31 Jan 2016 09:23:19
Message-Id: 1454231947.83deb920c140df1c67f23ff49a28b43f91b710fc.jer@gentoo
1 commit: 83deb920c140df1c67f23ff49a28b43f91b710fc
2 Author: Jeroen Roovers <jer <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jan 31 09:10:56 2016 +0000
4 Commit: Jeroen Roovers <jer <AT> gentoo <DOT> org>
5 CommitDate: Sun Jan 31 09:19:07 2016 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=83deb920
7
8 x11-drivers/nvidia-drivers: Fix desktop file (bug #562910)
9
10 Package-Manager: portage-2.2.27
11
12 .../nvidia-drivers/files/nvidia-settings.desktop | 7 +
13 .../nvidia-drivers-304.131-r2.ebuild | 488 +++++++++++++++++++
14 .../nvidia-drivers/nvidia-drivers-340.96-r3.ebuild | 517 ++++++++++++++++++++
15 .../nvidia-drivers/nvidia-drivers-346.96-r4.ebuild | 528 ++++++++++++++++++++
16 .../nvidia-drivers/nvidia-drivers-352.79-r2.ebuild | 527 ++++++++++++++++++++
17 .../nvidia-drivers/nvidia-drivers-358.16-r3.ebuild | 539 +++++++++++++++++++++
18 .../nvidia-drivers/nvidia-drivers-361.18-r3.ebuild | 530 ++++++++++++++++++++
19 7 files changed, 3136 insertions(+)
20
21 diff --git a/x11-drivers/nvidia-drivers/files/nvidia-settings.desktop b/x11-drivers/nvidia-drivers/files/nvidia-settings.desktop
22 new file mode 100644
23 index 0000000..b4b452e
24 --- /dev/null
25 +++ b/x11-drivers/nvidia-drivers/files/nvidia-settings.desktop
26 @@ -0,0 +1,7 @@
27 +[Desktop Entry]
28 +Type=Application
29 +Name=NVIDIA X Server Settings
30 +Comment=Configure NVIDIA X Server Settings
31 +Exec=/usr/bin/nvidia-settings
32 +Icon=nvidia-settings
33 +Categories=System;Settings;
34
35 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-304.131-r2.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-304.131-r2.ebuild
36 new file mode 100644
37 index 0000000..1ff7a6c
38 --- /dev/null
39 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-304.131-r2.ebuild
40 @@ -0,0 +1,488 @@
41 +# Copyright 1999-2015 Gentoo Foundation
42 +# Distributed under the terms of the GNU General Public License v2
43 +# $Id$
44 +
45 +EAPI=5
46 +inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
47 + portability toolchain-funcs unpacker user versionator udev
48 +
49 +NV_URI="http://us.download.nvidia.com/XFree86/"
50 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
51 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
52 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
53 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
54 +
55 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
56 +HOMEPAGE="http://www.nvidia.com/"
57 +SRC_URI="
58 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
59 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
60 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
61 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
62 + tools? ( ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2 )
63 +"
64 +
65 +LICENSE="GPL-2 NVIDIA-r1"
66 +SLOT="0/${PV%.*}"
67 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
68 +IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel static-libs +tools +X"
69 +RESTRICT="bindist mirror strip"
70 +EMULTILIB_PKG="true"
71 +
72 +COMMON="
73 + app-eselect/eselect-opencl
74 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
75 + tools? (
76 + dev-libs/atk
77 + dev-libs/glib:2
78 + x11-libs/gdk-pixbuf
79 + x11-libs/gtk+:2
80 + x11-libs/libX11
81 + x11-libs/libXext
82 + x11-libs/pango[X]
83 + x11-libs/pangox-compat
84 + )
85 + X? (
86 + >=app-eselect/eselect-opengl-1.0.9
87 + )
88 +"
89 +DEPEND="${COMMON}
90 + kernel_linux? (
91 + virtual/linux-sources
92 + virtual/pkgconfig
93 + )"
94 +RDEPEND="${COMMON}
95 + acpi? ( sys-power/acpid )
96 + tools? ( !media-video/nvidia-settings )
97 + X? (
98 + <x11-base/xorg-server-1.18.99:=
99 + x11-libs/libXvMC
100 + multilib? (
101 + >=x11-libs/libX11-1.6.2[abi_x86_32]
102 + >=x11-libs/libXext-1.3.2[abi_x86_32]
103 + )
104 + )
105 +"
106 +PDEPEND="X? ( >=x11-libs/libvdpau-0.3-r1 )"
107 +
108 +REQUIRED_USE="
109 + tools? ( X )
110 + static-libs? ( tools )
111 +"
112 +
113 +QA_PREBUILT="opt/* usr/lib*"
114 +
115 +S=${WORKDIR}/
116 +
117 +pkg_pretend() {
118 +
119 + if use amd64 && has_multilib_profile && \
120 + [ "${DEFAULT_ABI}" != "amd64" ]; then
121 + eerror "This ebuild doesn't currently support changing your default ABI"
122 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
123 + fi
124 +
125 + if use kernel_linux && kernel_is ge 4 4; then
126 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
127 + ewarn "which are limited to the following kernels:"
128 + ewarn "<sys-kernel/gentoo-sources-4.4"
129 + ewarn "<sys-kernel/vanilla-sources-4.4"
130 + ewarn ""
131 + ewarn "You are free to utilize epatch_user to provide whatever"
132 + ewarn "support you feel is appropriate, but will not receive"
133 + ewarn "support as a result of those changes."
134 + ewarn ""
135 + ewarn "Do not file a bug report about this."
136 + ewarn ""
137 + fi
138 +
139 + # Since Nvidia ships many different series of drivers, we need to give the user
140 + # some kind of guidance as to what version they should install. This tries
141 + # to point the user in the right direction but can't be perfect. check
142 + # nvidia-driver.eclass
143 + nvidia-driver-check-warning
144 +
145 + # Kernel features/options to check for
146 + CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
147 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
148 +
149 + # Now do the above checks
150 + use kernel_linux && check_extra_config
151 +}
152 +
153 +pkg_setup() {
154 + # try to turn off distcc and ccache for people that have a problem with it
155 + export DISTCC_DISABLE=1
156 + export CCACHE_DISABLE=1
157 +
158 + if use kernel_linux; then
159 + linux-mod_pkg_setup
160 + MODULE_NAMES="nvidia(video:${S}/kernel)"
161 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
162 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
163 + # linux-mod_src_compile calls set_arch_to_kernel, which
164 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
165 + # expects x86_64 or i386 and then converts it to x86
166 + # later on in the build process
167 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
168 + fi
169 +
170 + # set variables to where files are in the package structure
171 + if use kernel_FreeBSD; then
172 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
173 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
174 + NV_DOC="${S}/doc"
175 + NV_OBJ="${S}/obj"
176 + NV_SRC="${S}/src"
177 + NV_MAN="${S}/x11/man"
178 + NV_X11="${S}/obj"
179 + NV_SOVER=1
180 + elif use kernel_linux; then
181 + NV_DOC="${S}"
182 + NV_OBJ="${S}"
183 + NV_SRC="${S}/kernel"
184 + NV_MAN="${S}"
185 + NV_X11="${S}"
186 + NV_SOVER=${PV}
187 + else
188 + die "Could not determine proper NVIDIA package"
189 + fi
190 +}
191 +
192 +src_prepare() {
193 + # Please add a brief description for every added patch
194 +
195 + if use kernel_linux; then
196 + if kernel_is lt 2 6 9 ; then
197 + eerror "You must build this against 2.6.9 or higher kernels."
198 + fi
199 +
200 + # If greater than 2.6.5 use M= instead of SUBDIR=
201 + convert_to_m "${NV_SRC}"/Makefile.kbuild
202 + fi
203 +
204 + if use pax_kernel; then
205 + ewarn "Using PAX patches is not supported. You will be asked to"
206 + ewarn "use a standard kernel should you have issues. Should you"
207 + ewarn "need support with these patches, contact the PaX team."
208 + epatch "${FILESDIR}"/${PN}-pax-const.patch
209 + epatch "${FILESDIR}"/${PN}-pax-usercopy.patch
210 + fi
211 +
212 + cat <<- EOF > "${S}"/nvidia.icd
213 + /usr/$(get_libdir)/libnvidia-opencl.so
214 + EOF
215 +
216 + # Allow user patches so they can support RC kernels and whatever else
217 + epatch_user
218 +}
219 +
220 +src_compile() {
221 + # This is already the default on Linux, as there's no toplevel Makefile, but
222 + # on FreeBSD there's one and triggers the kernel module build, as we install
223 + # it by itself, pass this.
224 +
225 + cd "${NV_SRC}"
226 + if use kernel_FreeBSD; then
227 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
228 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
229 + elif use kernel_linux; then
230 + MAKEOPTS=-j1 linux-mod_src_compile
231 + fi
232 +
233 + if use tools; then
234 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl clean
235 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
236 + AR="$(tc-getAR)" \
237 + CC="$(tc-getCC)" \
238 + RANLIB="$(tc-getRANLIB)" \
239 + libXNVCtrl.a
240 + emake -C "${S}"/nvidia-settings-${PV}/src \
241 + AR="$(tc-getAR)" \
242 + CC="$(tc-getCC)" \
243 + LD="$(tc-getCC)" \
244 + LIBDIR="$(get_libdir)" \
245 + NVML_ENABLED=0 \
246 + NV_USE_BUNDLED_LIBJANSSON=0 \
247 + NV_VERBOSE=1 \
248 + RANLIB="$(tc-getRANLIB)" \
249 + STRIP_CMD=true
250 + fi
251 +}
252 +
253 +# Install nvidia library:
254 +# the first parameter is the library to install
255 +# the second parameter is the provided soversion
256 +# the third parameter is the target directory if its not /usr/lib
257 +donvidia() {
258 + # Full path to library minus SOVER
259 + MY_LIB="$1"
260 +
261 + # SOVER to use
262 + MY_SOVER="$2"
263 +
264 + # Where to install
265 + MY_DEST="$3"
266 +
267 + if [[ -z "${MY_DEST}" ]]; then
268 + MY_DEST="/usr/$(get_libdir)"
269 + action="dolib.so"
270 + else
271 + exeinto ${MY_DEST}
272 + action="doexe"
273 + fi
274 +
275 + # Get just the library name
276 + libname=$(basename $1)
277 +
278 + # Install the library with the correct SOVER
279 + ${action} ${MY_LIB}.${MY_SOVER} || \
280 + die "failed to install ${libname}"
281 +
282 + # If SOVER wasn't 1, then we need to create a .1 symlink
283 + if [[ "${MY_SOVER}" != "1" ]]; then
284 + dosym ${libname}.${MY_SOVER} \
285 + ${MY_DEST}/${libname}.1 || \
286 + die "failed to create ${libname} symlink"
287 + fi
288 +
289 + # Always create the symlink from the raw lib to the .1
290 + dosym ${libname}.1 \
291 + ${MY_DEST}/${libname} || \
292 + die "failed to create ${libname} symlink"
293 +}
294 +
295 +src_install() {
296 + if use kernel_linux; then
297 + linux-mod_src_install
298 +
299 + # Add the aliases
300 + # This file is tweaked with the appropriate video group in
301 + # pkg_preinst, see bug #491414
302 + insinto /etc/modprobe.d
303 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
304 +
305 + # Ensures that our device nodes are created when not using X
306 + exeinto "$(get_udevdir)"
307 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
308 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
309 + elif use kernel_FreeBSD; then
310 + if use x86-fbsd; then
311 + insinto /boot/modules
312 + doins "${S}/src/nvidia.kld"
313 + fi
314 +
315 + exeinto /boot/modules
316 + doexe "${S}/src/nvidia.ko"
317 + fi
318 +
319 + # NVIDIA kernel <-> userspace driver config lib
320 + donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
321 +
322 + if use kernel_linux; then
323 + # NVIDIA video decode <-> CUDA
324 + donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
325 + fi
326 +
327 + if use X; then
328 + # Xorg DDX driver
329 + insinto /usr/$(get_libdir)/xorg/modules/drivers
330 + doins ${NV_X11}/nvidia_drv.so
331 +
332 + # Xorg GLX driver
333 + donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
334 + /usr/$(get_libdir)/opengl/nvidia/extensions
335 +
336 + # XvMC driver
337 + dolib.a ${NV_X11}/libXvMCNVIDIA.a || \
338 + die "failed to install libXvMCNVIDIA.so"
339 + donvidia ${NV_X11}/libXvMCNVIDIA.so ${NV_SOVER}
340 + dosym libXvMCNVIDIA.so.${NV_SOVER} \
341 + /usr/$(get_libdir)/libXvMCNVIDIA_dynamic.so.1 || \
342 + die "failed to create libXvMCNVIDIA_dynamic.so symlink"
343 + fi
344 +
345 + # OpenCL ICD for NVIDIA
346 + if use kernel_linux; then
347 + insinto /etc/OpenCL/vendors
348 + doins nvidia.icd
349 + donvidia ${NV_OBJ}/libnvidia-opencl.so ${NV_SOVER}
350 + fi
351 +
352 + # Documentation
353 + dohtml ${NV_DOC}/html/*
354 + if use kernel_FreeBSD; then
355 + dodoc "${NV_DOC}/README"
356 + use X && doman "${NV_MAN}/nvidia-xconfig.1"
357 + use tools && doman "${NV_MAN}/nvidia-settings.1"
358 + else
359 + # Docs
360 + newdoc "${NV_DOC}/README.txt" README
361 + dodoc "${NV_DOC}/NVIDIA_Changelog"
362 + doman "${NV_MAN}/nvidia-smi.1.gz"
363 + use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
364 + use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
365 + doman "${NV_MAN}/nvidia-cuda-proxy-control.1.gz"
366 + fi
367 +
368 + # Helper Apps
369 + exeinto /opt/bin/
370 +
371 + if use X; then
372 + doexe ${NV_OBJ}/nvidia-xconfig
373 + fi
374 +
375 + if use kernel_linux ; then
376 + doexe ${NV_OBJ}/nvidia-debugdump
377 + doexe ${NV_OBJ}/nvidia-cuda-proxy-control
378 + doexe ${NV_OBJ}/nvidia-cuda-proxy-server
379 + doexe ${NV_OBJ}/nvidia-smi
380 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
381 + fi
382 +
383 + dobin ${NV_OBJ}/nvidia-bug-report.sh
384 +
385 + # Desktop entries for nvidia-settings
386 + if use tools ; then
387 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
388 + DESTDIR="${D}" \
389 + LIBDIR="${D}/usr/$(get_libdir)" \
390 + PREFIX=/usr \
391 + NV_USE_BUNDLED_LIBJANSSON=0 \
392 + install
393 +
394 + if use static-libs; then
395 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
396 +
397 + insinto /usr/include/NVCtrl
398 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
399 + fi
400 +
401 + # There is no icon in the FreeBSD tarball.
402 + use kernel_FreeBSD || \
403 + doicon ${NV_OBJ}/nvidia-settings.png
404 +
405 + domenu "${FILESDIR}"/nvidia-settings.desktop
406 +
407 + exeinto /etc/X11/xinit/xinitrc.d
408 + doexe "${FILESDIR}"/95-nvidia-settings
409 + fi
410 +
411 + #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
412 +
413 + if has_multilib_profile && use multilib ; then
414 + local OABI=${ABI}
415 + for ABI in $(get_install_abis) ; do
416 + src_install-libs
417 + done
418 + ABI=${OABI}
419 + unset OABI
420 + else
421 + src_install-libs
422 + fi
423 +
424 + is_final_abi || die "failed to iterate through all ABIs"
425 +
426 + readme.gentoo_create_doc
427 +}
428 +
429 +src_install-libs() {
430 + local inslibdir=$(get_libdir)
431 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
432 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
433 + local libdir=${NV_OBJ}
434 +
435 + if use kernel_linux && has_multilib_profile && \
436 + [[ ${ABI} == "x86" ]] ; then
437 + libdir=${NV_OBJ}/32
438 + fi
439 +
440 + if use X; then
441 + # The GLX libraries
442 + donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
443 + donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
444 + if use kernel_FreeBSD; then
445 + donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER} ${GL_ROOT}
446 + else
447 + donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER} ${GL_ROOT}
448 + fi
449 +
450 + # VDPAU
451 + donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
452 + fi
453 +
454 + # NVIDIA monitoring library
455 + if use kernel_linux ; then
456 + donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
457 + fi
458 +
459 + # CUDA & OpenCL
460 + if use kernel_linux; then
461 + donvidia ${libdir}/libcuda.so ${NV_SOVER}
462 + donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
463 + donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
464 + fi
465 +}
466 +
467 +pkg_preinst() {
468 + if use kernel_linux; then
469 + linux-mod_pkg_preinst
470 +
471 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
472 + if [ -z "${videogroup}" ]; then
473 + eerror "Failed to determine the video group gid"
474 + die "Failed to determine the video group gid"
475 + else
476 + sed -i \
477 + -e "s:PACKAGE:${PF}:g" \
478 + -e "s:VIDEOGID:${videogroup}:" \
479 + "${D}"/etc/modprobe.d/nvidia.conf || die
480 + fi
481 + fi
482 +
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/*
487 + fi
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
491 + fi
492 +}
493 +
494 +pkg_postinst() {
495 + use kernel_linux && linux-mod_pkg_postinst
496 +
497 + # Switch to the nvidia implementation
498 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
499 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
500 +
501 + readme.gentoo_print_elog
502 +
503 + if ! use X; then
504 + elog "You have elected to not install the X.org driver. Along with"
505 + elog "this the OpenGL libraries, XvMC, and VDPAU libraries were not"
506 + elog "installed. Additionally, once the driver is loaded your card"
507 + elog "and fan will run at max speed which may not be desirable."
508 + elog "Use the 'nvidia-smi' init script to have your card and fan"
509 + elog "speed scale appropriately."
510 + elog
511 + fi
512 + if ! use tools; then
513 + elog "USE=tools controls whether the nvidia-settings application"
514 + elog "is installed. If you would like to use it, enable that"
515 + elog "flag and re-emerge this ebuild. Optionally you can install"
516 + elog "media-video/nvidia-settings"
517 + elog
518 + fi
519 +}
520 +
521 +pkg_prerm() {
522 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
523 +}
524 +
525 +pkg_postrm() {
526 + use kernel_linux && linux-mod_pkg_postrm
527 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
528 +}
529
530 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-340.96-r3.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-340.96-r3.ebuild
531 new file mode 100644
532 index 0000000..27e2ed8
533 --- /dev/null
534 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-340.96-r3.ebuild
535 @@ -0,0 +1,517 @@
536 +# Copyright 1999-2015 Gentoo Foundation
537 +# Distributed under the terms of the GNU General Public License v2
538 +# $Id$
539 +
540 +EAPI=5
541 +
542 +inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
543 + portability toolchain-funcs unpacker user udev
544 +
545 +NV_URI="http://us.download.nvidia.com/XFree86/"
546 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
547 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
548 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
549 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
550 +
551 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
552 +HOMEPAGE="http://www.nvidia.com/"
553 +SRC_URI="
554 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
555 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
556 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
557 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
558 + tools? ( ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2 )
559 +"
560 +
561 +LICENSE="GPL-2 NVIDIA-r2"
562 +SLOT="0/${PV%.*}"
563 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
564 +IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel static-libs +tools +X uvm"
565 +RESTRICT="bindist mirror strip"
566 +EMULTILIB_PKG="true"
567 +
568 +COMMON="
569 + app-eselect/eselect-opencl
570 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
571 + tools? (
572 + dev-libs/atk
573 + dev-libs/glib:2
574 + dev-libs/jansson
575 + x11-libs/gdk-pixbuf
576 + >=x11-libs/gtk+-2.4:2
577 + x11-libs/libX11
578 + x11-libs/libXext
579 + x11-libs/pango[X]
580 + )
581 + X? (
582 + >=app-eselect/eselect-opengl-1.0.9
583 + )
584 +"
585 +DEPEND="
586 + ${COMMON}
587 + app-arch/xz-utils
588 + kernel_linux? ( virtual/linux-sources )
589 +"
590 +RDEPEND="
591 + ${COMMON}
592 + acpi? ( sys-power/acpid )
593 + tools? ( !media-video/nvidia-settings )
594 + X? (
595 + <x11-base/xorg-server-1.18.99:=
596 + >=x11-libs/libvdpau-0.3-r1
597 + multilib? (
598 + >=x11-libs/libX11-1.6.2[abi_x86_32]
599 + >=x11-libs/libXext-1.3.2[abi_x86_32]
600 + )
601 + )
602 +"
603 +
604 +REQUIRED_USE="tools? ( X )"
605 +
606 +QA_PREBUILT="opt/* usr/lib*"
607 +
608 +S=${WORKDIR}/
609 +
610 +pkg_pretend() {
611 + if use amd64 && has_multilib_profile && \
612 + [ "${DEFAULT_ABI}" != "amd64" ]; then
613 + eerror "This ebuild doesn't currently support changing your default ABI"
614 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
615 + fi
616 +
617 + if use kernel_linux && kernel_is ge 4 4; then
618 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
619 + ewarn "which are limited to the following kernels:"
620 + ewarn "<sys-kernel/gentoo-sources-4.4"
621 + ewarn "<sys-kernel/vanilla-sources-4.4"
622 + ewarn ""
623 + ewarn "You are free to utilize epatch_user to provide whatever"
624 + ewarn "support you feel is appropriate, but will not receive"
625 + ewarn "support as a result of those changes."
626 + ewarn ""
627 + ewarn "Do not file a bug report about this."
628 + ewarn ""
629 + fi
630 +
631 + # Since Nvidia ships many different series of drivers, we need to give the user
632 + # some kind of guidance as to what version they should install. This tries
633 + # to point the user in the right direction but can't be perfect. check
634 + # nvidia-driver.eclass
635 + nvidia-driver-check-warning
636 +
637 + # Kernel features/options to check for
638 + CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
639 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
640 +
641 + # Now do the above checks
642 + use kernel_linux && check_extra_config
643 +}
644 +
645 +pkg_setup() {
646 + # try to turn off distcc and ccache for people that have a problem with it
647 + export DISTCC_DISABLE=1
648 + export CCACHE_DISABLE=1
649 +
650 + if use kernel_linux; then
651 + MODULE_NAMES="nvidia(video:${S}/kernel)"
652 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel/uvm)"
653 +
654 + # This needs to run after MODULE_NAMES (so that the eclass checks
655 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
656 + # is set (so that KV_DIR is populated).
657 + linux-mod_pkg_setup
658 +
659 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
660 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
661 +
662 + # linux-mod_src_compile calls set_arch_to_kernel, which
663 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
664 + # expects x86_64 or i386 and then converts it to x86
665 + # later on in the build process
666 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
667 + fi
668 +
669 + # set variables to where files are in the package structure
670 + if use kernel_FreeBSD; then
671 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
672 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
673 + NV_DOC="${S}/doc"
674 + NV_OBJ="${S}/obj"
675 + NV_SRC="${S}/src"
676 + NV_MAN="${S}/x11/man"
677 + NV_X11="${S}/obj"
678 + NV_SOVER=1
679 + elif use kernel_linux; then
680 + NV_DOC="${S}"
681 + NV_OBJ="${S}"
682 + NV_SRC="${S}/kernel"
683 + NV_MAN="${S}"
684 + NV_X11="${S}"
685 + NV_SOVER=${PV}
686 + else
687 + die "Could not determine proper NVIDIA package"
688 + fi
689 +}
690 +
691 +src_prepare() {
692 + # Please add a brief description for every added patch
693 +
694 + if use kernel_linux; then
695 + if kernel_is lt 2 6 9 ; then
696 + eerror "You must build this against 2.6.9 or higher kernels."
697 + fi
698 +
699 + # If greater than 2.6.5 use M= instead of SUBDIR=
700 +# convert_to_m "${NV_SRC}"/Makefile.kbuild
701 + fi
702 +
703 + if use pax_kernel; then
704 + ewarn "Using PAX patches is not supported. You will be asked to"
705 + ewarn "use a standard kernel should you have issues. Should you"
706 + ewarn "need support with these patches, contact the PaX team."
707 + epatch "${FILESDIR}"/${PN}-331.13-pax-usercopy.patch
708 + epatch "${FILESDIR}"/${PN}-337.12-pax-constify.patch
709 + fi
710 +
711 + # Allow user patches so they can support RC kernels and whatever else
712 + epatch_user
713 +}
714 +
715 +src_compile() {
716 + # This is already the default on Linux, as there's no toplevel Makefile, but
717 + # on FreeBSD there's one and triggers the kernel module build, as we install
718 + # it by itself, pass this.
719 +
720 + cd "${NV_SRC}"
721 + if use kernel_FreeBSD; then
722 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
723 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
724 + elif use kernel_linux; then
725 + use uvm && MAKEOPTS=-j1
726 + linux-mod_src_compile
727 + fi
728 +
729 + if use tools; then
730 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl clean
731 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
732 + AR="$(tc-getAR)" \
733 + CC="$(tc-getCC)" \
734 + RANLIB="$(tc-getRANLIB)" \
735 + libXNVCtrl.a
736 + emake -C "${S}"/nvidia-settings-${PV}/src \
737 + AR="$(tc-getAR)" \
738 + CC="$(tc-getCC)" \
739 + LD="$(tc-getCC)" \
740 + LIBDIR="$(get_libdir)" \
741 + NVML_ENABLED=0 \
742 + NV_USE_BUNDLED_LIBJANSSON=0 \
743 + NV_VERBOSE=1 \
744 + RANLIB="$(tc-getRANLIB)" \
745 + STRIP_CMD=true
746 + fi
747 +}
748 +
749 +# Install nvidia library:
750 +# the first parameter is the library to install
751 +# the second parameter is the provided soversion
752 +# the third parameter is the target directory if its not /usr/lib
753 +donvidia() {
754 + # Full path to library minus SOVER
755 + MY_LIB="$1"
756 +
757 + # SOVER to use
758 + MY_SOVER="$2"
759 +
760 + # Where to install
761 + MY_DEST="$3"
762 +
763 + if [[ -z "${MY_DEST}" ]]; then
764 + MY_DEST="/usr/$(get_libdir)"
765 + action="dolib.so"
766 + else
767 + exeinto ${MY_DEST}
768 + action="doexe"
769 + fi
770 +
771 + # Get just the library name
772 + libname=$(basename $1)
773 +
774 + # Install the library with the correct SOVER
775 + ${action} ${MY_LIB}.${MY_SOVER} || \
776 + die "failed to install ${libname}"
777 +
778 + # If SOVER wasn't 1, then we need to create a .1 symlink
779 + if [[ "${MY_SOVER}" != "1" ]]; then
780 + dosym ${libname}.${MY_SOVER} \
781 + ${MY_DEST}/${libname}.1 || \
782 + die "failed to create ${libname} symlink"
783 + fi
784 +
785 + # Always create the symlink from the raw lib to the .1
786 + dosym ${libname}.1 \
787 + ${MY_DEST}/${libname} || \
788 + die "failed to create ${libname} symlink"
789 +}
790 +
791 +src_install() {
792 + if use kernel_linux; then
793 + linux-mod_src_install
794 +
795 + # Add the aliases
796 + # This file is tweaked with the appropriate video group in
797 + # pkg_preinst, see bug #491414
798 + insinto /etc/modprobe.d
799 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
800 + use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
801 +
802 + # Ensures that our device nodes are created when not using X
803 + exeinto "$(get_udevdir)"
804 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
805 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
806 + elif use kernel_FreeBSD; then
807 + if use x86-fbsd; then
808 + insinto /boot/modules
809 + doins "${S}/src/nvidia.kld"
810 + fi
811 +
812 + exeinto /boot/modules
813 + doexe "${S}/src/nvidia.ko"
814 + fi
815 +
816 + # NVIDIA kernel <-> userspace driver config lib
817 + donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
818 +
819 + # NVIDIA framebuffer capture library
820 + donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
821 +
822 + # NVIDIA video encode/decode <-> CUDA
823 + if use kernel_linux; then
824 + donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
825 + donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
826 + fi
827 +
828 + if use X; then
829 + # Xorg DDX driver
830 + insinto /usr/$(get_libdir)/xorg/modules/drivers
831 + doins ${NV_X11}/nvidia_drv.so
832 +
833 + # Xorg GLX driver
834 + donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
835 + /usr/$(get_libdir)/opengl/nvidia/extensions
836 + fi
837 +
838 + # OpenCL ICD for NVIDIA
839 + if use kernel_linux; then
840 + insinto /etc/OpenCL/vendors
841 + doins ${NV_OBJ}/nvidia.icd
842 + fi
843 +
844 + # Documentation
845 + dohtml ${NV_DOC}/html/*
846 + if use kernel_FreeBSD; then
847 + dodoc "${NV_DOC}/README"
848 + use X && doman "${NV_MAN}/nvidia-xconfig.1"
849 + use tools && doman "${NV_MAN}/nvidia-settings.1"
850 + else
851 + # Docs
852 + newdoc "${NV_DOC}/README.txt" README
853 + dodoc "${NV_DOC}/NVIDIA_Changelog"
854 + doman "${NV_MAN}/nvidia-smi.1.gz"
855 + use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
856 + use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
857 + doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
858 + fi
859 +
860 + # Helper Apps
861 + exeinto /opt/bin/
862 +
863 + if use X; then
864 + doexe ${NV_OBJ}/nvidia-xconfig
865 + fi
866 +
867 + if use kernel_linux ; then
868 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
869 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
870 + doexe ${NV_OBJ}/nvidia-debugdump
871 + doexe ${NV_OBJ}/nvidia-persistenced
872 + doexe ${NV_OBJ}/nvidia-smi
873 +
874 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
875 + doexe ${NV_OBJ}/nvidia-modprobe
876 + fowners root:video /opt/bin/nvidia-modprobe
877 + fperms 4710 /opt/bin/nvidia-modprobe
878 + dosym /{opt,usr}/bin/nvidia-modprobe
879 +
880 + doman nvidia-cuda-mps-control.1.gz
881 + doman nvidia-modprobe.1.gz
882 + doman nvidia-persistenced.1.gz
883 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
884 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
885 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
886 + fi
887 +
888 + if use tools; then
889 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
890 + DESTDIR="${D}" \
891 + LIBDIR="${D}/usr/$(get_libdir)" \
892 + PREFIX=/usr \
893 + NV_USE_BUNDLED_LIBJANSSON=0 \
894 + install
895 +
896 + if use static-libs; then
897 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
898 +
899 + insinto /usr/include/NVCtrl
900 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
901 + fi
902 +
903 + insinto /usr/share/nvidia/
904 + doins nvidia-application-profiles-${PV}-key-documentation
905 +
906 + insinto /etc/nvidia
907 + newins \
908 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
909 +
910 + # There is no icon in the FreeBSD tarball.
911 + use kernel_FreeBSD || \
912 + doicon ${NV_OBJ}/nvidia-settings.png
913 +
914 + domenu "${FILESDIR}"/nvidia-settings.desktop
915 +
916 + exeinto /etc/X11/xinit/xinitrc.d
917 + doexe "${FILESDIR}"/95-nvidia-settings
918 +
919 + fi
920 +
921 + dobin ${NV_OBJ}/nvidia-bug-report.sh
922 +
923 + #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
924 +
925 + if has_multilib_profile && use multilib ; then
926 + local OABI=${ABI}
927 + for ABI in $(get_install_abis) ; do
928 + src_install-libs
929 + done
930 + ABI=${OABI}
931 + unset OABI
932 + else
933 + src_install-libs
934 + fi
935 +
936 + is_final_abi || die "failed to iterate through all ABIs"
937 +
938 + readme.gentoo_create_doc
939 +}
940 +
941 +src_install-libs() {
942 + local inslibdir=$(get_libdir)
943 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
944 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
945 + local libdir=${NV_OBJ}
946 +
947 + if use kernel_linux && has_multilib_profile && \
948 + [[ ${ABI} == "x86" ]] ; then
949 + libdir=${NV_OBJ}/32
950 + fi
951 +
952 + if use X; then
953 + # The GLX libraries
954 + donvidia ${libdir}/libEGL.so ${NV_SOVER} ${GL_ROOT}
955 + donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
956 + donvidia ${libdir}/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
957 + donvidia ${libdir}/libnvidia-eglcore.so ${NV_SOVER}
958 + donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
959 + donvidia ${libdir}/libnvidia-glsi.so ${NV_SOVER}
960 + donvidia ${libdir}/libnvidia-ifr.so ${NV_SOVER}
961 + if use kernel_FreeBSD; then
962 + donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER}
963 + else
964 + donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}
965 + fi
966 +
967 + # VDPAU
968 + donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
969 +
970 + # GLES v2 libraries
971 + insinto ${GL_ROOT}
972 + doexe ${libdir}/libGLESv2.so.${PV}
973 + dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
974 + dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
975 + fi
976 +
977 + # NVIDIA monitoring library
978 + if use kernel_linux ; then
979 + donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
980 + fi
981 +
982 + # CUDA & OpenCL
983 + if use kernel_linux; then
984 + donvidia ${libdir}/libcuda.so ${NV_SOVER}
985 + donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
986 + donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
987 + donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}
988 + fi
989 +}
990 +
991 +pkg_preinst() {
992 + if use kernel_linux; then
993 + linux-mod_pkg_preinst
994 +
995 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
996 + if [ -z "${videogroup}" ]; then
997 + eerror "Failed to determine the video group gid"
998 + die "Failed to determine the video group gid"
999 + else
1000 + sed -i \
1001 + -e "s:PACKAGE:${PF}:g" \
1002 + -e "s:VIDEOGID:${videogroup}:" \
1003 + "${D}"/etc/modprobe.d/nvidia.conf || die
1004 + fi
1005 + fi
1006 +
1007 + # Clean the dynamic libGL stuff's home to ensure
1008 + # we dont have stale libs floating around
1009 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
1010 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1011 + fi
1012 + # Make sure we nuke the old nvidia-glx's env.d file
1013 + if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
1014 + rm -f "${ROOT}"/etc/env.d/09nvidia
1015 + fi
1016 +}
1017 +
1018 +pkg_postinst() {
1019 + use kernel_linux && linux-mod_pkg_postinst
1020 +
1021 + # Switch to the nvidia implementation
1022 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1023 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
1024 +
1025 + readme.gentoo_print_elog
1026 +
1027 + if ! use X; then
1028 + elog "You have elected to not install the X.org driver. Along with"
1029 + elog "this the OpenGL libraries and VDPAU libraries were not"
1030 + elog "installed. Additionally, once the driver is loaded your card"
1031 + elog "and fan will run at max speed which may not be desirable."
1032 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1033 + elog "speed scale appropriately."
1034 + elog
1035 + fi
1036 + if ! use tools; then
1037 + elog "USE=tools controls whether the nvidia-settings application"
1038 + elog "is installed. If you would like to use it, enable that"
1039 + elog "flag and re-emerge this ebuild. Optionally you can install"
1040 + elog "media-video/nvidia-settings"
1041 + elog
1042 + fi
1043 +}
1044 +
1045 +pkg_prerm() {
1046 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1047 +}
1048 +
1049 +pkg_postrm() {
1050 + use kernel_linux && linux-mod_pkg_postrm
1051 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1052 +}
1053
1054 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-346.96-r4.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-346.96-r4.ebuild
1055 new file mode 100644
1056 index 0000000..9254313
1057 --- /dev/null
1058 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-346.96-r4.ebuild
1059 @@ -0,0 +1,528 @@
1060 +# Copyright 1999-2015 Gentoo Foundation
1061 +# Distributed under the terms of the GNU General Public License v2
1062 +# $Id$
1063 +
1064 +EAPI=5
1065 +
1066 +inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
1067 + portability toolchain-funcs unpacker user udev
1068 +
1069 +NV_URI="http://us.download.nvidia.com/XFree86/"
1070 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
1071 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1072 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
1073 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1074 +
1075 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1076 +HOMEPAGE="http://www.nvidia.com/"
1077 +SRC_URI="
1078 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1079 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1080 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
1081 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
1082 + tools? ( ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2 )
1083 +"
1084 +
1085 +LICENSE="GPL-2 NVIDIA-r2"
1086 +SLOT="0/${PV%.*}"
1087 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
1088 +RESTRICT="bindist mirror strip"
1089 +EMULTILIB_PKG="true"
1090 +
1091 +IUSE="acpi gtk3 kernel_FreeBSD kernel_linux multilib pax_kernel static-libs +tools uvm +X"
1092 +REQUIRED_USE="
1093 + tools? ( X )
1094 + static-libs? ( tools )
1095 +"
1096 +
1097 +COMMON="
1098 + app-eselect/eselect-opencl
1099 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1100 + tools? (
1101 + dev-libs/atk
1102 + dev-libs/glib:2
1103 + dev-libs/jansson
1104 + gtk3? ( x11-libs/gtk+:3 )
1105 + x11-libs/cairo
1106 + x11-libs/gdk-pixbuf[X]
1107 + x11-libs/gtk+:2
1108 + x11-libs/libX11
1109 + x11-libs/libXext
1110 + x11-libs/libXrandr
1111 + x11-libs/libXv
1112 + x11-libs/libXxf86vm
1113 + x11-libs/pango[X]
1114 + )
1115 + X? (
1116 + >=app-eselect/eselect-opengl-1.0.9
1117 + )
1118 +"
1119 +DEPEND="
1120 + ${COMMON}
1121 + app-arch/xz-utils
1122 + kernel_linux? ( virtual/linux-sources )
1123 +"
1124 +RDEPEND="
1125 + ${COMMON}
1126 + acpi? ( sys-power/acpid )
1127 + tools? ( !media-video/nvidia-settings )
1128 + X? (
1129 + <x11-base/xorg-server-1.18.99:=
1130 + >=x11-libs/libvdpau-0.3-r1
1131 + multilib? (
1132 + >=x11-libs/libX11-1.6.2[abi_x86_32]
1133 + >=x11-libs/libXext-1.3.2[abi_x86_32]
1134 + )
1135 + )
1136 +"
1137 +
1138 +QA_PREBUILT="opt/* usr/lib*"
1139 +
1140 +S=${WORKDIR}/
1141 +
1142 +pkg_pretend() {
1143 + if use amd64 && has_multilib_profile && \
1144 + [ "${DEFAULT_ABI}" != "amd64" ]; then
1145 + eerror "This ebuild doesn't currently support changing your default ABI"
1146 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
1147 + fi
1148 +
1149 + if use kernel_linux && kernel_is ge 4 3; then
1150 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
1151 + ewarn "which are limited to the following kernels:"
1152 + ewarn "<sys-kernel/gentoo-sources-4.3"
1153 + ewarn "<sys-kernel/vanilla-sources-4.3"
1154 + ewarn ""
1155 + ewarn "You are free to utilize epatch_user to provide whatever"
1156 + ewarn "support you feel is appropriate, but will not receive"
1157 + ewarn "support as a result of those changes."
1158 + ewarn ""
1159 + ewarn "Do not file a bug report about this."
1160 + fi
1161 +
1162 + # Since Nvidia ships many different series of drivers, we need to give the user
1163 + # some kind of guidance as to what version they should install. This tries
1164 + # to point the user in the right direction but can't be perfect. check
1165 + # nvidia-driver.eclass
1166 + nvidia-driver-check-warning
1167 +
1168 + # Kernel features/options to check for
1169 + CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
1170 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
1171 +
1172 + # Now do the above checks
1173 + use kernel_linux && check_extra_config
1174 +}
1175 +
1176 +pkg_setup() {
1177 + # try to turn off distcc and ccache for people that have a problem with it
1178 + export DISTCC_DISABLE=1
1179 + export CCACHE_DISABLE=1
1180 +
1181 + if use kernel_linux; then
1182 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1183 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel/uvm)"
1184 +
1185 + # This needs to run after MODULE_NAMES (so that the eclass checks
1186 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1187 + # is set (so that KV_DIR is populated).
1188 + linux-mod_pkg_setup
1189 +
1190 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1191 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
1192 +
1193 + # linux-mod_src_compile calls set_arch_to_kernel, which
1194 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1195 + # expects x86_64 or i386 and then converts it to x86
1196 + # later on in the build process
1197 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1198 + fi
1199 +
1200 + # set variables to where files are in the package structure
1201 + if use kernel_FreeBSD; then
1202 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
1203 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1204 + NV_DOC="${S}/doc"
1205 + NV_OBJ="${S}/obj"
1206 + NV_SRC="${S}/src"
1207 + NV_MAN="${S}/x11/man"
1208 + NV_X11="${S}/obj"
1209 + NV_SOVER=1
1210 + elif use kernel_linux; then
1211 + NV_DOC="${S}"
1212 + NV_OBJ="${S}"
1213 + NV_SRC="${S}/kernel"
1214 + NV_MAN="${S}"
1215 + NV_X11="${S}"
1216 + NV_SOVER=${PV}
1217 + else
1218 + die "Could not determine proper NVIDIA package"
1219 + fi
1220 +}
1221 +
1222 +src_prepare() {
1223 + # Please add a brief description for every added patch
1224 +
1225 + if use kernel_linux; then
1226 + if kernel_is lt 2 6 9 ; then
1227 + eerror "You must build this against 2.6.9 or higher kernels."
1228 + fi
1229 +
1230 + # If greater than 2.6.5 use M= instead of SUBDIR=
1231 +# convert_to_m "${NV_SRC}"/Makefile.kbuild
1232 + fi
1233 +
1234 + if use pax_kernel; then
1235 + ewarn "Using PAX patches is not supported. You will be asked to"
1236 + ewarn "use a standard kernel should you have issues. Should you"
1237 + ewarn "need support with these patches, contact the PaX team."
1238 + epatch "${FILESDIR}"/${PN}-346.16-pax-usercopy.patch
1239 + epatch "${FILESDIR}"/${PN}-346.16-pax-constify.patch
1240 + fi
1241 +
1242 + # Allow user patches so they can support RC kernels and whatever else
1243 + epatch_user
1244 +}
1245 +
1246 +src_compile() {
1247 + # This is already the default on Linux, as there's no toplevel Makefile, but
1248 + # on FreeBSD there's one and triggers the kernel module build, as we install
1249 + # it by itself, pass this.
1250 +
1251 + cd "${NV_SRC}"
1252 + if use kernel_FreeBSD; then
1253 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
1254 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
1255 + elif use kernel_linux; then
1256 + MAKEOPTS=-j1
1257 + linux-mod_src_compile
1258 + fi
1259 +
1260 + if use tools; then
1261 + emake -C "${S}"/nvidia-settings-${PV}/src \
1262 + AR="$(tc-getAR)" \
1263 + CC="$(tc-getCC)" \
1264 + LIBDIR="$(get_libdir)" \
1265 + RANLIB="$(tc-getRANLIB)" \
1266 + build-xnvctrl
1267 +
1268 + emake -C "${S}"/nvidia-settings-${PV}/src \
1269 + CC="$(tc-getCC)" \
1270 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1271 + LD="$(tc-getCC)" \
1272 + LIBDIR="$(get_libdir)" \
1273 + NVML_ENABLED=0 \
1274 + NV_USE_BUNDLED_LIBJANSSON=0 \
1275 + NV_VERBOSE=1 \
1276 + STRIP_CMD=true
1277 + fi
1278 +}
1279 +
1280 +# Install nvidia library:
1281 +# the first parameter is the library to install
1282 +# the second parameter is the provided soversion
1283 +# the third parameter is the target directory if its not /usr/lib
1284 +donvidia() {
1285 + # Full path to library minus SOVER
1286 + MY_LIB="$1"
1287 +
1288 + # SOVER to use
1289 + MY_SOVER="$2"
1290 +
1291 + # Where to install
1292 + MY_DEST="$3"
1293 +
1294 + if [[ -z "${MY_DEST}" ]]; then
1295 + MY_DEST="/usr/$(get_libdir)"
1296 + action="dolib.so"
1297 + else
1298 + exeinto ${MY_DEST}
1299 + action="doexe"
1300 + fi
1301 +
1302 + # Get just the library name
1303 + libname=$(basename $1)
1304 +
1305 + # Install the library with the correct SOVER
1306 + ${action} ${MY_LIB}.${MY_SOVER} || \
1307 + die "failed to install ${libname}"
1308 +
1309 + # If SOVER wasn't 1, then we need to create a .1 symlink
1310 + if [[ "${MY_SOVER}" != "1" ]]; then
1311 + dosym ${libname}.${MY_SOVER} \
1312 + ${MY_DEST}/${libname}.1 || \
1313 + die "failed to create ${libname} symlink"
1314 + fi
1315 +
1316 + # Always create the symlink from the raw lib to the .1
1317 + dosym ${libname}.1 \
1318 + ${MY_DEST}/${libname} || \
1319 + die "failed to create ${libname} symlink"
1320 +}
1321 +
1322 +src_install() {
1323 + if use kernel_linux; then
1324 + linux-mod_src_install
1325 +
1326 + # Add the aliases
1327 + # This file is tweaked with the appropriate video group in
1328 + # pkg_preinst, see bug #491414
1329 + insinto /etc/modprobe.d
1330 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
1331 + use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
1332 +
1333 + # Ensures that our device nodes are created when not using X
1334 + exeinto "$(get_udevdir)"
1335 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
1336 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
1337 + elif use kernel_FreeBSD; then
1338 + if use x86-fbsd; then
1339 + insinto /boot/modules
1340 + doins "${S}/src/nvidia.kld"
1341 + fi
1342 +
1343 + exeinto /boot/modules
1344 + doexe "${S}/src/nvidia.ko"
1345 + fi
1346 +
1347 + # NVIDIA kernel <-> userspace driver config lib
1348 + donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
1349 +
1350 + # NVIDIA framebuffer capture library
1351 + donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
1352 +
1353 + # NVIDIA video encode/decode <-> CUDA
1354 + if use kernel_linux; then
1355 + donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
1356 + donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
1357 + fi
1358 +
1359 + if use X; then
1360 + # Xorg DDX driver
1361 + insinto /usr/$(get_libdir)/xorg/modules/drivers
1362 + doins ${NV_X11}/nvidia_drv.so
1363 +
1364 + # Xorg GLX driver
1365 + donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
1366 + /usr/$(get_libdir)/opengl/nvidia/extensions
1367 +
1368 + # Xorg nvidia.conf
1369 + if has_version '>=x11-base/xorg-server-1.16'; then
1370 + insinto /usr/share/X11/xorg.conf.d
1371 + newins {,50-}nvidia-drm-outputclass.conf
1372 + fi
1373 + fi
1374 +
1375 + # OpenCL ICD for NVIDIA
1376 + if use kernel_linux; then
1377 + insinto /etc/OpenCL/vendors
1378 + doins ${NV_OBJ}/nvidia.icd
1379 + fi
1380 +
1381 + # Documentation
1382 + dohtml ${NV_DOC}/html/*
1383 + if use kernel_FreeBSD; then
1384 + dodoc "${NV_DOC}/README"
1385 + use X && doman "${NV_MAN}/nvidia-xconfig.1"
1386 + use tools && doman "${NV_MAN}/nvidia-settings.1"
1387 + else
1388 + # Docs
1389 + newdoc "${NV_DOC}/README.txt" README
1390 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1391 + doman "${NV_MAN}/nvidia-smi.1.gz"
1392 + use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
1393 + use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
1394 + doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
1395 + fi
1396 +
1397 + # Helper Apps
1398 + exeinto /opt/bin/
1399 +
1400 + if use X; then
1401 + doexe ${NV_OBJ}/nvidia-xconfig
1402 + fi
1403 +
1404 + if use kernel_linux ; then
1405 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
1406 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
1407 + doexe ${NV_OBJ}/nvidia-debugdump
1408 + doexe ${NV_OBJ}/nvidia-persistenced
1409 + doexe ${NV_OBJ}/nvidia-smi
1410 +
1411 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
1412 + doexe ${NV_OBJ}/nvidia-modprobe
1413 + fowners root:video /opt/bin/nvidia-modprobe
1414 + fperms 4710 /opt/bin/nvidia-modprobe
1415 + dosym /{opt,usr}/bin/nvidia-modprobe
1416 +
1417 + doman nvidia-cuda-mps-control.1.gz
1418 + doman nvidia-modprobe.1.gz
1419 + doman nvidia-persistenced.1.gz
1420 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1421 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1422 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1423 + fi
1424 +
1425 + if use tools; then
1426 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1427 + DESTDIR="${D}" \
1428 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1429 + LIBDIR="${D}/usr/$(get_libdir)" \
1430 + PREFIX=/usr \
1431 + NV_USE_BUNDLED_LIBJANSSON=0 \
1432 + install
1433 +
1434 + if use static-libs; then
1435 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1436 +
1437 + insinto /usr/include/NVCtrl
1438 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
1439 + fi
1440 +
1441 + insinto /usr/share/nvidia/
1442 + doins nvidia-application-profiles-${PV}-key-documentation
1443 +
1444 + insinto /etc/nvidia
1445 + newins \
1446 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1447 +
1448 + # There is no icon in the FreeBSD tarball.
1449 + use kernel_FreeBSD || \
1450 + doicon ${NV_OBJ}/nvidia-settings.png
1451 +
1452 + domenu "${FILESDIR}"/nvidia-settings.desktop
1453 +
1454 + exeinto /etc/X11/xinit/xinitrc.d
1455 + doexe "${FILESDIR}"/95-nvidia-settings
1456 + fi
1457 +
1458 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1459 +
1460 + if has_multilib_profile && use multilib ; then
1461 + local OABI=${ABI}
1462 + for ABI in $(get_install_abis) ; do
1463 + src_install-libs
1464 + done
1465 + ABI=${OABI}
1466 + unset OABI
1467 + else
1468 + src_install-libs
1469 + fi
1470 +
1471 + is_final_abi || die "failed to iterate through all ABIs"
1472 +
1473 + readme.gentoo_create_doc
1474 +}
1475 +
1476 +src_install-libs() {
1477 + local inslibdir=$(get_libdir)
1478 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1479 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1480 + local libdir=${NV_OBJ}
1481 +
1482 + if use kernel_linux && has_multilib_profile && \
1483 + [[ ${ABI} == "x86" ]] ; then
1484 + libdir=${NV_OBJ}/32
1485 + fi
1486 +
1487 + if use X; then
1488 + # The GLX libraries
1489 + donvidia ${libdir}/libEGL.so ${NV_SOVER} ${GL_ROOT}
1490 + donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
1491 + donvidia ${libdir}/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
1492 + donvidia ${libdir}/libnvidia-eglcore.so ${NV_SOVER}
1493 + donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
1494 + donvidia ${libdir}/libnvidia-glsi.so ${NV_SOVER}
1495 + donvidia ${libdir}/libnvidia-ifr.so ${NV_SOVER}
1496 + if use kernel_FreeBSD; then
1497 + donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER}
1498 + else
1499 + donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}
1500 + fi
1501 +
1502 + # VDPAU
1503 + donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
1504 +
1505 + # GLES v2 libraries
1506 + insinto ${GL_ROOT}
1507 + doexe ${libdir}/libGLESv2.so.${PV}
1508 + dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
1509 + dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
1510 + fi
1511 +
1512 + # NVIDIA monitoring library
1513 + if use kernel_linux ; then
1514 + donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
1515 + fi
1516 +
1517 + # CUDA & OpenCL
1518 + if use kernel_linux; then
1519 + donvidia ${libdir}/libcuda.so ${NV_SOVER}
1520 + donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
1521 + donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
1522 + donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}
1523 + fi
1524 +}
1525 +
1526 +pkg_preinst() {
1527 + if use kernel_linux; then
1528 + linux-mod_pkg_preinst
1529 +
1530 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
1531 + if [ -z "${videogroup}" ]; then
1532 + eerror "Failed to determine the video group gid"
1533 + die "Failed to determine the video group gid"
1534 + else
1535 + sed -i \
1536 + -e "s:PACKAGE:${PF}:g" \
1537 + -e "s:VIDEOGID:${videogroup}:" \
1538 + "${D}"/etc/modprobe.d/nvidia.conf || die
1539 + fi
1540 + fi
1541 +
1542 + # Clean the dynamic libGL stuff's home to ensure
1543 + # we dont have stale libs floating around
1544 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
1545 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1546 + fi
1547 + # Make sure we nuke the old nvidia-glx's env.d file
1548 + if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
1549 + rm -f "${ROOT}"/etc/env.d/09nvidia
1550 + fi
1551 +}
1552 +
1553 +pkg_postinst() {
1554 + use kernel_linux && linux-mod_pkg_postinst
1555 +
1556 + # Switch to the nvidia implementation
1557 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1558 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
1559 +
1560 + readme.gentoo_print_elog
1561 +
1562 + if ! use X; then
1563 + elog "You have elected to not install the X.org driver. Along with"
1564 + elog "this the OpenGL libraries and VDPAU libraries were not"
1565 + elog "installed. Additionally, once the driver is loaded your card"
1566 + elog "and fan will run at max speed which may not be desirable."
1567 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1568 + elog "speed scale appropriately."
1569 + elog
1570 + fi
1571 + if ! use tools; then
1572 + elog "USE=tools controls whether the nvidia-settings application"
1573 + elog "is installed. If you would like to use it, enable that"
1574 + elog "flag and re-emerge this ebuild. Optionally you can install"
1575 + elog "media-video/nvidia-settings"
1576 + elog
1577 + fi
1578 +}
1579 +
1580 +pkg_prerm() {
1581 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1582 +}
1583 +
1584 +pkg_postrm() {
1585 + use kernel_linux && linux-mod_pkg_postrm
1586 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1587 +}
1588
1589 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-352.79-r2.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-352.79-r2.ebuild
1590 new file mode 100644
1591 index 0000000..d329052
1592 --- /dev/null
1593 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-352.79-r2.ebuild
1594 @@ -0,0 +1,527 @@
1595 +# Copyright 1999-2015 Gentoo Foundation
1596 +# Distributed under the terms of the GNU General Public License v2
1597 +# $Id$
1598 +
1599 +EAPI=5
1600 +
1601 +inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
1602 + portability toolchain-funcs unpacker user udev
1603 +
1604 +NV_URI="http://us.download.nvidia.com/XFree86/"
1605 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
1606 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1607 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
1608 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1609 +
1610 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1611 +HOMEPAGE="http://www.nvidia.com/"
1612 +SRC_URI="
1613 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1614 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1615 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
1616 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
1617 + tools? ( ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2 )
1618 +"
1619 +
1620 +LICENSE="GPL-2 NVIDIA-r2"
1621 +SLOT="0/${PV%.*}"
1622 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
1623 +RESTRICT="bindist mirror strip"
1624 +EMULTILIB_PKG="true"
1625 +
1626 +IUSE="acpi gtk3 multilib kernel_FreeBSD kernel_linux pax_kernel static-libs +tools +X uvm"
1627 +REQUIRED_USE="
1628 + tools? ( X )
1629 + static-libs? ( tools )
1630 +"
1631 +
1632 +COMMON="
1633 + app-eselect/eselect-opencl
1634 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1635 + tools? (
1636 + dev-libs/atk
1637 + dev-libs/glib:2
1638 + dev-libs/jansson
1639 + gtk3? (
1640 + x11-libs/gtk+:3
1641 + )
1642 + x11-libs/cairo
1643 + x11-libs/gdk-pixbuf[X]
1644 + x11-libs/gtk+:2
1645 + x11-libs/libX11
1646 + x11-libs/libXext
1647 + x11-libs/libXrandr
1648 + x11-libs/libXv
1649 + x11-libs/libXxf86vm
1650 + x11-libs/pango[X]
1651 + )
1652 + X? (
1653 + >=app-eselect/eselect-opengl-1.0.9
1654 + )
1655 +"
1656 +DEPEND="
1657 + ${COMMON}
1658 + kernel_linux? ( virtual/linux-sources )
1659 +"
1660 +RDEPEND="
1661 + ${COMMON}
1662 + acpi? ( sys-power/acpid )
1663 + tools? ( !media-video/nvidia-settings )
1664 + X? (
1665 + <x11-base/xorg-server-1.18.99:=
1666 + >=x11-libs/libvdpau-0.3-r1
1667 + multilib? (
1668 + >=x11-libs/libX11-1.6.2[abi_x86_32]
1669 + >=x11-libs/libXext-1.3.2[abi_x86_32]
1670 + )
1671 + )
1672 +"
1673 +
1674 +QA_PREBUILT="opt/* usr/lib*"
1675 +
1676 +S=${WORKDIR}/
1677 +
1678 +pkg_pretend() {
1679 + if use amd64 && has_multilib_profile && \
1680 + [ "${DEFAULT_ABI}" != "amd64" ]; then
1681 + eerror "This ebuild doesn't currently support changing your default ABI"
1682 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
1683 + fi
1684 +
1685 + if use kernel_linux && kernel_is ge 4 4; then
1686 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
1687 + ewarn "which are limited to the following kernels:"
1688 + ewarn "<sys-kernel/gentoo-sources-4.4"
1689 + ewarn "<sys-kernel/vanilla-sources-4.4"
1690 + ewarn ""
1691 + ewarn "You are free to utilize epatch_user to provide whatever"
1692 + ewarn "support you feel is appropriate, but will not receive"
1693 + ewarn "support as a result of those changes."
1694 + ewarn ""
1695 + ewarn "Do not file a bug report about this."
1696 + ewarn ""
1697 + fi
1698 +
1699 + # Since Nvidia ships many different series of drivers, we need to give the user
1700 + # some kind of guidance as to what version they should install. This tries
1701 + # to point the user in the right direction but can't be perfect. check
1702 + # nvidia-driver.eclass
1703 + nvidia-driver-check-warning
1704 +
1705 + # Kernel features/options to check for
1706 + CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
1707 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
1708 +
1709 + # Now do the above checks
1710 + use kernel_linux && check_extra_config
1711 +}
1712 +
1713 +pkg_setup() {
1714 + # try to turn off distcc and ccache for people that have a problem with it
1715 + export DISTCC_DISABLE=1
1716 + export CCACHE_DISABLE=1
1717 +
1718 + if use kernel_linux; then
1719 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1720 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel/uvm)"
1721 +
1722 + # This needs to run after MODULE_NAMES (so that the eclass checks
1723 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1724 + # is set (so that KV_DIR is populated).
1725 + linux-mod_pkg_setup
1726 +
1727 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1728 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
1729 +
1730 + # linux-mod_src_compile calls set_arch_to_kernel, which
1731 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1732 + # expects x86_64 or i386 and then converts it to x86
1733 + # later on in the build process
1734 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1735 + fi
1736 +
1737 + # set variables to where files are in the package structure
1738 + if use kernel_FreeBSD; then
1739 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
1740 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1741 + NV_DOC="${S}/doc"
1742 + NV_OBJ="${S}/obj"
1743 + NV_SRC="${S}/src"
1744 + NV_MAN="${S}/x11/man"
1745 + NV_X11="${S}/obj"
1746 + NV_SOVER=1
1747 + elif use kernel_linux; then
1748 + NV_DOC="${S}"
1749 + NV_OBJ="${S}"
1750 + NV_SRC="${S}/kernel"
1751 + NV_MAN="${S}"
1752 + NV_X11="${S}"
1753 + NV_SOVER=${PV}
1754 + else
1755 + die "Could not determine proper NVIDIA package"
1756 + fi
1757 +}
1758 +
1759 +src_prepare() {
1760 + # Please add a brief description for every added patch
1761 +
1762 + if use kernel_linux; then
1763 + if kernel_is lt 2 6 9 ; then
1764 + eerror "You must build this against 2.6.9 or higher kernels."
1765 + fi
1766 +
1767 + # If greater than 2.6.5 use M= instead of SUBDIR=
1768 +# convert_to_m "${NV_SRC}"/Makefile.kbuild
1769 + fi
1770 +
1771 + if use pax_kernel; then
1772 + ewarn "Using PAX patches is not supported. You will be asked to"
1773 + ewarn "use a standard kernel should you have issues. Should you"
1774 + ewarn "need support with these patches, contact the PaX team."
1775 + epatch "${FILESDIR}"/${PN}-346.16-pax-usercopy.patch
1776 + epatch "${FILESDIR}"/${PN}-346.16-pax-constify.patch
1777 + fi
1778 +
1779 + # Allow user patches so they can support RC kernels and whatever else
1780 + epatch_user
1781 +}
1782 +
1783 +src_compile() {
1784 + # This is already the default on Linux, as there's no toplevel Makefile, but
1785 + # on FreeBSD there's one and triggers the kernel module build, as we install
1786 + # it by itself, pass this.
1787 +
1788 + cd "${NV_SRC}"
1789 + if use kernel_FreeBSD; then
1790 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
1791 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
1792 + elif use kernel_linux; then
1793 + MAKEOPTS=-j1
1794 + linux-mod_src_compile
1795 + fi
1796 +
1797 + if use tools; then
1798 + emake -C "${S}"/nvidia-settings-${PV}/src \
1799 + AR="$(tc-getAR)" \
1800 + CC="$(tc-getCC)" \
1801 + LIBDIR="$(get_libdir)" \
1802 + RANLIB="$(tc-getRANLIB)" \
1803 + build-xnvctrl
1804 +
1805 + emake -C "${S}"/nvidia-settings-${PV}/src \
1806 + CC="$(tc-getCC)" \
1807 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1808 + LD="$(tc-getCC)" \
1809 + LIBDIR="$(get_libdir)" \
1810 + NVML_ENABLED=0 \
1811 + NV_USE_BUNDLED_LIBJANSSON=0 \
1812 + NV_VERBOSE=1 \
1813 + STRIP_CMD=true
1814 + fi
1815 +}
1816 +
1817 +# Install nvidia library:
1818 +# the first parameter is the library to install
1819 +# the second parameter is the provided soversion
1820 +# the third parameter is the target directory if its not /usr/lib
1821 +donvidia() {
1822 + # Full path to library minus SOVER
1823 + MY_LIB="$1"
1824 +
1825 + # SOVER to use
1826 + MY_SOVER="$2"
1827 +
1828 + # Where to install
1829 + MY_DEST="$3"
1830 +
1831 + if [[ -z "${MY_DEST}" ]]; then
1832 + MY_DEST="/usr/$(get_libdir)"
1833 + action="dolib.so"
1834 + else
1835 + exeinto ${MY_DEST}
1836 + action="doexe"
1837 + fi
1838 +
1839 + # Get just the library name
1840 + libname=$(basename $1)
1841 +
1842 + # Install the library with the correct SOVER
1843 + ${action} ${MY_LIB}.${MY_SOVER} || \
1844 + die "failed to install ${libname}"
1845 +
1846 + # If SOVER wasn't 1, then we need to create a .1 symlink
1847 + if [[ "${MY_SOVER}" != "1" ]]; then
1848 + dosym ${libname}.${MY_SOVER} \
1849 + ${MY_DEST}/${libname}.1 || \
1850 + die "failed to create ${libname} symlink"
1851 + fi
1852 +
1853 + # Always create the symlink from the raw lib to the .1
1854 + dosym ${libname}.1 \
1855 + ${MY_DEST}/${libname} || \
1856 + die "failed to create ${libname} symlink"
1857 +}
1858 +
1859 +src_install() {
1860 + if use kernel_linux; then
1861 + linux-mod_src_install
1862 +
1863 + # Add the aliases
1864 + # This file is tweaked with the appropriate video group in
1865 + # pkg_preinst, see bug #491414
1866 + insinto /etc/modprobe.d
1867 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
1868 + use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
1869 +
1870 + # Ensures that our device nodes are created when not using X
1871 + exeinto "$(get_udevdir)"
1872 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
1873 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
1874 + elif use kernel_FreeBSD; then
1875 + if use x86-fbsd; then
1876 + insinto /boot/modules
1877 + doins "${S}/src/nvidia.kld"
1878 + fi
1879 +
1880 + exeinto /boot/modules
1881 + doexe "${S}/src/nvidia.ko"
1882 + fi
1883 +
1884 + # NVIDIA kernel <-> userspace driver config lib
1885 + donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
1886 +
1887 + # NVIDIA framebuffer capture library
1888 + donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
1889 +
1890 + # NVIDIA video encode/decode <-> CUDA
1891 + if use kernel_linux; then
1892 + donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
1893 + donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
1894 + fi
1895 +
1896 + if use X; then
1897 + # Xorg DDX driver
1898 + insinto /usr/$(get_libdir)/xorg/modules/drivers
1899 + doins ${NV_X11}/nvidia_drv.so
1900 +
1901 + # Xorg GLX driver
1902 + donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
1903 + /usr/$(get_libdir)/opengl/nvidia/extensions
1904 +
1905 + # Xorg nvidia.conf
1906 + if has_version '>=x11-base/xorg-server-1.16'; then
1907 + insinto /usr/share/X11/xorg.conf.d
1908 + newins {,50-}nvidia-drm-outputclass.conf
1909 + fi
1910 + fi
1911 +
1912 + # OpenCL ICD for NVIDIA
1913 + if use kernel_linux; then
1914 + insinto /etc/OpenCL/vendors
1915 + doins ${NV_OBJ}/nvidia.icd
1916 + fi
1917 +
1918 + # Documentation
1919 + dohtml ${NV_DOC}/html/*
1920 + if use kernel_FreeBSD; then
1921 + dodoc "${NV_DOC}/README"
1922 + use X && doman "${NV_MAN}/nvidia-xconfig.1"
1923 + use tools && doman "${NV_MAN}/nvidia-settings.1"
1924 + else
1925 + # Docs
1926 + newdoc "${NV_DOC}/README.txt" README
1927 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1928 + doman "${NV_MAN}/nvidia-smi.1.gz"
1929 + use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
1930 + use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
1931 + doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
1932 + fi
1933 +
1934 + # Helper Apps
1935 + exeinto /opt/bin/
1936 +
1937 + if use X; then
1938 + doexe ${NV_OBJ}/nvidia-xconfig
1939 + fi
1940 +
1941 + if use kernel_linux ; then
1942 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
1943 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
1944 + doexe ${NV_OBJ}/nvidia-debugdump
1945 + doexe ${NV_OBJ}/nvidia-persistenced
1946 + doexe ${NV_OBJ}/nvidia-smi
1947 +
1948 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
1949 + doexe ${NV_OBJ}/nvidia-modprobe
1950 + fowners root:video /opt/bin/nvidia-modprobe
1951 + fperms 4710 /opt/bin/nvidia-modprobe
1952 + dosym /{opt,usr}/bin/nvidia-modprobe
1953 +
1954 + doman nvidia-cuda-mps-control.1.gz
1955 + doman nvidia-modprobe.1.gz
1956 + doman nvidia-persistenced.1.gz
1957 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1958 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1959 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1960 + fi
1961 +
1962 + if use tools; then
1963 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1964 + DESTDIR="${D}" \
1965 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1966 + LIBDIR="${D}/usr/$(get_libdir)" \
1967 + PREFIX=/usr \
1968 + NV_USE_BUNDLED_LIBJANSSON=0 \
1969 + install
1970 +
1971 + if use static-libs; then
1972 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1973 +
1974 + insinto /usr/share/nvidia/
1975 + doins nvidia-application-profiles-${PV}-key-documentation
1976 + fi
1977 +
1978 + insinto /etc/nvidia
1979 + newins \
1980 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1981 +
1982 + # There is no icon in the FreeBSD tarball.
1983 + use kernel_FreeBSD || \
1984 + doicon ${NV_OBJ}/nvidia-settings.png
1985 +
1986 + domenu "${FILESDIR}"/nvidia-settings.desktop
1987 +
1988 + exeinto /etc/X11/xinit/xinitrc.d
1989 + doexe "${FILESDIR}"/95-nvidia-settings
1990 + fi
1991 +
1992 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1993 +
1994 + if has_multilib_profile && use multilib ; then
1995 + local OABI=${ABI}
1996 + for ABI in $(get_install_abis) ; do
1997 + src_install-libs
1998 + done
1999 + ABI=${OABI}
2000 + unset OABI
2001 + else
2002 + src_install-libs
2003 + fi
2004 +
2005 + is_final_abi || die "failed to iterate through all ABIs"
2006 +
2007 + readme.gentoo_create_doc
2008 +}
2009 +
2010 +src_install-libs() {
2011 + local inslibdir=$(get_libdir)
2012 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
2013 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
2014 + local libdir=${NV_OBJ}
2015 +
2016 + if use kernel_linux && has_multilib_profile && \
2017 + [[ ${ABI} == "x86" ]] ; then
2018 + libdir=${NV_OBJ}/32
2019 + fi
2020 +
2021 + if use X; then
2022 + # The GLX libraries
2023 + donvidia ${libdir}/libEGL.so ${NV_SOVER} ${GL_ROOT}
2024 + donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
2025 + donvidia ${libdir}/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
2026 + donvidia ${libdir}/libnvidia-eglcore.so ${NV_SOVER}
2027 + donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
2028 + donvidia ${libdir}/libnvidia-glsi.so ${NV_SOVER}
2029 + donvidia ${libdir}/libnvidia-ifr.so ${NV_SOVER}
2030 + if use kernel_FreeBSD; then
2031 + donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER}
2032 + else
2033 + donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}
2034 + fi
2035 +
2036 + # VDPAU
2037 + donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
2038 +
2039 + # GLES v2 libraries
2040 + insinto ${GL_ROOT}
2041 + doexe ${libdir}/libGLESv2.so.${PV}
2042 + dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
2043 + dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
2044 + fi
2045 +
2046 + # NVIDIA monitoring library
2047 + if use kernel_linux ; then
2048 + donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
2049 + fi
2050 +
2051 + # CUDA & OpenCL
2052 + if use kernel_linux; then
2053 + donvidia ${libdir}/libcuda.so ${NV_SOVER}
2054 + donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
2055 + donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
2056 + donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}
2057 + fi
2058 +}
2059 +
2060 +pkg_preinst() {
2061 + if use kernel_linux; then
2062 + linux-mod_pkg_preinst
2063 +
2064 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
2065 + if [ -z "${videogroup}" ]; then
2066 + eerror "Failed to determine the video group gid"
2067 + die "Failed to determine the video group gid"
2068 + else
2069 + sed -i \
2070 + -e "s:PACKAGE:${PF}:g" \
2071 + -e "s:VIDEOGID:${videogroup}:" \
2072 + "${D}"/etc/modprobe.d/nvidia.conf || die
2073 + fi
2074 + fi
2075 +
2076 + # Clean the dynamic libGL stuff's home to ensure
2077 + # we dont have stale libs floating around
2078 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
2079 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
2080 + fi
2081 + # Make sure we nuke the old nvidia-glx's env.d file
2082 + if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
2083 + rm -f "${ROOT}"/etc/env.d/09nvidia
2084 + fi
2085 +}
2086 +
2087 +pkg_postinst() {
2088 + use kernel_linux && linux-mod_pkg_postinst
2089 +
2090 + # Switch to the nvidia implementation
2091 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
2092 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
2093 +
2094 + readme.gentoo_print_elog
2095 +
2096 + if ! use X; then
2097 + elog "You have elected to not install the X.org driver. Along with"
2098 + elog "this the OpenGL libraries and VDPAU libraries were not"
2099 + elog "installed. Additionally, once the driver is loaded your card"
2100 + elog "and fan will run at max speed which may not be desirable."
2101 + elog "Use the 'nvidia-smi' init script to have your card and fan"
2102 + elog "speed scale appropriately."
2103 + elog
2104 + fi
2105 + if ! use tools; then
2106 + elog "USE=tools controls whether the nvidia-settings application"
2107 + elog "is installed. If you would like to use it, enable that"
2108 + elog "flag and re-emerge this ebuild. Optionally you can install"
2109 + elog "media-video/nvidia-settings"
2110 + elog
2111 + fi
2112 +}
2113 +
2114 +pkg_prerm() {
2115 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2116 +}
2117 +
2118 +pkg_postrm() {
2119 + use kernel_linux && linux-mod_pkg_postrm
2120 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2121 +}
2122
2123 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-358.16-r3.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-358.16-r3.ebuild
2124 new file mode 100644
2125 index 0000000..4a9bf0f
2126 --- /dev/null
2127 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-358.16-r3.ebuild
2128 @@ -0,0 +1,539 @@
2129 +# Copyright 1999-2015 Gentoo Foundation
2130 +# Distributed under the terms of the GNU General Public License v2
2131 +# $Id$
2132 +
2133 +EAPI=5
2134 +
2135 +inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
2136 + portability toolchain-funcs unpacker user udev
2137 +
2138 +NV_URI="http://us.download.nvidia.com/XFree86/"
2139 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
2140 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
2141 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
2142 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
2143 +
2144 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
2145 +HOMEPAGE="http://www.nvidia.com/"
2146 +SRC_URI="
2147 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
2148 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
2149 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
2150 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
2151 + tools? ( ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2 )
2152 +"
2153 +
2154 +LICENSE="GPL-2 NVIDIA-r2"
2155 +SLOT="0/${PV%.*}"
2156 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
2157 +RESTRICT="bindist mirror strip"
2158 +EMULTILIB_PKG="true"
2159 +
2160 +IUSE="acpi multilib kernel_FreeBSD kernel_linux +kms pax_kernel static-libs +tools gtk3 +X uvm"
2161 +REQUIRED_USE="
2162 + tools? ( X )
2163 + static-libs? ( tools )
2164 +"
2165 +
2166 +COMMON="
2167 + app-eselect/eselect-opencl
2168 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
2169 + tools? (
2170 + dev-libs/atk
2171 + dev-libs/glib:2
2172 + dev-libs/jansson
2173 + gtk3? ( x11-libs/gtk+:3 )
2174 + x11-libs/cairo
2175 + x11-libs/gdk-pixbuf[X]
2176 + x11-libs/gtk+:2
2177 + x11-libs/libX11
2178 + x11-libs/libXext
2179 + x11-libs/libXrandr
2180 + x11-libs/libXv
2181 + x11-libs/libXxf86vm
2182 + x11-libs/pango[X]
2183 + )
2184 + X? (
2185 + >=app-eselect/eselect-opengl-1.0.9
2186 + )
2187 +"
2188 +DEPEND="
2189 + ${COMMON}
2190 + kernel_linux? ( virtual/linux-sources )
2191 +"
2192 +RDEPEND="
2193 + ${COMMON}
2194 + acpi? ( sys-power/acpid )
2195 + tools? ( !media-video/nvidia-settings )
2196 + X? (
2197 + <x11-base/xorg-server-1.18.99:=
2198 + >=x11-libs/libvdpau-0.3-r1
2199 + multilib? (
2200 + >=x11-libs/libX11-1.6.2[abi_x86_32]
2201 + >=x11-libs/libXext-1.3.2[abi_x86_32]
2202 + )
2203 + )
2204 +"
2205 +
2206 +QA_PREBUILT="opt/* usr/lib*"
2207 +
2208 +S=${WORKDIR}/
2209 +
2210 +pkg_pretend() {
2211 + if use amd64 && has_multilib_profile && \
2212 + [ "${DEFAULT_ABI}" != "amd64" ]; then
2213 + eerror "This ebuild doesn't currently support changing your default ABI"
2214 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
2215 + fi
2216 +
2217 + if use kernel_linux && kernel_is ge 4 4; then
2218 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
2219 + ewarn "which are limited to the following kernels:"
2220 + ewarn "<sys-kernel/gentoo-sources-4.4"
2221 + ewarn "<sys-kernel/vanilla-sources-4.4"
2222 + ewarn ""
2223 + ewarn "You are free to utilize epatch_user to provide whatever"
2224 + ewarn "support you feel is appropriate, but will not receive"
2225 + ewarn "support as a result of those changes."
2226 + ewarn ""
2227 + ewarn "Do not file a bug report about this."
2228 + ewarn ""
2229 + fi
2230 +
2231 + # Since Nvidia ships many different series of drivers, we need to give the user
2232 + # some kind of guidance as to what version they should install. This tries
2233 + # to point the user in the right direction but can't be perfect. check
2234 + # nvidia-driver.eclass
2235 + nvidia-driver-check-warning
2236 +
2237 + # Kernel features/options to check for
2238 + CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
2239 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
2240 +
2241 + # Now do the above checks
2242 + use kernel_linux && check_extra_config
2243 +}
2244 +
2245 +pkg_setup() {
2246 + # try to turn off distcc and ccache for people that have a problem with it
2247 + export DISTCC_DISABLE=1
2248 + export CCACHE_DISABLE=1
2249 +
2250 + if use kernel_linux; then
2251 + MODULE_NAMES="nvidia(video:${S}/kernel)"
2252 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
2253 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel)"
2254 +
2255 + # This needs to run after MODULE_NAMES (so that the eclass checks
2256 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
2257 + # is set (so that KV_DIR is populated).
2258 + linux-mod_pkg_setup
2259 +
2260 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
2261 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
2262 +
2263 + # linux-mod_src_compile calls set_arch_to_kernel, which
2264 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
2265 + # expects x86_64 or i386 and then converts it to x86
2266 + # later on in the build process
2267 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
2268 + fi
2269 +
2270 + # set variables to where files are in the package structure
2271 + if use kernel_FreeBSD; then
2272 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
2273 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
2274 + NV_DOC="${S}/doc"
2275 + NV_OBJ="${S}/obj"
2276 + NV_SRC="${S}/src"
2277 + NV_MAN="${S}/x11/man"
2278 + NV_X11="${S}/obj"
2279 + NV_SOVER=1
2280 + elif use kernel_linux; then
2281 + NV_DOC="${S}"
2282 + NV_OBJ="${S}"
2283 + NV_SRC="${S}/kernel"
2284 + NV_MAN="${S}"
2285 + NV_X11="${S}"
2286 + NV_SOVER=${PV}
2287 + else
2288 + die "Could not determine proper NVIDIA package"
2289 + fi
2290 +}
2291 +
2292 +src_prepare() {
2293 + # Please add a brief description for every added patch
2294 +
2295 + if use kernel_linux; then
2296 + if kernel_is lt 2 6 9; then
2297 + eerror "You must build this against 2.6.9 or higher kernels."
2298 + fi
2299 +
2300 + # If greater than 2.6.5 use M= instead of SUBDIR=
2301 +# convert_to_m "${NV_SRC}"/Makefile.kbuild
2302 + fi
2303 +
2304 + if use pax_kernel; then
2305 + ewarn "Using PAX patches is not supported. You will be asked to"
2306 + ewarn "use a standard kernel should you have issues. Should you"
2307 + ewarn "need support with these patches, contact the PaX team."
2308 + epatch "${FILESDIR}"/${PN}-355.06-pax.patch
2309 + fi
2310 +
2311 + # Allow user patches so they can support RC kernels and whatever else
2312 + epatch_user
2313 +}
2314 +
2315 +src_compile() {
2316 + # This is already the default on Linux, as there's no toplevel Makefile, but
2317 + # on FreeBSD there's one and triggers the kernel module build, as we install
2318 + # it by itself, pass this.
2319 +
2320 + cd "${NV_SRC}"
2321 + if use kernel_FreeBSD; then
2322 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
2323 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
2324 + elif use kernel_linux; then
2325 + MAKEOPTS=-j1
2326 + linux-mod_src_compile
2327 + fi
2328 +
2329 + if use tools; then
2330 + emake -C "${S}"/nvidia-settings-${PV}/src \
2331 + AR="$(tc-getAR)" \
2332 + CC="$(tc-getCC)" \
2333 + LIBDIR="$(get_libdir)" \
2334 + RANLIB="$(tc-getRANLIB)" \
2335 + build-xnvctrl
2336 +
2337 + emake -C "${S}"/nvidia-settings-${PV}/src \
2338 + CC="$(tc-getCC)" \
2339 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2340 + LD="$(tc-getCC)" \
2341 + LIBDIR="$(get_libdir)" \
2342 + NVML_ENABLED=0 \
2343 + NV_USE_BUNDLED_LIBJANSSON=0 \
2344 + NV_VERBOSE=1 \
2345 + STRIP_CMD=true
2346 + fi
2347 +}
2348 +
2349 +# Install nvidia library:
2350 +# the first parameter is the library to install
2351 +# the second parameter is the provided soversion
2352 +# the third parameter is the target directory if it is not /usr/lib
2353 +donvidia() {
2354 + # Full path to library minus SOVER
2355 + MY_LIB="$1"
2356 +
2357 + # SOVER to use
2358 + MY_SOVER="$2"
2359 +
2360 + # Where to install
2361 + MY_DEST="$3"
2362 +
2363 + if [[ -z "${MY_DEST}" ]]; then
2364 + MY_DEST="/usr/$(get_libdir)"
2365 + action="dolib.so"
2366 + else
2367 + exeinto ${MY_DEST}
2368 + action="doexe"
2369 + fi
2370 +
2371 + # Get just the library name
2372 + libname=$(basename $1)
2373 +
2374 + # Install the library with the correct SOVER
2375 + ${action} ${MY_LIB}.${MY_SOVER} || \
2376 + die "failed to install ${libname}"
2377 +
2378 + # If SOVER wasn't 1, then we need to create a .1 symlink
2379 + if [[ "${MY_SOVER}" != "1" ]]; then
2380 + dosym ${libname}.${MY_SOVER} \
2381 + ${MY_DEST}/${libname}.1 || \
2382 + die "failed to create ${libname} symlink"
2383 + fi
2384 +
2385 + # Always create the symlink from the raw lib to the .1
2386 + dosym ${libname}.1 \
2387 + ${MY_DEST}/${libname} || \
2388 + die "failed to create ${libname} symlink"
2389 +}
2390 +
2391 +src_install() {
2392 + if use kernel_linux; then
2393 + linux-mod_src_install
2394 +
2395 + # Add the aliases
2396 + # This file is tweaked with the appropriate video group in
2397 + # pkg_preinst, see bug #491414
2398 + insinto /etc/modprobe.d
2399 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
2400 + doins "${FILESDIR}"/nvidia-rmmod.conf
2401 +
2402 + # Ensures that our device nodes are created when not using X
2403 + exeinto "$(get_udevdir)"
2404 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
2405 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
2406 + elif use kernel_FreeBSD; then
2407 + if use x86-fbsd; then
2408 + insinto /boot/modules
2409 + doins "${S}/src/nvidia.kld"
2410 + fi
2411 +
2412 + exeinto /boot/modules
2413 + doexe "${S}/src/nvidia.ko"
2414 + fi
2415 +
2416 + # NVIDIA kernel <-> userspace driver config lib
2417 + donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
2418 +
2419 + # NVIDIA framebuffer capture library
2420 + donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
2421 +
2422 + # NVIDIA video encode/decode <-> CUDA
2423 + if use kernel_linux; then
2424 + donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
2425 + donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
2426 + fi
2427 +
2428 + if use X; then
2429 + # Xorg DDX driver
2430 + insinto /usr/$(get_libdir)/xorg/modules/drivers
2431 + doins ${NV_X11}/nvidia_drv.so
2432 +
2433 + # Xorg GLX driver
2434 + donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
2435 + /usr/$(get_libdir)/opengl/nvidia/extensions
2436 +
2437 + # Xorg nvidia.conf
2438 + if has_version '>=x11-base/xorg-server-1.16'; then
2439 + insinto /usr/share/X11/xorg.conf.d
2440 + newins {,50-}nvidia-drm-outputclass.conf
2441 + fi
2442 + fi
2443 +
2444 + # OpenCL ICD for NVIDIA
2445 + if use kernel_linux; then
2446 + insinto /etc/OpenCL/vendors
2447 + doins ${NV_OBJ}/nvidia.icd
2448 + fi
2449 +
2450 + # Documentation
2451 + dohtml ${NV_DOC}/html/*
2452 + if use kernel_FreeBSD; then
2453 + dodoc "${NV_DOC}/README"
2454 + use X && doman "${NV_MAN}/nvidia-xconfig.1"
2455 + use tools && doman "${NV_MAN}/nvidia-settings.1"
2456 + else
2457 + # Docs
2458 + newdoc "${NV_DOC}/README.txt" README
2459 + dodoc "${NV_DOC}/NVIDIA_Changelog"
2460 + doman "${NV_MAN}/nvidia-smi.1.gz"
2461 + use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
2462 + use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
2463 + doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
2464 + fi
2465 +
2466 + # Helper Apps
2467 + exeinto /opt/bin/
2468 +
2469 + if use X; then
2470 + doexe ${NV_OBJ}/nvidia-xconfig
2471 + fi
2472 +
2473 + if use kernel_linux; then
2474 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
2475 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
2476 + doexe ${NV_OBJ}/nvidia-debugdump
2477 + doexe ${NV_OBJ}/nvidia-persistenced
2478 + doexe ${NV_OBJ}/nvidia-smi
2479 +
2480 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
2481 + doexe ${NV_OBJ}/nvidia-modprobe
2482 + fowners root:video /opt/bin/nvidia-modprobe
2483 + fperms 4710 /opt/bin/nvidia-modprobe
2484 + dosym /{opt,usr}/bin/nvidia-modprobe
2485 +
2486 + doman nvidia-cuda-mps-control.1.gz
2487 + doman nvidia-modprobe.1.gz
2488 + doman nvidia-persistenced.1.gz
2489 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
2490 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
2491 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
2492 + fi
2493 +
2494 + if use tools; then
2495 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
2496 + DESTDIR="${D}" \
2497 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2498 + LIBDIR="${D}/usr/$(get_libdir)" \
2499 + PREFIX=/usr \
2500 + NV_USE_BUNDLED_LIBJANSSON=0 \
2501 + install
2502 +
2503 + if use static-libs; then
2504 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
2505 +
2506 + insinto /usr/include/NVCtrl
2507 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
2508 + fi
2509 +
2510 + insinto /usr/share/nvidia/
2511 + doins nvidia-application-profiles-${PV}-key-documentation
2512 +
2513 + insinto /etc/nvidia
2514 + newins \
2515 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
2516 +
2517 + # There is no icon in the FreeBSD tarball.
2518 + use kernel_FreeBSD || \
2519 + doicon ${NV_OBJ}/nvidia-settings.png
2520 +
2521 + domenu "${FILESDIR}"/nvidia-settings.desktop
2522 +
2523 + exeinto /etc/X11/xinit/xinitrc.d
2524 + doexe "${FILESDIR}"/95-nvidia-settings
2525 + fi
2526 +
2527 + dobin ${NV_OBJ}/nvidia-bug-report.sh
2528 +
2529 + if has_multilib_profile && use multilib; then
2530 + local OABI=${ABI}
2531 + for ABI in $(get_install_abis); do
2532 + src_install-libs
2533 + done
2534 + ABI=${OABI}
2535 + unset OABI
2536 + else
2537 + src_install-libs
2538 + fi
2539 +
2540 + is_final_abi || die "failed to iterate through all ABIs"
2541 +
2542 + readme.gentoo_create_doc
2543 +}
2544 +
2545 +src_install-libs() {
2546 + local inslibdir=$(get_libdir)
2547 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
2548 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
2549 + local libdir=${NV_OBJ}
2550 +
2551 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
2552 + libdir=${NV_OBJ}/32
2553 + fi
2554 +
2555 + if use X; then
2556 + NV_GLX_LIBRARIES=(
2557 + "libEGL.so 1 ${GL_ROOT}"
2558 + "libEGL_nvidia.so 0 ${GL_ROOT}"
2559 + "libGL.so ${NV_SOVER} ${GL_ROOT}"
2560 + "libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}"
2561 + "libGLdispatch.so 0 ${GL_ROOT}"
2562 + "libOpenCL.so 1.0.0 ${CL_ROOT}"
2563 + "libOpenGL.so 0 ${GL_ROOT}"
2564 + "libcuda.so ${NV_SOVER}"
2565 + "libnvcuvid.so ${NV_SOVER}"
2566 + "libnvidia-compiler.so ${NV_SOVER}"
2567 + "libnvidia-eglcore.so ${NV_SOVER}"
2568 + "libnvidia-encode.so ${NV_SOVER}"
2569 + "libnvidia-fbc.so ${NV_SOVER}"
2570 + "libnvidia-glcore.so ${NV_SOVER}"
2571 + "libnvidia-glsi.so ${NV_SOVER}"
2572 + "libnvidia-ifr.so ${NV_SOVER}"
2573 + "libnvidia-opencl.so ${NV_SOVER}"
2574 + "libvdpau.so ${NV_SOVER} ${GL_ROOT}"
2575 + "libvdpau_nvidia.so ${NV_SOVER}"
2576 + "libvdpau_trace.so ${NV_SOVER} ${GL_ROOT}"
2577 + )
2578 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2579 + then
2580 + NV_GLX_LIBRARIES+=( "libnvidia-wfb.so ${NV_SOVER}" )
2581 + fi
2582 +
2583 + if use kernel_FreeBSD; then
2584 + NV_GLX_LIBRARIES+=( "libnvidia-tls.so ${NV_SOVER}" )
2585 + fi
2586 +
2587 + if use kernel_linux; then
2588 + NV_GLX_LIBRARIES+=(
2589 + "libnvidia-ml.so ${NV_SOVER}"
2590 + "tls/libnvidia-tls.so ${NV_SOVER}"
2591 + )
2592 + fi
2593 +
2594 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
2595 + donvidia ${libdir}/${NV_LIB}
2596 + done
2597 +
2598 + # GLES v2 library is special
2599 + insinto ${GL_ROOT}
2600 + doexe ${libdir}/libGLESv2.so.${PV}
2601 + dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
2602 + dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
2603 + fi
2604 +}
2605 +
2606 +pkg_preinst() {
2607 + if use kernel_linux; then
2608 + linux-mod_pkg_preinst
2609 +
2610 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
2611 + if [ -z "${videogroup}" ]; then
2612 + eerror "Failed to determine the video group gid"
2613 + die "Failed to determine the video group gid"
2614 + else
2615 + sed -i \
2616 + -e "s:PACKAGE:${PF}:g" \
2617 + -e "s:VIDEOGID:${videogroup}:" \
2618 + "${D}"/etc/modprobe.d/nvidia.conf || die
2619 + fi
2620 + fi
2621 +
2622 + # Clean the dynamic libGL stuff's home to ensure
2623 + # we dont have stale libs floating around
2624 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
2625 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
2626 + fi
2627 + # Make sure we nuke the old nvidia-glx's env.d file
2628 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
2629 + rm -f "${ROOT}"/etc/env.d/09nvidia
2630 + fi
2631 +}
2632 +
2633 +pkg_postinst() {
2634 + use kernel_linux && linux-mod_pkg_postinst
2635 +
2636 + # Switch to the nvidia implementation
2637 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
2638 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
2639 +
2640 + readme.gentoo_print_elog
2641 +
2642 + if ! use X; then
2643 + elog "You have elected to not install the X.org driver. Along with"
2644 + elog "this the OpenGL libraries and VDPAU libraries were not"
2645 + elog "installed. Additionally, once the driver is loaded your card"
2646 + elog "and fan will run at max speed which may not be desirable."
2647 + elog "Use the 'nvidia-smi' init script to have your card and fan"
2648 + elog "speed scale appropriately."
2649 + elog
2650 + fi
2651 + if ! use tools; then
2652 + elog "USE=tools controls whether the nvidia-settings application"
2653 + elog "is installed. If you would like to use it, enable that"
2654 + elog "flag and re-emerge this ebuild. Optionally you can install"
2655 + elog "media-video/nvidia-settings"
2656 + elog
2657 + fi
2658 +}
2659 +
2660 +pkg_prerm() {
2661 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2662 +}
2663 +
2664 +pkg_postrm() {
2665 + use kernel_linux && linux-mod_pkg_postrm
2666 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2667 +}
2668
2669 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-361.18-r3.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-361.18-r3.ebuild
2670 new file mode 100644
2671 index 0000000..8d5f919
2672 --- /dev/null
2673 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-361.18-r3.ebuild
2674 @@ -0,0 +1,530 @@
2675 +# Copyright 1999-2015 Gentoo Foundation
2676 +# Distributed under the terms of the GNU General Public License v2
2677 +# $Id$
2678 +
2679 +EAPI=5
2680 +
2681 +inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
2682 + portability toolchain-funcs unpacker user udev
2683 +
2684 +NV_URI="http://us.download.nvidia.com/XFree86/"
2685 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
2686 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
2687 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
2688 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
2689 +
2690 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
2691 +HOMEPAGE="http://www.nvidia.com/"
2692 +SRC_URI="
2693 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
2694 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
2695 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
2696 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
2697 + tools? ( ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2 )
2698 +"
2699 +
2700 +LICENSE="GPL-2 NVIDIA-r2"
2701 +SLOT="0/${PV%.*}"
2702 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
2703 +RESTRICT="bindist mirror strip"
2704 +EMULTILIB_PKG="true"
2705 +
2706 +IUSE="acpi +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib pax_kernel static-libs +tools uvm +X"
2707 +REQUIRED_USE="
2708 + tools? ( X )
2709 + static-libs? ( tools )
2710 +"
2711 +
2712 +COMMON="
2713 + app-eselect/eselect-opencl
2714 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
2715 + tools? (
2716 + dev-libs/atk
2717 + dev-libs/glib:2
2718 + dev-libs/jansson
2719 + gtk3? ( x11-libs/gtk+:3 )
2720 + x11-libs/cairo
2721 + x11-libs/gdk-pixbuf[X]
2722 + x11-libs/gtk+:2
2723 + x11-libs/libX11
2724 + x11-libs/libXext
2725 + x11-libs/libXrandr
2726 + x11-libs/libXv
2727 + x11-libs/libXxf86vm
2728 + x11-libs/pango[X]
2729 + )
2730 + X? (
2731 + >=app-eselect/eselect-opengl-1.0.9
2732 + app-misc/pax-utils
2733 + )
2734 +"
2735 +DEPEND="
2736 + ${COMMON}
2737 + kernel_linux? ( virtual/linux-sources )
2738 +"
2739 +RDEPEND="
2740 + ${COMMON}
2741 + acpi? ( sys-power/acpid )
2742 + tools? ( !media-video/nvidia-settings )
2743 + X? (
2744 + <x11-base/xorg-server-1.18.99:=
2745 + >=x11-libs/libvdpau-0.3-r1
2746 + multilib? (
2747 + >=x11-libs/libX11-1.6.2[abi_x86_32]
2748 + >=x11-libs/libXext-1.3.2[abi_x86_32]
2749 + )
2750 + )
2751 +"
2752 +
2753 +QA_PREBUILT="opt/* usr/lib*"
2754 +
2755 +S=${WORKDIR}/
2756 +
2757 +pkg_pretend() {
2758 + if use amd64 && has_multilib_profile && \
2759 + [ "${DEFAULT_ABI}" != "amd64" ]; then
2760 + eerror "This ebuild doesn't currently support changing your default ABI"
2761 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
2762 + fi
2763 +
2764 + if use kernel_linux && kernel_is ge 4 5; then
2765 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
2766 + ewarn "which are limited to the following kernels:"
2767 + ewarn "<sys-kernel/gentoo-sources-4.5"
2768 + ewarn "<sys-kernel/vanilla-sources-4.5"
2769 + ewarn ""
2770 + ewarn "You are free to utilize epatch_user to provide whatever"
2771 + ewarn "support you feel is appropriate, but will not receive"
2772 + ewarn "support as a result of those changes."
2773 + ewarn ""
2774 + ewarn "Do not file a bug report about this."
2775 + ewarn ""
2776 + fi
2777 +
2778 + # Since Nvidia ships many different series of drivers, we need to give the user
2779 + # some kind of guidance as to what version they should install. This tries
2780 + # to point the user in the right direction but can't be perfect. check
2781 + # nvidia-driver.eclass
2782 + nvidia-driver-check-warning
2783 +
2784 + # Kernel features/options to check for
2785 + CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
2786 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
2787 +
2788 + # Now do the above checks
2789 + use kernel_linux && check_extra_config
2790 +}
2791 +
2792 +pkg_setup() {
2793 + # try to turn off distcc and ccache for people that have a problem with it
2794 + export DISTCC_DISABLE=1
2795 + export CCACHE_DISABLE=1
2796 +
2797 + if use driver && use kernel_linux; then
2798 + MODULE_NAMES="nvidia(video:${S}/kernel)"
2799 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
2800 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel)"
2801 +
2802 + # This needs to run after MODULE_NAMES (so that the eclass checks
2803 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
2804 + # is set (so that KV_DIR is populated).
2805 + linux-mod_pkg_setup
2806 +
2807 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
2808 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
2809 +
2810 + # linux-mod_src_compile calls set_arch_to_kernel, which
2811 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
2812 + # expects x86_64 or i386 and then converts it to x86
2813 + # later on in the build process
2814 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
2815 + fi
2816 +
2817 + if use kernel_linux && kernel_is lt 2 6 9; then
2818 + eerror "You must build this against 2.6.9 or higher kernels."
2819 + fi
2820 +
2821 + # set variables to where files are in the package structure
2822 + if use kernel_FreeBSD; then
2823 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
2824 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
2825 + NV_DOC="${S}/doc"
2826 + NV_OBJ="${S}/obj"
2827 + NV_SRC="${S}/src"
2828 + NV_MAN="${S}/x11/man"
2829 + NV_X11="${S}/obj"
2830 + NV_SOVER=1
2831 + elif use kernel_linux; then
2832 + NV_DOC="${S}"
2833 + NV_OBJ="${S}"
2834 + NV_SRC="${S}/kernel"
2835 + NV_MAN="${S}"
2836 + NV_X11="${S}"
2837 + NV_SOVER=${PV}
2838 + else
2839 + die "Could not determine proper NVIDIA package"
2840 + fi
2841 +}
2842 +
2843 +src_prepare() {
2844 + if use pax_kernel; then
2845 + ewarn "Using PAX patches is not supported. You will be asked to"
2846 + ewarn "use a standard kernel should you have issues. Should you"
2847 + ewarn "need support with these patches, contact the PaX team."
2848 + epatch "${FILESDIR}"/${PN}-355.06-pax.patch
2849 + fi
2850 +
2851 + # Allow user patches so they can support RC kernels and whatever else
2852 + epatch_user
2853 +}
2854 +
2855 +src_compile() {
2856 + # This is already the default on Linux, as there's no toplevel Makefile, but
2857 + # on FreeBSD there's one and triggers the kernel module build, as we install
2858 + # it by itself, pass this.
2859 +
2860 + cd "${NV_SRC}"
2861 + if use kernel_FreeBSD; then
2862 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
2863 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
2864 + elif use driver && use kernel_linux; then
2865 + MAKEOPTS=-j1
2866 + linux-mod_src_compile
2867 + fi
2868 +
2869 + if use tools; then
2870 + emake -C "${S}"/nvidia-settings-${PV}/src \
2871 + AR="$(tc-getAR)" \
2872 + CC="$(tc-getCC)" \
2873 + LIBDIR="$(get_libdir)" \
2874 + RANLIB="$(tc-getRANLIB)" \
2875 + build-xnvctrl
2876 +
2877 + emake -C "${S}"/nvidia-settings-${PV}/src \
2878 + CC="$(tc-getCC)" \
2879 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2880 + LD="$(tc-getCC)" \
2881 + LIBDIR="$(get_libdir)" \
2882 + NVML_ENABLED=0 \
2883 + NV_USE_BUNDLED_LIBJANSSON=0 \
2884 + NV_VERBOSE=1 \
2885 + STRIP_CMD=true
2886 + fi
2887 +}
2888 +
2889 +# Install nvidia library:
2890 +# the first parameter is the library to install
2891 +# the second parameter is the provided soversion
2892 +# the third parameter is the target directory if it is not /usr/lib
2893 +donvidia() {
2894 + # Full path to library
2895 + nv_LIB="${1}"
2896 +
2897 + # SOVER to use
2898 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
2899 +
2900 + # Where to install
2901 + nv_DEST="${2}"
2902 +
2903 + # Get just the library name
2904 + nv_LIBNAME=$(basename "${nv_LIB}")
2905 +
2906 + if [[ "${nv_DEST}" ]]; then
2907 + exeinto ${nv_DEST}
2908 + action="doexe"
2909 + else
2910 + nv_DEST="/usr/$(get_libdir)"
2911 + action="dolib.so"
2912 + fi
2913 +
2914 + # Install the library
2915 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
2916 +
2917 + # If the library has a SONAME and SONAME does not match the library name,
2918 + # then we need to create a symlink
2919 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
2920 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER} \
2921 + || die "failed to create ${nv_DEST}/${nv_SOVER} symlink"
2922 + fi
2923 +
2924 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so} \
2925 + || die "failed to create ${nv_LIBNAME/.so*/.so} symlink"
2926 +}
2927 +
2928 +src_install() {
2929 + if use driver && use kernel_linux; then
2930 + linux-mod_src_install
2931 +
2932 + # Add the aliases
2933 + # This file is tweaked with the appropriate video group in
2934 + # pkg_preinst, see bug #491414
2935 + insinto /etc/modprobe.d
2936 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
2937 + doins "${FILESDIR}"/nvidia-rmmod.conf
2938 +
2939 + # Ensures that our device nodes are created when not using X
2940 + exeinto "$(get_udevdir)"
2941 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
2942 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
2943 + elif use kernel_FreeBSD; then
2944 + if use x86-fbsd; then
2945 + insinto /boot/modules
2946 + doins "${S}/src/nvidia.kld"
2947 + fi
2948 +
2949 + exeinto /boot/modules
2950 + doexe "${S}/src/nvidia.ko"
2951 + fi
2952 +
2953 + # NVIDIA kernel <-> userspace driver config lib
2954 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
2955 +
2956 + # NVIDIA framebuffer capture library
2957 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
2958 +
2959 + # NVIDIA video encode/decode <-> CUDA
2960 + if use kernel_linux; then
2961 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
2962 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
2963 + fi
2964 +
2965 + if use X; then
2966 + # Xorg DDX driver
2967 + insinto /usr/$(get_libdir)/xorg/modules/drivers
2968 + doins ${NV_X11}/nvidia_drv.so
2969 +
2970 + # Xorg GLX driver
2971 + donvidia ${NV_X11}/libglx.so.${NV_SOVER} \
2972 + /usr/$(get_libdir)/opengl/nvidia/extensions
2973 +
2974 + # Xorg nvidia.conf
2975 + if has_version '>=x11-base/xorg-server-1.16'; then
2976 + insinto /usr/share/X11/xorg.conf.d
2977 + newins {,50-}nvidia-drm-outputclass.conf
2978 + fi
2979 + fi
2980 +
2981 + # OpenCL ICD for NVIDIA
2982 + if use kernel_linux; then
2983 + insinto /etc/OpenCL/vendors
2984 + doins ${NV_OBJ}/nvidia.icd
2985 + fi
2986 +
2987 + # Documentation
2988 + dohtml ${NV_DOC}/html/*
2989 + if use kernel_FreeBSD; then
2990 + dodoc "${NV_DOC}/README"
2991 + use X && doman "${NV_MAN}/nvidia-xconfig.1"
2992 + use tools && doman "${NV_MAN}/nvidia-settings.1"
2993 + else
2994 + # Docs
2995 + newdoc "${NV_DOC}/README.txt" README
2996 + dodoc "${NV_DOC}/NVIDIA_Changelog"
2997 + doman "${NV_MAN}/nvidia-smi.1.gz"
2998 + use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
2999 + use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
3000 + doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
3001 + fi
3002 +
3003 + # Helper Apps
3004 + exeinto /opt/bin/
3005 +
3006 + if use X; then
3007 + doexe ${NV_OBJ}/nvidia-xconfig
3008 + fi
3009 +
3010 + if use kernel_linux; then
3011 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
3012 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
3013 + doexe ${NV_OBJ}/nvidia-debugdump
3014 + doexe ${NV_OBJ}/nvidia-persistenced
3015 + doexe ${NV_OBJ}/nvidia-smi
3016 +
3017 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
3018 + doexe ${NV_OBJ}/nvidia-modprobe
3019 + fowners root:video /opt/bin/nvidia-modprobe
3020 + fperms 4710 /opt/bin/nvidia-modprobe
3021 + dosym /{opt,usr}/bin/nvidia-modprobe
3022 +
3023 + doman nvidia-cuda-mps-control.1.gz
3024 + doman nvidia-modprobe.1.gz
3025 + doman nvidia-persistenced.1.gz
3026 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
3027 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
3028 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
3029 + fi
3030 +
3031 + if use tools; then
3032 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
3033 + DESTDIR="${D}" \
3034 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
3035 + LIBDIR="${D}/usr/$(get_libdir)" \
3036 + PREFIX=/usr \
3037 + NV_USE_BUNDLED_LIBJANSSON=0 \
3038 + install
3039 +
3040 + if use static-libs; then
3041 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
3042 +
3043 + insinto /usr/include/NVCtrl
3044 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
3045 + fi
3046 +
3047 + insinto /usr/share/nvidia/
3048 + doins nvidia-application-profiles-${PV}-key-documentation
3049 +
3050 + insinto /etc/nvidia
3051 + newins \
3052 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
3053 +
3054 + # There is no icon in the FreeBSD tarball.
3055 + use kernel_FreeBSD || \
3056 + doicon ${NV_OBJ}/nvidia-settings.png
3057 +
3058 + domenu "${FILESDIR}"/nvidia-settings.desktop
3059 +
3060 + exeinto /etc/X11/xinit/xinitrc.d
3061 + doexe "${FILESDIR}"/95-nvidia-settings
3062 + fi
3063 +
3064 + dobin ${NV_OBJ}/nvidia-bug-report.sh
3065 +
3066 + if has_multilib_profile && use multilib; then
3067 + local OABI=${ABI}
3068 + for ABI in $(get_install_abis); do
3069 + src_install-libs
3070 + done
3071 + ABI=${OABI}
3072 + unset OABI
3073 + else
3074 + src_install-libs
3075 + fi
3076 +
3077 + is_final_abi || die "failed to iterate through all ABIs"
3078 +
3079 + readme.gentoo_create_doc
3080 +}
3081 +
3082 +src_install-libs() {
3083 + local inslibdir=$(get_libdir)
3084 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
3085 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
3086 + local libdir=${NV_OBJ}
3087 +
3088 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
3089 + libdir=${NV_OBJ}/32
3090 + fi
3091 +
3092 + if use X; then
3093 + NV_GLX_LIBRARIES=(
3094 + "libEGL.so.1 ${GL_ROOT}"
3095 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3096 + "libGL.so.1 ${GL_ROOT}"
3097 + "libGLESv1_CM.so.1 ${GL_ROOT}"
3098 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3099 + "libGLESv2.so.2 ${GL_ROOT}"
3100 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3101 + "libGLX.so.0 ${GL_ROOT}"
3102 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3103 + "libGLdispatch.so.0 ${GL_ROOT}"
3104 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
3105 + "libOpenGL.so.0 ${GL_ROOT}"
3106 + "libcuda.so.${NV_SOVER}"
3107 + "libnvcuvid.so.${NV_SOVER}"
3108 + "libnvidia-compiler.so.${NV_SOVER}"
3109 + "libnvidia-eglcore.so.${NV_SOVER}"
3110 + "libnvidia-encode.so.${NV_SOVER}"
3111 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
3112 + "libnvidia-fbc.so.${NV_SOVER}"
3113 + "libnvidia-glcore.so.${NV_SOVER}"
3114 + "libnvidia-glsi.so.${NV_SOVER}"
3115 + "libnvidia-ifr.so.${NV_SOVER}"
3116 + "libnvidia-opencl.so.${NV_SOVER}"
3117 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
3118 + "libvdpau_nvidia.so.${NV_SOVER}"
3119 + )
3120 +
3121 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
3122 + then
3123 + NV_GLX_LIBRARIES+=( "libnvidia-wfb.so.${NV_SOVER}" )
3124 + fi
3125 +
3126 + if use kernel_FreeBSD; then
3127 + NV_GLX_LIBRARIES+=( "libnvidia-tls.so.${NV_SOVER}" )
3128 + fi
3129 +
3130 + if use kernel_linux; then
3131 + NV_GLX_LIBRARIES+=(
3132 + "libnvidia-ml.so.${NV_SOVER}"
3133 + "tls/libnvidia-tls.so.${NV_SOVER}"
3134 + )
3135 + fi
3136 +
3137 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
3138 + donvidia ${libdir}/${NV_LIB}
3139 + done
3140 + fi
3141 +}
3142 +
3143 +pkg_preinst() {
3144 + if use driver && use kernel_linux; then
3145 + linux-mod_pkg_preinst
3146 +
3147 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
3148 + if [ -z "${videogroup}" ]; then
3149 + eerror "Failed to determine the video group gid"
3150 + die "Failed to determine the video group gid"
3151 + else
3152 + sed -i \
3153 + -e "s:PACKAGE:${PF}:g" \
3154 + -e "s:VIDEOGID:${videogroup}:" \
3155 + "${D}"/etc/modprobe.d/nvidia.conf || die
3156 + fi
3157 + fi
3158 +
3159 + # Clean the dynamic libGL stuff's home to ensure
3160 + # we dont have stale libs floating around
3161 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
3162 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
3163 + fi
3164 + # Make sure we nuke the old nvidia-glx's env.d file
3165 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
3166 + rm -f "${ROOT}"/etc/env.d/09nvidia
3167 + fi
3168 +}
3169 +
3170 +pkg_postinst() {
3171 + use driver && use kernel_linux && linux-mod_pkg_postinst
3172 +
3173 + # Switch to the nvidia implementation
3174 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
3175 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
3176 +
3177 + readme.gentoo_print_elog
3178 +
3179 + if ! use X; then
3180 + elog "You have elected to not install the X.org driver. Along with"
3181 + elog "this the OpenGL libraries and VDPAU libraries were not"
3182 + elog "installed. Additionally, once the driver is loaded your card"
3183 + elog "and fan will run at max speed which may not be desirable."
3184 + elog "Use the 'nvidia-smi' init script to have your card and fan"
3185 + elog "speed scale appropriately."
3186 + elog
3187 + fi
3188 + if ! use tools; then
3189 + elog "USE=tools controls whether the nvidia-settings application"
3190 + elog "is installed. If you would like to use it, enable that"
3191 + elog "flag and re-emerge this ebuild. Optionally you can install"
3192 + elog "media-video/nvidia-settings"
3193 + elog
3194 + fi
3195 +}
3196 +
3197 +pkg_prerm() {
3198 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
3199 +}
3200 +
3201 +pkg_postrm() {
3202 + use driver && use kernel_linux && linux-mod_pkg_postrm
3203 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
3204 +}