x11-drivers/nvidia-drivers: Add sub-SLOTS for all branches (bug #560486). Use the...
authorJeroen Roovers <jer@gentoo.org>
Wed, 23 Sep 2015 05:43:24 +0000 (07:43 +0200)
committerJeroen Roovers <jer@gentoo.org>
Wed, 23 Sep 2015 05:45:30 +0000 (07:45 +0200)
Package-Manager: portage-2.2.20.1

x11-drivers/nvidia-drivers/metadata.xml
x11-drivers/nvidia-drivers/nvidia-drivers-173.14.39-r1.ebuild [new file with mode: 0644]
x11-drivers/nvidia-drivers/nvidia-drivers-304.128-r1.ebuild [new file with mode: 0644]
x11-drivers/nvidia-drivers/nvidia-drivers-340.93-r1.ebuild [new file with mode: 0644]
x11-drivers/nvidia-drivers/nvidia-drivers-346.96-r1.ebuild [new file with mode: 0644]
x11-drivers/nvidia-drivers/nvidia-drivers-352.41-r1.ebuild [new file with mode: 0644]
x11-drivers/nvidia-drivers/nvidia-drivers-355.11-r2.ebuild [new file with mode: 0644]
x11-drivers/nvidia-drivers/nvidia-drivers-96.43.23-r1.ebuild [new file with mode: 0644]

index d4fc775067990496259b413ee45afcecdbb4ede2..f65392ec0c40e5cb19c84330eccc9cef4dc7efbb 100644 (file)
@@ -4,6 +4,12 @@
 <maintainer>
   <email>jer@gentoo.org</email>
 </maintainer>
+<longdescription>
+Nvidia provides different branches of its drivers for different batches of its
+hardware. When maintaining these ebuilds or other ebuilds depending on them,
+you will need to keep in mind that the major versions represent these different
+branches.
+</longdescription>
 <use>
        <flag name='X'>Install the X.org driver, OpenGL libraries, XvMC libraries, and VDPAU libraries</flag>
        <flag name='gtk2'>Install nvidia-settings with support for GTK+ 2</flag>
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-173.14.39-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-173.14.39-r1.ebuild
new file mode 100644 (file)
index 0000000..5f5b3bd
--- /dev/null
@@ -0,0 +1,546 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils flag-o-matic linux-mod multilib nvidia-driver portability \
+       unpacker user versionator
+
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="x86? ( http://us.download.nvidia.com/XFree86/Linux-x86/${PV}/${X86_NV_PACKAGE}-pkg0.run )
+        amd64? ( http://us.download.nvidia.com/XFree86/Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}-pkg2.run )
+        x86-fbsd? ( http://us.download.nvidia.com/freebsd/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )"
+
+LICENSE="GPL-2 NVIDIA-r1"
+SLOT="0/173"
+KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
+IUSE="acpi multilib kernel_linux tools"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+COMMON="
+       >=app-eselect/eselect-opengl-1.0.9
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+"
+DEPEND="
+       ${COMMON}
+       kernel_linux? ( virtual/linux-sources )
+"
+RDEPEND="
+       ${COMMON}
+       <x11-base/xorg-server-1.15.99:=
+       acpi? ( sys-power/acpid )
+       multilib? (
+               >=x11-libs/libX11-1.6.2[abi_x86_32]
+               >=x11-libs/libXext-1.3.2[abi_x86_32]
+       )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               x11-libs/gtk+:2
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+       )
+"
+
+QA_TEXTRELS_x86="usr/lib/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+       usr/lib/libcuda.so.${PV}
+       usr/lib/libnvidia-cfg.so.${PV}
+       usr/lib/libvdpau_nvidia.so.${PV}
+       usr/lib/libXvMCNVIDIA.so.${PV}"
+
+QA_TEXTRELS_x86_fbsd="boot/modules/nvidia.ko
+       usr/lib/opengl/nvidia/lib/libGL.so.1
+       usr/lib/opengl/nvidia/lib/libGLcore.so.1
+       usr/lib/libnvidia-cfg.so.1
+       usr/lib/opengl/nvidia/extensions/libglx.so.1
+       usr/lib/xorg/modules/drivers/nvidia_drv.so"
+
+QA_TEXTRELS_amd64="usr/lib32/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib32/libcuda.so.${PV}
+       usr/lib32/libvdpau_nvidia.so.${PV}"
+
+QA_EXECSTACK_x86="usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+       usr/lib/libXvMCNVIDIA.a:NVXVMC.o"
+
+QA_EXECSTACK_amd64="usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/libnvcompiler.so.${PV}
+       usr/lib64/libXvMCNVIDIA.so.${PV}
+       usr/lib64/libXvMCNVIDIA.a:NVXVMC.o
+       usr/lib64/libnvidia-cfg.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib64/xorg/modules/drivers/nvidia_drv.so
+       opt/bin/nvidia-settings
+       opt/bin/nvidia-smi
+       opt/bin/nvidia-xconfig"
+
+QA_WX_LOAD_x86="usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/libXvMCNVIDIA.a"
+
+QA_WX_LOAD_amd64="usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/extensions/libglx.so.${PV}"
+
+QA_SONAME_amd64="usr/lib64/libnvcompiler.so.${PV}"
+
+QA_FLAGS_IGNORED_amd64="usr/lib32/libcuda.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib32/libvdpau_nvidia.so.${PV}
+       usr/lib64/libXvMCNVIDIA.so.${PV}
+       usr/lib64/libcuda.so.${PV}
+       usr/lib64/libnvidia-cfg.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib64/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib64/xorg/modules/drivers/nvidia_drv.so
+       usr/lib64/libvdpau_nvidia.so.${PV}
+       opt/bin/nvidia-settings
+       opt/bin/nvidia-smi
+       opt/bin/nvidia-xconfig"
+
+QA_FLAGS_IGNORED_x86="usr/lib/libcuda.so.${PV}
+       usr/lib/libnvidia-cfg.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+       usr/lib/libXvMCNVIDIA.so.${PV}
+       usr/lib/libvdpau_nvidia.so.${PV}
+       opt/bin/nvidia-settings
+       opt/bin/nvidia-smi
+       opt/bin/nvidia-xconfig"
+
+S="${WORKDIR}/"
+
+mtrr_check() {
+       ebegin "Checking for MTRR support"
+       linux_chkconfig_present MTRR
+       eend $?
+
+       if [[ $? -ne 0 ]] ; then
+               eerror "Please enable MTRR support in your kernel config, found at:"
+               eerror
+               eerror "  Processor type and features"
+               eerror "    [*] MTRR (Memory Type Range Register) support"
+               eerror
+               eerror "and recompile your kernel ..."
+               die "MTRR support not detected!"
+       fi
+}
+
+lockdep_check() {
+       if linux_chkconfig_present LOCKDEP; then
+               eerror "You've enabled LOCKDEP -- lock tracking -- in the kernel."
+               eerror "Unfortunately, this option exports the symbol 'lockdep_init_map' as GPL-only"
+               eerror "which will prevent ${P} from compiling."
+               eerror "Please make sure the following options have been unset:"
+               eerror "    Kernel hacking  --->"
+               eerror "        [ ] Lock debugging: detect incorrect freeing of live locks"
+               eerror "        [ ] Lock debugging: prove locking correctness"
+               eerror "        [ ] Lock usage statistics"
+               eerror "in 'menuconfig'"
+               die "LOCKDEP enabled"
+       fi
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use amd64 && has_multilib_profile && [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default abi."
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux; then
+               linux-mod_pkg_setup
+               MODULE_NAMES="nvidia(video:${S}/usr/src/nv)"
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
+               # linux-mod_src_compile calls set_arch_to_kernel, which
+               # sets the ARCH to x86 but NVIDIA's wrapping Makefile
+               # expects x86_64 or i386 and then converts it to x86
+               # later on in the build process
+               BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
+               mtrr_check
+               lockdep_check
+       fi
+
+       # On BSD userland it wants real make command
+       use userland_BSD && MAKE="$(get_bmake)"
+
+       export _POSIX2_VERSION="199209"
+
+       if use kernel_linux && kernel_is ge 3 13 ; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-3.13"
+               ewarn "<sys-kernel/vanilla-sources-3.13"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_EXEC="${S}/obj"
+               NV_LIB="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_X11_DRV="${NV_X11}"
+               NV_X11_EXT="${NV_X11}"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}/usr/share/doc"
+               NV_EXEC="${S}/usr/bin"
+               NV_LIB="${S}/usr/lib"
+               NV_SRC="${S}/usr/src/nv"
+               NV_MAN="${S}/usr/share/man/man1"
+               NV_X11="${S}/usr/X11R6/lib"
+               NV_X11_DRV="${NV_X11}/modules/drivers"
+               NV_X11_EXT="${NV_X11}/modules/extensions"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_unpack() {
+       if use kernel_linux && kernel_is lt 2 6 7; then
+               echo
+               ewarn "Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
+               ewarn "This is not officially supported for ${P}. It is likely you"
+               ewarn "will not be able to compile or use the kernel module."
+               ewarn "It is recommended that you upgrade your kernel to a version >= 2.6.7"
+               echo
+               ewarn "DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."
+       fi
+
+       if ! use x86-fbsd; then
+               mkdir "${S}"
+               cd "${S}"
+               unpack_makeself
+       else
+               unpack ${A}
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+       use x86-fbsd && cd doc
+
+       # Use the correct defines to make gtkglext build work
+       epatch "${FILESDIR}"/NVIDIA_glx-defines.patch
+       # Use some more sensible gl headers and make way for new glext.h
+       epatch "${FILESDIR}"/NVIDIA_glx-glheader.patch
+
+       if use kernel_linux; then
+               # Quiet down warnings the user does not need to see
+               sed -i \
+                       -e 's:-Wpointer-arith::g' \
+                       -e 's:-Wsign-compare::g' \
+                       "${NV_SRC}"/Makefile.kbuild
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+               convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+
+       epatch_user
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use x86-fbsd; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)"
+       elif use kernel_linux; then
+               linux-mod_src_compile
+       fi
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               # Add the aliases
+               # This file is tweaked with the appropriate video group in
+               # pkg_preinst, see bug #491414
+               insinto /etc/modprobe.d
+               newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
+       elif use kernel_FreeBSD; then
+               insinto /boot/modules
+               doins "${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld"
+
+               exeinto /boot/modules
+               doexe "${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       dolib.so ${NV_LIB}/libnvidia-cfg.so.${NV_SOVER} || \
+               die "failed to install libnvidia-cfg"
+       dosym libnvidia-cfg.so.${NV_SOVER} \
+               /usr/$(get_libdir)/libnvidia-cfg.so.1 || \
+               die "failed to create libnvidia-cfg.so.1 symlink"
+       dosym libnvidia-cfg.so.1 \
+               /usr/$(get_libdir)/libnvidia-cfg.so || \
+               die "failed to create libnvidia-cfg.so symlink"
+
+       # Xorg DDX driver
+       insinto /usr/$(get_libdir)/xorg/modules/drivers
+       doins ${NV_X11_DRV}/nvidia_drv.so
+
+       # Xorg GLX driver
+       insinto /usr/$(get_libdir)/opengl/nvidia/extensions
+       doins ${NV_X11_EXT}/libglx.so.${NV_SOVER} || \
+               die "failed to install libglx.so"
+       dosym /usr/$(get_libdir)/opengl/nvidia/extensions/libglx.so.${NV_SOVER} \
+               /usr/$(get_libdir)/opengl/nvidia/extensions/libglx.so || \
+               die "failed to create libglx.so symlink"
+
+       # XvMC driver
+       dolib.a ${NV_X11}/libXvMCNVIDIA.a || \
+               die "failed to install libXvMCNVIDIA.so"
+       dolib.so ${NV_X11}/libXvMCNVIDIA.so.${NV_SOVER} || \
+               die "failed to install libXvMCNVIDIA.so"
+       dosym libXvMCNVIDIA.so.${NV_SOVER} \
+               /usr/$(get_libdir)/libXvMCNVIDIA.so.1 || \
+               die "failed to create libXvMCNVIDIA.so.1 symlink"
+       dosym libXvMCNVIDIA.so.1 \
+               /usr/$(get_libdir)/libXvMCNVIDIA.so || \
+               die "failed to create libXvMCNVIDIA.so symlink"
+       dosym libXvMCNVIDIA.so.${NV_SOVER} \
+               /usr/$(get_libdir)/libXvMCNVIDIA_dynamic.so.1 || \
+               die "failed to create libXvMCNVIDIA_dynamic.so.1 symlink"
+
+       # CUDA headers (driver to come)
+       if use kernel_linux && [[ -d ${S}/usr/include/cuda ]]; then
+               dodir /usr/include/cuda
+               insinto /usr/include/cuda
+               doins usr/include/cuda/*.h
+       fi
+
+       # OpenCL headers (driver to come)
+       if [[ -d ${S}/usr/include/CL ]]; then
+               dodir /usr/include/CL
+               insinto /usr/include/CL
+               doins usr/include/CL/*.h
+       fi
+
+       # Documentation
+       dodoc ${NV_DOC}/XF86Config.sample
+       dohtml ${NV_DOC}/html/*
+       if use x86-fbsd; then
+               dodoc "${NV_DOC}/README"
+               doman "${NV_MAN}/nvidia-xconfig.1"
+               doman "${NV_MAN}/nvidia-settings.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+               doman "${NV_MAN}/nvidia-xconfig.1.gz"
+               doman "${NV_MAN}/nvidia-settings.1.gz"
+       fi
+
+       # Helper Apps
+       exeinto /opt/bin/
+       doexe ${NV_EXEC}/nvidia-xconfig
+       doexe ${NV_EXEC}/nvidia-bug-report.sh
+       if use tools; then
+               doexe usr/bin/nvidia-settings
+       fi
+       if use kernel_linux; then
+               doexe ${NV_EXEC}/nvidia-smi
+       fi
+
+       # Desktop entry for nvidia-settings
+       if use tools && use kernel_linux; then
+               sed -e 's:__UTILS_PATH__:/opt/bin:' \
+                       -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' \
+                       -e '/^Categories/s|Application;||g' \
+                       -i "${S}"/usr/share/applications//nvidia-settings.desktop
+               newmenu "${S}"/usr/share/applications/nvidia-settings.desktop \
+                       nvidia-settings-opt.desktop
+       fi
+
+       if has_multilib_profile ; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis) ; do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+# Install nvidia library:
+# the first parameter is the place where to install it
+# the second parameter is the base name of the library
+# the third parameter is the provided soversion
+donvidia() {
+       dodir $1
+       exeinto $1
+
+       libname=$(basename $2)
+
+       doexe $2.$3
+       dosym ${libname}.$3 $1/${libname}
+       [[ $3 != "1" ]] && dosym ${libname}.$3 $1/${libname}.1
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local NV_ROOT="/usr/${inslibdir}/opengl/nvidia"
+       local libdir= sover=
+
+       if use kernel_linux; then
+               if has_multilib_profile && [[ ${ABI} == "x86" ]] ; then
+                       libdir=usr/lib32
+               else
+                       libdir=usr/lib
+               fi
+               sover=${PV}
+       else
+               libdir=obj
+               # on FreeBSD it has just .1 suffix
+               sover=1
+       fi
+
+       # The GLX libraries
+       donvidia ${NV_ROOT}/lib ${libdir}/libGL.so ${sover}
+       donvidia ${NV_ROOT}/lib ${libdir}/libGLcore.so ${sover}
+       if use x86-fbsd; then
+               donvidia ${NV_ROOT}/lib ${libdir}/libnvidia-tls.so ${sover}
+       else
+               donvidia ${NV_ROOT}/lib ${libdir}/tls/libnvidia-tls.so ${sover}
+       fi
+
+       #cuda
+       if [[ -f ${libdir}/libcuda.so.${sover} ]]; then
+               dolib.so ${libdir}/libcuda.so.${sover}
+               [[ "${sover}" != "1" ]] && dosym libcuda.so.${sover} /usr/${inslibdir}/libcuda.so.1
+               dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
+       fi
+
+       #vdpau
+       if [[ -f ${libdir}/libvdpau_nvidia.so.${sover} ]]; then
+               dolib.so ${libdir}/libvdpau_nvidia.so.${sover}
+               dosym libvdpau_nvidia.so.${sover} /usr/${inslibdir}/libvdpau_nvidia.so
+       fi
+
+       # OpenCL
+       # NOTE: This isn't currently available in the publicly released drivers.
+       if [[ -f ${libdir}/libOpenCL.so.1.0.0 ]]; then
+
+               dolib.so ${libdir}/libnvcompiler.so.${sover}
+               [[ "${sover}" != "1" ]] && dosym libnvcompiler.so.${sover} /usr/${inslibdir}/libnvcompiler.so.1
+               dosym libnvcompiler.so.1 /usr/${inslibdir}/libnvcompiler.so
+
+               dolib.so ${libdir}/libOpenCL.so.1.0.0
+               dosym libOpenCL.so.1.0.0 /usr/${inslibdir}/libOpenCL.so.1
+               dosym libOpenCL.so.1 /usr/${inslibdir}/libOpenCL.so
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_preinst
+
+               local videogroup="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "${videogroup}" ]; then
+                       eerror "Failed to determine the video group gid"
+                       die "Failed to determine the video group gid"
+               else
+                       sed -i \
+                               -e "s:PACKAGE:${PF}:g" \
+                               -e "s:VIDEOGID:${videogroup}:" \
+                               "${D}"/etc/modprobe.d/nvidia.conf || die
+               fi
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       use kernel_linux && linux-mod_pkg_postinst
+
+       # Switch to the nvidia implementation
+       "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
+
+       readme.gentoo_print_elog
+
+       if ! use tools; then
+               elog "USE=tools controls whether the nvidia-settings application"
+               elog "is installed. If you would like to use it, enable that"
+               elog "flag and re-emerge this ebuild. Optionally you can install"
+               elog "media-video/nvidia-settings"
+       fi
+}
+
+pkg_prerm() {
+       "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
+
+pkg_postrm() {
+       use kernel_linux && linux-mod_pkg_postrm
+       "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-304.128-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-304.128-r1.ebuild
new file mode 100644 (file)
index 0000000..84076d5
--- /dev/null
@@ -0,0 +1,457 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
+       portability toolchain-funcs unpacker user versionator udev
+
+NV_URI="http://us.download.nvidia.com/XFree86/"
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="
+       amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
+       amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
+       x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
+       x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
+"
+
+LICENSE="GPL-2 NVIDIA-r1"
+SLOT="0/304"
+KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools +X"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+COMMON="app-eselect/eselect-opencl
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+       X? (
+               >=app-eselect/eselect-opengl-1.0.9
+       )"
+DEPEND="${COMMON}
+       kernel_linux? (
+               virtual/linux-sources
+               virtual/pkgconfig
+       )"
+RDEPEND="${COMMON}
+       acpi? ( sys-power/acpid )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               x11-libs/gtk+:2
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+               x11-libs/pangox-compat
+       )
+       X? (
+               <x11-base/xorg-server-1.17.99:=
+               x11-libs/libXvMC
+               multilib? (
+                       >=x11-libs/libX11-1.6.2[abi_x86_32]
+                       >=x11-libs/libXext-1.3.2[abi_x86_32]
+               )
+       )
+"
+PDEPEND="X? ( >=x11-libs/libvdpau-0.3-r1 )"
+
+REQUIRED_USE="tools? ( X )"
+
+QA_PREBUILT="opt/* usr/lib*"
+
+S=${WORKDIR}/
+
+pkg_pretend() {
+
+       if use amd64 && has_multilib_profile && \
+               [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default ABI"
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux && kernel_is ge 4 3; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-4.3"
+               ewarn "<sys-kernel/vanilla-sources-4.3"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # Kernel features/options to check for
+       CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
+       use x86 && CONFIG_CHECK+=" ~HIGHMEM"
+
+       # Now do the above checks
+       use kernel_linux && check_extra_config
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use kernel_linux; then
+               linux-mod_pkg_setup
+               MODULE_NAMES="nvidia(video:${S}/kernel)"
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
+               # linux-mod_src_compile calls set_arch_to_kernel, which
+               # sets the ARCH to x86 but NVIDIA's wrapping Makefile
+               # expects x86_64 or i386 and then converts it to x86
+               # later on in the build process
+               BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
+       fi
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd   && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_OBJ="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}"
+               NV_OBJ="${S}"
+               NV_SRC="${S}/kernel"
+               NV_MAN="${S}"
+               NV_X11="${S}"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_unpack() {
+       if ! use kernel_FreeBSD; then
+               cd "${S}"
+               unpack_makeself
+       else
+               unpack ${A}
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+
+       if use kernel_linux; then
+               if kernel_is lt 2 6 9 ; then
+                       eerror "You must build this against 2.6.9 or higher kernels."
+               fi
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+               convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+
+       if use pax_kernel; then
+               ewarn "Using PAX patches is not supported. You will be asked to"
+               ewarn "use a standard kernel should you have issues. Should you"
+               ewarn "need support with these patches, contact the PaX team."
+               epatch "${FILESDIR}"/${PN}-pax-const.patch
+               epatch "${FILESDIR}"/${PN}-pax-usercopy.patch
+       fi
+
+       cat <<- EOF > "${S}"/nvidia.icd
+               /usr/$(get_libdir)/libnvidia-opencl.so
+       EOF
+
+       # Allow user patches so they can support RC kernels and whatever else
+       epatch_user
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use kernel_FreeBSD; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
+       elif use kernel_linux; then
+               MAKEOPTS=-j1 linux-mod_src_compile
+       fi
+}
+
+# Install nvidia library:
+# the first parameter is the library to install
+# the second parameter is the provided soversion
+# the third parameter is the target directory if its not /usr/lib
+donvidia() {
+       # Full path to library minus SOVER
+       MY_LIB="$1"
+
+       # SOVER to use
+       MY_SOVER="$2"
+
+       # Where to install
+       MY_DEST="$3"
+
+       if [[ -z "${MY_DEST}" ]]; then
+               MY_DEST="/usr/$(get_libdir)"
+               action="dolib.so"
+       else
+               exeinto ${MY_DEST}
+               action="doexe"
+       fi
+
+       # Get just the library name
+       libname=$(basename $1)
+
+       # Install the library with the correct SOVER
+       ${action} ${MY_LIB}.${MY_SOVER} || \
+               die "failed to install ${libname}"
+
+       # If SOVER wasn't 1, then we need to create a .1 symlink
+       if [[ "${MY_SOVER}" != "1" ]]; then
+               dosym ${libname}.${MY_SOVER} \
+                       ${MY_DEST}/${libname}.1 || \
+                       die "failed to create ${libname} symlink"
+       fi
+
+       # Always create the symlink from the raw lib to the .1
+       dosym ${libname}.1 \
+               ${MY_DEST}/${libname} || \
+               die "failed to create ${libname} symlink"
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               # Add the aliases
+               # This file is tweaked with the appropriate video group in
+               # pkg_preinst, see bug #491414
+               insinto /etc/modprobe.d
+               newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
+
+               # Ensures that our device nodes are created when not using X
+               exeinto "$(get_udevdir)"
+               newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
+               udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
+       elif use kernel_FreeBSD; then
+               if use x86-fbsd; then
+                       insinto /boot/modules
+                       doins "${S}/src/nvidia.kld"
+               fi
+
+               exeinto /boot/modules
+               doexe "${S}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
+
+       if use kernel_linux; then
+               # NVIDIA video decode <-> CUDA
+               donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
+       fi
+
+       if use X; then
+               # Xorg DDX driver
+               insinto /usr/$(get_libdir)/xorg/modules/drivers
+               doins ${NV_X11}/nvidia_drv.so
+
+               # Xorg GLX driver
+               donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
+                       /usr/$(get_libdir)/opengl/nvidia/extensions
+
+               # XvMC driver
+               dolib.a ${NV_X11}/libXvMCNVIDIA.a || \
+                       die "failed to install libXvMCNVIDIA.so"
+               donvidia ${NV_X11}/libXvMCNVIDIA.so ${NV_SOVER}
+               dosym libXvMCNVIDIA.so.${NV_SOVER} \
+                       /usr/$(get_libdir)/libXvMCNVIDIA_dynamic.so.1 || \
+                       die "failed to create libXvMCNVIDIA_dynamic.so symlink"
+       fi
+
+       # OpenCL ICD for NVIDIA
+       if use kernel_linux; then
+               insinto /etc/OpenCL/vendors
+               doins nvidia.icd
+               donvidia ${NV_OBJ}/libnvidia-opencl.so ${NV_SOVER}
+       fi
+
+       # Documentation
+       dohtml ${NV_DOC}/html/*
+       if use kernel_FreeBSD; then
+               dodoc "${NV_DOC}/README"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1"
+               use tools && doman "${NV_MAN}/nvidia-settings.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+               doman "${NV_MAN}/nvidia-smi.1.gz"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
+               use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
+               doman "${NV_MAN}/nvidia-cuda-proxy-control.1.gz"
+       fi
+
+       # Helper Apps
+       exeinto /opt/bin/
+
+       if use X; then
+               doexe ${NV_OBJ}/nvidia-xconfig
+       fi
+
+       if use kernel_linux ; then
+               doexe ${NV_OBJ}/nvidia-debugdump
+               doexe ${NV_OBJ}/nvidia-cuda-proxy-control
+               doexe ${NV_OBJ}/nvidia-cuda-proxy-server
+               doexe ${NV_OBJ}/nvidia-smi
+               newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
+       fi
+
+       if use tools; then
+               doexe ${NV_OBJ}/nvidia-settings
+       fi
+
+       dobin ${NV_OBJ}/nvidia-bug-report.sh
+
+       # Desktop entries for nvidia-settings
+       if use tools ; then
+               # There is no icon in the FreeBSD tarball.
+               use kernel_FreeBSD || newicon ${NV_OBJ}/nvidia-settings.png ${PN}-settings.png
+               domenu "${FILESDIR}"/${PN}-settings.desktop
+               exeinto /etc/X11/xinit/xinitrc.d
+               doexe "${FILESDIR}"/95-nvidia-settings
+       fi
+
+       #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
+
+       if has_multilib_profile && use multilib ; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis) ; do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
+       local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
+       local libdir=${NV_OBJ}
+
+       if use kernel_linux && has_multilib_profile && \
+                       [[ ${ABI} == "x86" ]] ; then
+               libdir=${NV_OBJ}/32
+       fi
+
+       if use X; then
+               # The GLX libraries
+               donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
+               if use kernel_FreeBSD; then
+                       donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER} ${GL_ROOT}
+               else
+                       donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER} ${GL_ROOT}
+               fi
+
+               # VDPAU
+               donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
+       fi
+
+       # NVIDIA monitoring library
+       if use kernel_linux ; then
+               donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
+       fi
+
+       # CUDA & OpenCL
+       if use kernel_linux; then
+               donvidia ${libdir}/libcuda.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
+               donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_preinst
+
+               local videogroup="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "${videogroup}" ]; then
+                       eerror "Failed to determine the video group gid"
+                       die "Failed to determine the video group gid"
+               else
+                       sed -i \
+                               -e "s:PACKAGE:${PF}:g" \
+                               -e "s:VIDEOGID:${videogroup}:" \
+                               "${D}"/etc/modprobe.d/nvidia.conf || die
+               fi
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       use kernel_linux && linux-mod_pkg_postinst
+
+       # Switch to the nvidia implementation
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
+       "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
+
+       readme.gentoo_print_elog
+
+       if ! use X; then
+               elog "You have elected to not install the X.org driver. Along with"
+               elog "this the OpenGL libraries, XvMC, and VDPAU libraries were not"
+               elog "installed. Additionally, once the driver is loaded your card"
+               elog "and fan will run at max speed which may not be desirable."
+               elog "Use the 'nvidia-smi' init script to have your card and fan"
+               elog "speed scale appropriately."
+               elog
+       fi
+       if ! use tools; then
+               elog "USE=tools controls whether the nvidia-settings application"
+               elog "is installed. If you would like to use it, enable that"
+               elog "flag and re-emerge this ebuild. Optionally you can install"
+               elog "media-video/nvidia-settings"
+               elog
+       fi
+}
+
+pkg_prerm() {
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
+
+pkg_postrm() {
+       use kernel_linux && linux-mod_pkg_postrm
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-340.93-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-340.93-r1.ebuild
new file mode 100644 (file)
index 0000000..e2be11a
--- /dev/null
@@ -0,0 +1,479 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
+       portability toolchain-funcs unpacker user udev
+
+NV_URI="http://us.download.nvidia.com/XFree86/"
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="
+       amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
+       amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
+       x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
+       x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
+"
+
+LICENSE="GPL-2 NVIDIA-r2"
+SLOT="0/340"
+KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools +X uvm"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+COMMON="
+       app-eselect/eselect-opencl
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+       X? (
+               >=app-eselect/eselect-opengl-1.0.9
+       )
+"
+DEPEND="
+       ${COMMON}
+       app-arch/xz-utils
+       kernel_linux? ( virtual/linux-sources )
+"
+RDEPEND="
+       ${COMMON}
+       acpi? ( sys-power/acpid )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               >=x11-libs/gtk+-2.4:2
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+       )
+       X? (
+               <x11-base/xorg-server-1.17.99:=
+               >=x11-libs/libvdpau-0.3-r1
+               multilib? (
+                       >=x11-libs/libX11-1.6.2[abi_x86_32]
+                       >=x11-libs/libXext-1.3.2[abi_x86_32]
+               )
+       )
+"
+
+REQUIRED_USE="tools? ( X )"
+
+QA_PREBUILT="opt/* usr/lib*"
+
+S=${WORKDIR}/
+
+pkg_pretend() {
+
+       if use amd64 && has_multilib_profile && \
+               [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default ABI"
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux && kernel_is ge 4 3; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-4.3"
+               ewarn "<sys-kernel/vanilla-sources-4.3"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # Kernel features/options to check for
+       CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
+       use x86 && CONFIG_CHECK+=" ~HIGHMEM"
+
+       # Now do the above checks
+       use kernel_linux && check_extra_config
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use kernel_linux; then
+               MODULE_NAMES="nvidia(video:${S}/kernel)"
+               use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel/uvm)"
+
+               # This needs to run after MODULE_NAMES (so that the eclass checks
+               # whether the kernel supports loadable modules) but before BUILD_PARAMS
+               # is set (so that KV_DIR is populated).
+               linux-mod_pkg_setup
+
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
+
+               # linux-mod_src_compile calls set_arch_to_kernel, which
+               # sets the ARCH to x86 but NVIDIA's wrapping Makefile
+               # expects x86_64 or i386 and then converts it to x86
+               # later on in the build process
+               BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
+       fi
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd   && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_OBJ="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}"
+               NV_OBJ="${S}"
+               NV_SRC="${S}/kernel"
+               NV_MAN="${S}"
+               NV_X11="${S}"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+
+       if use kernel_linux; then
+               if kernel_is lt 2 6 9 ; then
+                       eerror "You must build this against 2.6.9 or higher kernels."
+               fi
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+#              convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+
+       if use pax_kernel; then
+               ewarn "Using PAX patches is not supported. You will be asked to"
+               ewarn "use a standard kernel should you have issues. Should you"
+               ewarn "need support with these patches, contact the PaX team."
+               epatch "${FILESDIR}"/${PN}-331.13-pax-usercopy.patch
+               epatch "${FILESDIR}"/${PN}-337.12-pax-constify.patch
+       fi
+
+       # Allow user patches so they can support RC kernels and whatever else
+       epatch_user
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use kernel_FreeBSD; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
+       elif use kernel_linux; then
+               use uvm && MAKEOPTS=-j1
+               linux-mod_src_compile
+       fi
+}
+
+# Install nvidia library:
+# the first parameter is the library to install
+# the second parameter is the provided soversion
+# the third parameter is the target directory if its not /usr/lib
+donvidia() {
+       # Full path to library minus SOVER
+       MY_LIB="$1"
+
+       # SOVER to use
+       MY_SOVER="$2"
+
+       # Where to install
+       MY_DEST="$3"
+
+       if [[ -z "${MY_DEST}" ]]; then
+               MY_DEST="/usr/$(get_libdir)"
+               action="dolib.so"
+       else
+               exeinto ${MY_DEST}
+               action="doexe"
+       fi
+
+       # Get just the library name
+       libname=$(basename $1)
+
+       # Install the library with the correct SOVER
+       ${action} ${MY_LIB}.${MY_SOVER} || \
+               die "failed to install ${libname}"
+
+       # If SOVER wasn't 1, then we need to create a .1 symlink
+       if [[ "${MY_SOVER}" != "1" ]]; then
+               dosym ${libname}.${MY_SOVER} \
+                       ${MY_DEST}/${libname}.1 || \
+                       die "failed to create ${libname} symlink"
+       fi
+
+       # Always create the symlink from the raw lib to the .1
+       dosym ${libname}.1 \
+               ${MY_DEST}/${libname} || \
+               die "failed to create ${libname} symlink"
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               # Add the aliases
+               # This file is tweaked with the appropriate video group in
+               # pkg_preinst, see bug #491414
+               insinto /etc/modprobe.d
+               newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
+               use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
+
+               # Ensures that our device nodes are created when not using X
+               exeinto "$(get_udevdir)"
+               newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
+               udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
+       elif use kernel_FreeBSD; then
+               if use x86-fbsd; then
+                       insinto /boot/modules
+                       doins "${S}/src/nvidia.kld"
+               fi
+
+               exeinto /boot/modules
+               doexe "${S}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
+
+       # NVIDIA framebuffer capture library
+       donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
+
+       # NVIDIA video encode/decode <-> CUDA
+       if use kernel_linux; then
+               donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
+               donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
+       fi
+
+       if use X; then
+               # Xorg DDX driver
+               insinto /usr/$(get_libdir)/xorg/modules/drivers
+               doins ${NV_X11}/nvidia_drv.so
+
+               # Xorg GLX driver
+               donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
+                       /usr/$(get_libdir)/opengl/nvidia/extensions
+       fi
+
+       # OpenCL ICD for NVIDIA
+       if use kernel_linux; then
+               insinto /etc/OpenCL/vendors
+               doins ${NV_OBJ}/nvidia.icd
+       fi
+
+       # Documentation
+       dohtml ${NV_DOC}/html/*
+       if use kernel_FreeBSD; then
+               dodoc "${NV_DOC}/README"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1"
+               use tools && doman "${NV_MAN}/nvidia-settings.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+               doman "${NV_MAN}/nvidia-smi.1.gz"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
+               use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
+               doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
+       fi
+
+       # Helper Apps
+       exeinto /opt/bin/
+
+       if use X; then
+               doexe ${NV_OBJ}/nvidia-xconfig
+       fi
+
+       if use kernel_linux ; then
+               doexe ${NV_OBJ}/nvidia-cuda-mps-control
+               doexe ${NV_OBJ}/nvidia-cuda-mps-server
+               doexe ${NV_OBJ}/nvidia-debugdump
+               doexe ${NV_OBJ}/nvidia-persistenced
+               doexe ${NV_OBJ}/nvidia-smi
+
+               # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
+               doexe ${NV_OBJ}/nvidia-modprobe
+               fowners root:video /opt/bin/nvidia-modprobe
+               fperms 4710 /opt/bin/nvidia-modprobe
+               dosym /{opt,usr}/bin/nvidia-modprobe
+
+               doman nvidia-cuda-mps-control.1.gz
+               doman nvidia-modprobe.1.gz
+               doman nvidia-persistenced.1.gz
+               newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
+               newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
+               newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
+       fi
+
+       if use tools; then
+               doexe ${NV_OBJ}/nvidia-settings
+               insinto /usr/share/nvidia/
+               doins nvidia-application-profiles-${PV}-key-documentation
+               insinto /etc/nvidia
+               newins nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
+       fi
+
+       dobin ${NV_OBJ}/nvidia-bug-report.sh
+
+       # Desktop entries for nvidia-settings
+       if use tools ; then
+               # There is no icon in the FreeBSD tarball.
+               use kernel_FreeBSD || newicon ${NV_OBJ}/nvidia-settings.png ${PN}-settings.png
+               domenu "${FILESDIR}"/${PN}-settings.desktop
+               exeinto /etc/X11/xinit/xinitrc.d
+               doexe "${FILESDIR}"/95-nvidia-settings
+       fi
+
+       #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
+
+       if has_multilib_profile && use multilib ; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis) ; do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
+       local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
+       local libdir=${NV_OBJ}
+
+       if use kernel_linux && has_multilib_profile && \
+                       [[ ${ABI} == "x86" ]] ; then
+               libdir=${NV_OBJ}/32
+       fi
+
+       if use X; then
+               # The GLX libraries
+               donvidia ${libdir}/libEGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libnvidia-eglcore.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-glsi.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-ifr.so ${NV_SOVER}
+               if use kernel_FreeBSD; then
+                       donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER}
+               else
+                       donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}
+               fi
+
+               # VDPAU
+               donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
+
+               # GLES v2 libraries
+               insinto ${GL_ROOT}
+               doexe ${libdir}/libGLESv2.so.${PV}
+               dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
+               dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
+       fi
+
+       # NVIDIA monitoring library
+       if use kernel_linux ; then
+               donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
+       fi
+
+       # CUDA & OpenCL
+       if use kernel_linux; then
+               donvidia ${libdir}/libcuda.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
+               donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
+               donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_preinst
+
+               local videogroup="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "${videogroup}" ]; then
+                       eerror "Failed to determine the video group gid"
+                       die "Failed to determine the video group gid"
+               else
+                       sed -i \
+                               -e "s:PACKAGE:${PF}:g" \
+                               -e "s:VIDEOGID:${videogroup}:" \
+                               "${D}"/etc/modprobe.d/nvidia.conf || die
+               fi
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       use kernel_linux && linux-mod_pkg_postinst
+
+       # Switch to the nvidia implementation
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
+       "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
+
+       readme.gentoo_print_elog
+
+       if ! use X; then
+               elog "You have elected to not install the X.org driver. Along with"
+               elog "this the OpenGL libraries and VDPAU libraries were not"
+               elog "installed. Additionally, once the driver is loaded your card"
+               elog "and fan will run at max speed which may not be desirable."
+               elog "Use the 'nvidia-smi' init script to have your card and fan"
+               elog "speed scale appropriately."
+               elog
+       fi
+       if ! use tools; then
+               elog "USE=tools controls whether the nvidia-settings application"
+               elog "is installed. If you would like to use it, enable that"
+               elog "flag and re-emerge this ebuild. Optionally you can install"
+               elog "media-video/nvidia-settings"
+               elog
+       fi
+}
+
+pkg_prerm() {
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
+
+pkg_postrm() {
+       use kernel_linux && linux-mod_pkg_postrm
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-346.96-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-346.96-r1.ebuild
new file mode 100644 (file)
index 0000000..cd42a7c
--- /dev/null
@@ -0,0 +1,489 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
+       portability toolchain-funcs unpacker user udev
+
+NV_URI="http://us.download.nvidia.com/XFree86/"
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="
+       amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
+       amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
+       x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
+       x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
+"
+
+LICENSE="GPL-2 NVIDIA-r2"
+SLOT="0/346"
+KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools gtk2 gtk3 +X uvm"
+REQUIRED_USE="
+       tools? ( X || ( gtk2 gtk3 ) )
+"
+
+COMMON="
+       app-eselect/eselect-opencl
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+       X? (
+               >=app-eselect/eselect-opengl-1.0.9
+       )
+"
+DEPEND="
+       ${COMMON}
+       app-arch/xz-utils
+       kernel_linux? ( virtual/linux-sources )
+"
+RDEPEND="
+       ${COMMON}
+       acpi? ( sys-power/acpid )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               gtk2? ( >=x11-libs/gtk+-2.4:2 )
+               gtk3? ( x11-libs/gtk+:3 )
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+       )
+       X? (
+               <x11-base/xorg-server-1.17.99:=
+               >=x11-libs/libvdpau-0.3-r1
+               multilib? (
+                       >=x11-libs/libX11-1.6.2[abi_x86_32]
+                       >=x11-libs/libXext-1.3.2[abi_x86_32]
+               )
+       )
+"
+
+QA_PREBUILT="opt/* usr/lib*"
+
+S=${WORKDIR}/
+
+pkg_pretend() {
+       if use amd64 && has_multilib_profile && \
+               [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default ABI"
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux && kernel_is ge 4 3; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-4.3"
+               ewarn "<sys-kernel/vanilla-sources-4.3"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # Kernel features/options to check for
+       CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
+       use x86 && CONFIG_CHECK+=" ~HIGHMEM"
+
+       # Now do the above checks
+       use kernel_linux && check_extra_config
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use kernel_linux; then
+               MODULE_NAMES="nvidia(video:${S}/kernel)"
+               use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel/uvm)"
+
+               # This needs to run after MODULE_NAMES (so that the eclass checks
+               # whether the kernel supports loadable modules) but before BUILD_PARAMS
+               # is set (so that KV_DIR is populated).
+               linux-mod_pkg_setup
+
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
+
+               # linux-mod_src_compile calls set_arch_to_kernel, which
+               # sets the ARCH to x86 but NVIDIA's wrapping Makefile
+               # expects x86_64 or i386 and then converts it to x86
+               # later on in the build process
+               BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
+       fi
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd   && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_OBJ="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}"
+               NV_OBJ="${S}"
+               NV_SRC="${S}/kernel"
+               NV_MAN="${S}"
+               NV_X11="${S}"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+
+       if use kernel_linux; then
+               if kernel_is lt 2 6 9 ; then
+                       eerror "You must build this against 2.6.9 or higher kernels."
+               fi
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+#              convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+
+       if use pax_kernel; then
+               ewarn "Using PAX patches is not supported. You will be asked to"
+               ewarn "use a standard kernel should you have issues. Should you"
+               ewarn "need support with these patches, contact the PaX team."
+               epatch "${FILESDIR}"/${PN}-346.16-pax-usercopy.patch
+               epatch "${FILESDIR}"/${PN}-346.16-pax-constify.patch
+       fi
+
+       # Allow user patches so they can support RC kernels and whatever else
+       epatch_user
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use kernel_FreeBSD; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
+       elif use kernel_linux; then
+               MAKEOPTS=-j1
+               linux-mod_src_compile
+       fi
+}
+
+# Install nvidia library:
+# the first parameter is the library to install
+# the second parameter is the provided soversion
+# the third parameter is the target directory if its not /usr/lib
+donvidia() {
+       # Full path to library minus SOVER
+       MY_LIB="$1"
+
+       # SOVER to use
+       MY_SOVER="$2"
+
+       # Where to install
+       MY_DEST="$3"
+
+       if [[ -z "${MY_DEST}" ]]; then
+               MY_DEST="/usr/$(get_libdir)"
+               action="dolib.so"
+       else
+               exeinto ${MY_DEST}
+               action="doexe"
+       fi
+
+       # Get just the library name
+       libname=$(basename $1)
+
+       # Install the library with the correct SOVER
+       ${action} ${MY_LIB}.${MY_SOVER} || \
+               die "failed to install ${libname}"
+
+       # If SOVER wasn't 1, then we need to create a .1 symlink
+       if [[ "${MY_SOVER}" != "1" ]]; then
+               dosym ${libname}.${MY_SOVER} \
+                       ${MY_DEST}/${libname}.1 || \
+                       die "failed to create ${libname} symlink"
+       fi
+
+       # Always create the symlink from the raw lib to the .1
+       dosym ${libname}.1 \
+               ${MY_DEST}/${libname} || \
+               die "failed to create ${libname} symlink"
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               # Add the aliases
+               # This file is tweaked with the appropriate video group in
+               # pkg_preinst, see bug #491414
+               insinto /etc/modprobe.d
+               newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
+               use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
+
+               # Ensures that our device nodes are created when not using X
+               exeinto "$(get_udevdir)"
+               newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
+               udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
+       elif use kernel_FreeBSD; then
+               if use x86-fbsd; then
+                       insinto /boot/modules
+                       doins "${S}/src/nvidia.kld"
+               fi
+
+               exeinto /boot/modules
+               doexe "${S}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
+
+       # NVIDIA framebuffer capture library
+       donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
+
+       # NVIDIA video encode/decode <-> CUDA
+       if use kernel_linux; then
+               donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
+               donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
+       fi
+
+       if use X; then
+               # Xorg DDX driver
+               insinto /usr/$(get_libdir)/xorg/modules/drivers
+               doins ${NV_X11}/nvidia_drv.so
+
+               # Xorg GLX driver
+               donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
+                       /usr/$(get_libdir)/opengl/nvidia/extensions
+
+               # Xorg nvidia.conf
+               if has_version '>=x11-base/xorg-server-1.16'; then
+                       insinto /usr/share/X11/xorg.conf.d
+                       newins {,50-}nvidia-drm-outputclass.conf
+               fi
+       fi
+
+       # OpenCL ICD for NVIDIA
+       if use kernel_linux; then
+               insinto /etc/OpenCL/vendors
+               doins ${NV_OBJ}/nvidia.icd
+       fi
+
+       # Documentation
+       dohtml ${NV_DOC}/html/*
+       if use kernel_FreeBSD; then
+               dodoc "${NV_DOC}/README"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1"
+               use tools && doman "${NV_MAN}/nvidia-settings.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+               doman "${NV_MAN}/nvidia-smi.1.gz"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
+               use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
+               doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
+       fi
+
+       # Helper Apps
+       exeinto /opt/bin/
+
+       if use X; then
+               doexe ${NV_OBJ}/nvidia-xconfig
+       fi
+
+       if use kernel_linux ; then
+               doexe ${NV_OBJ}/nvidia-cuda-mps-control
+               doexe ${NV_OBJ}/nvidia-cuda-mps-server
+               doexe ${NV_OBJ}/nvidia-debugdump
+               doexe ${NV_OBJ}/nvidia-persistenced
+               doexe ${NV_OBJ}/nvidia-smi
+
+               # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
+               doexe ${NV_OBJ}/nvidia-modprobe
+               fowners root:video /opt/bin/nvidia-modprobe
+               fperms 4710 /opt/bin/nvidia-modprobe
+               dosym /{opt,usr}/bin/nvidia-modprobe
+
+               doman nvidia-cuda-mps-control.1.gz
+               doman nvidia-modprobe.1.gz
+               doman nvidia-persistenced.1.gz
+               newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
+               newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
+               newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
+       fi
+
+       if use tools; then
+               doexe ${NV_OBJ}/nvidia-settings
+               use gtk2 && donvidia libnvidia-gtk2.so ${PV}
+               use gtk3 && donvidia libnvidia-gtk3.so ${PV}
+               insinto /usr/share/nvidia/
+               doins nvidia-application-profiles-${PV}-key-documentation
+               insinto /etc/nvidia
+               newins nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
+       fi
+
+       dobin ${NV_OBJ}/nvidia-bug-report.sh
+
+       # Desktop entries for nvidia-settings
+       if use tools ; then
+               # There is no icon in the FreeBSD tarball.
+               use kernel_FreeBSD || newicon ${NV_OBJ}/nvidia-settings.png ${PN}-settings.png
+               domenu "${FILESDIR}"/${PN}-settings.desktop
+               exeinto /etc/X11/xinit/xinitrc.d
+               doexe "${FILESDIR}"/95-nvidia-settings
+       fi
+
+       #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
+
+       if has_multilib_profile && use multilib ; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis) ; do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
+       local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
+       local libdir=${NV_OBJ}
+
+       if use kernel_linux && has_multilib_profile && \
+                       [[ ${ABI} == "x86" ]] ; then
+               libdir=${NV_OBJ}/32
+       fi
+
+       if use X; then
+               # The GLX libraries
+               donvidia ${libdir}/libEGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libnvidia-eglcore.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-glsi.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-ifr.so ${NV_SOVER}
+               if use kernel_FreeBSD; then
+                       donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER}
+               else
+                       donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}
+               fi
+
+               # VDPAU
+               donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
+
+               # GLES v2 libraries
+               insinto ${GL_ROOT}
+               doexe ${libdir}/libGLESv2.so.${PV}
+               dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
+               dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
+       fi
+
+       # NVIDIA monitoring library
+       if use kernel_linux ; then
+               donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
+       fi
+
+       # CUDA & OpenCL
+       if use kernel_linux; then
+               donvidia ${libdir}/libcuda.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
+               donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
+               donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_preinst
+
+               local videogroup="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "${videogroup}" ]; then
+                       eerror "Failed to determine the video group gid"
+                       die "Failed to determine the video group gid"
+               else
+                       sed -i \
+                               -e "s:PACKAGE:${PF}:g" \
+                               -e "s:VIDEOGID:${videogroup}:" \
+                               "${D}"/etc/modprobe.d/nvidia.conf || die
+               fi
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       use kernel_linux && linux-mod_pkg_postinst
+
+       # Switch to the nvidia implementation
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
+       "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
+
+       readme.gentoo_print_elog
+
+       if ! use X; then
+               elog "You have elected to not install the X.org driver. Along with"
+               elog "this the OpenGL libraries and VDPAU libraries were not"
+               elog "installed. Additionally, once the driver is loaded your card"
+               elog "and fan will run at max speed which may not be desirable."
+               elog "Use the 'nvidia-smi' init script to have your card and fan"
+               elog "speed scale appropriately."
+               elog
+       fi
+       if ! use tools; then
+               elog "USE=tools controls whether the nvidia-settings application"
+               elog "is installed. If you would like to use it, enable that"
+               elog "flag and re-emerge this ebuild. Optionally you can install"
+               elog "media-video/nvidia-settings"
+               elog
+       fi
+}
+
+pkg_prerm() {
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
+
+pkg_postrm() {
+       use kernel_linux && linux-mod_pkg_postrm
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-352.41-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-352.41-r1.ebuild
new file mode 100644 (file)
index 0000000..c2a0375
--- /dev/null
@@ -0,0 +1,489 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
+       portability toolchain-funcs unpacker user udev
+
+NV_URI="http://us.download.nvidia.com/XFree86/"
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="
+       amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
+       amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
+       x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
+       x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
+"
+
+LICENSE="GPL-2 NVIDIA-r2"
+SLOT="0/352"
+KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools gtk2 gtk3 +X uvm"
+REQUIRED_USE="
+       tools? ( X || ( gtk2 gtk3 ) )
+"
+
+COMMON="
+       app-eselect/eselect-opencl
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+       X? (
+               >=app-eselect/eselect-opengl-1.0.9
+       )
+"
+DEPEND="
+       ${COMMON}
+       app-arch/xz-utils
+       kernel_linux? ( virtual/linux-sources )
+"
+RDEPEND="
+       ${COMMON}
+       acpi? ( sys-power/acpid )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               gtk2? ( >=x11-libs/gtk+-2.4:2 )
+               gtk3? ( x11-libs/gtk+:3 )
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+       )
+       X? (
+               <x11-base/xorg-server-1.17.99:=
+               >=x11-libs/libvdpau-0.3-r1
+               multilib? (
+                       >=x11-libs/libX11-1.6.2[abi_x86_32]
+                       >=x11-libs/libXext-1.3.2[abi_x86_32]
+               )
+       )
+"
+
+QA_PREBUILT="opt/* usr/lib*"
+
+S=${WORKDIR}/
+
+pkg_pretend() {
+       if use amd64 && has_multilib_profile && \
+               [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default ABI"
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux && kernel_is ge 4 3; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-4.3"
+               ewarn "<sys-kernel/vanilla-sources-4.3"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # Kernel features/options to check for
+       CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
+       use x86 && CONFIG_CHECK+=" ~HIGHMEM"
+
+       # Now do the above checks
+       use kernel_linux && check_extra_config
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use kernel_linux; then
+               MODULE_NAMES="nvidia(video:${S}/kernel)"
+               use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel/uvm)"
+
+               # This needs to run after MODULE_NAMES (so that the eclass checks
+               # whether the kernel supports loadable modules) but before BUILD_PARAMS
+               # is set (so that KV_DIR is populated).
+               linux-mod_pkg_setup
+
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
+
+               # linux-mod_src_compile calls set_arch_to_kernel, which
+               # sets the ARCH to x86 but NVIDIA's wrapping Makefile
+               # expects x86_64 or i386 and then converts it to x86
+               # later on in the build process
+               BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
+       fi
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd   && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_OBJ="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}"
+               NV_OBJ="${S}"
+               NV_SRC="${S}/kernel"
+               NV_MAN="${S}"
+               NV_X11="${S}"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+
+       if use kernel_linux; then
+               if kernel_is lt 2 6 9 ; then
+                       eerror "You must build this against 2.6.9 or higher kernels."
+               fi
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+#              convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+
+       if use pax_kernel; then
+               ewarn "Using PAX patches is not supported. You will be asked to"
+               ewarn "use a standard kernel should you have issues. Should you"
+               ewarn "need support with these patches, contact the PaX team."
+               epatch "${FILESDIR}"/${PN}-346.16-pax-usercopy.patch
+               epatch "${FILESDIR}"/${PN}-346.16-pax-constify.patch
+       fi
+
+       # Allow user patches so they can support RC kernels and whatever else
+       epatch_user
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use kernel_FreeBSD; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
+       elif use kernel_linux; then
+               MAKEOPTS=-j1
+               linux-mod_src_compile
+       fi
+}
+
+# Install nvidia library:
+# the first parameter is the library to install
+# the second parameter is the provided soversion
+# the third parameter is the target directory if its not /usr/lib
+donvidia() {
+       # Full path to library minus SOVER
+       MY_LIB="$1"
+
+       # SOVER to use
+       MY_SOVER="$2"
+
+       # Where to install
+       MY_DEST="$3"
+
+       if [[ -z "${MY_DEST}" ]]; then
+               MY_DEST="/usr/$(get_libdir)"
+               action="dolib.so"
+       else
+               exeinto ${MY_DEST}
+               action="doexe"
+       fi
+
+       # Get just the library name
+       libname=$(basename $1)
+
+       # Install the library with the correct SOVER
+       ${action} ${MY_LIB}.${MY_SOVER} || \
+               die "failed to install ${libname}"
+
+       # If SOVER wasn't 1, then we need to create a .1 symlink
+       if [[ "${MY_SOVER}" != "1" ]]; then
+               dosym ${libname}.${MY_SOVER} \
+                       ${MY_DEST}/${libname}.1 || \
+                       die "failed to create ${libname} symlink"
+       fi
+
+       # Always create the symlink from the raw lib to the .1
+       dosym ${libname}.1 \
+               ${MY_DEST}/${libname} || \
+               die "failed to create ${libname} symlink"
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               # Add the aliases
+               # This file is tweaked with the appropriate video group in
+               # pkg_preinst, see bug #491414
+               insinto /etc/modprobe.d
+               newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
+               use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
+
+               # Ensures that our device nodes are created when not using X
+               exeinto "$(get_udevdir)"
+               newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
+               udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
+       elif use kernel_FreeBSD; then
+               if use x86-fbsd; then
+                       insinto /boot/modules
+                       doins "${S}/src/nvidia.kld"
+               fi
+
+               exeinto /boot/modules
+               doexe "${S}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
+
+       # NVIDIA framebuffer capture library
+       donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
+
+       # NVIDIA video encode/decode <-> CUDA
+       if use kernel_linux; then
+               donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
+               donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
+       fi
+
+       if use X; then
+               # Xorg DDX driver
+               insinto /usr/$(get_libdir)/xorg/modules/drivers
+               doins ${NV_X11}/nvidia_drv.so
+
+               # Xorg GLX driver
+               donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
+                       /usr/$(get_libdir)/opengl/nvidia/extensions
+
+               # Xorg nvidia.conf
+               if has_version '>=x11-base/xorg-server-1.16'; then
+                       insinto /usr/share/X11/xorg.conf.d
+                       newins {,50-}nvidia-drm-outputclass.conf
+               fi
+       fi
+
+       # OpenCL ICD for NVIDIA
+       if use kernel_linux; then
+               insinto /etc/OpenCL/vendors
+               doins ${NV_OBJ}/nvidia.icd
+       fi
+
+       # Documentation
+       dohtml ${NV_DOC}/html/*
+       if use kernel_FreeBSD; then
+               dodoc "${NV_DOC}/README"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1"
+               use tools && doman "${NV_MAN}/nvidia-settings.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+               doman "${NV_MAN}/nvidia-smi.1.gz"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
+               use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
+               doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
+       fi
+
+       # Helper Apps
+       exeinto /opt/bin/
+
+       if use X; then
+               doexe ${NV_OBJ}/nvidia-xconfig
+       fi
+
+       if use kernel_linux ; then
+               doexe ${NV_OBJ}/nvidia-cuda-mps-control
+               doexe ${NV_OBJ}/nvidia-cuda-mps-server
+               doexe ${NV_OBJ}/nvidia-debugdump
+               doexe ${NV_OBJ}/nvidia-persistenced
+               doexe ${NV_OBJ}/nvidia-smi
+
+               # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
+               doexe ${NV_OBJ}/nvidia-modprobe
+               fowners root:video /opt/bin/nvidia-modprobe
+               fperms 4710 /opt/bin/nvidia-modprobe
+               dosym /{opt,usr}/bin/nvidia-modprobe
+
+               doman nvidia-cuda-mps-control.1.gz
+               doman nvidia-modprobe.1.gz
+               doman nvidia-persistenced.1.gz
+               newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
+               newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
+               newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
+       fi
+
+       if use tools; then
+               doexe ${NV_OBJ}/nvidia-settings
+               use gtk2 && donvidia libnvidia-gtk2.so ${PV}
+               use gtk3 && donvidia libnvidia-gtk3.so ${PV}
+               insinto /usr/share/nvidia/
+               doins nvidia-application-profiles-${PV}-key-documentation
+               insinto /etc/nvidia
+               newins nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
+       fi
+
+       dobin ${NV_OBJ}/nvidia-bug-report.sh
+
+       # Desktop entries for nvidia-settings
+       if use tools ; then
+               # There is no icon in the FreeBSD tarball.
+               use kernel_FreeBSD || newicon ${NV_OBJ}/nvidia-settings.png ${PN}-settings.png
+               domenu "${FILESDIR}"/${PN}-settings.desktop
+               exeinto /etc/X11/xinit/xinitrc.d
+               doexe "${FILESDIR}"/95-nvidia-settings
+       fi
+
+       #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
+
+       if has_multilib_profile && use multilib ; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis) ; do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
+       local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
+       local libdir=${NV_OBJ}
+
+       if use kernel_linux && has_multilib_profile && \
+                       [[ ${ABI} == "x86" ]] ; then
+               libdir=${NV_OBJ}/32
+       fi
+
+       if use X; then
+               # The GLX libraries
+               donvidia ${libdir}/libEGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libGL.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
+               donvidia ${libdir}/libnvidia-eglcore.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-glcore.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-glsi.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-ifr.so ${NV_SOVER}
+               if use kernel_FreeBSD; then
+                       donvidia ${libdir}/libnvidia-tls.so ${NV_SOVER}
+               else
+                       donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}
+               fi
+
+               # VDPAU
+               donvidia ${libdir}/libvdpau_nvidia.so ${NV_SOVER}
+
+               # GLES v2 libraries
+               insinto ${GL_ROOT}
+               doexe ${libdir}/libGLESv2.so.${PV}
+               dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
+               dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
+       fi
+
+       # NVIDIA monitoring library
+       if use kernel_linux ; then
+               donvidia ${libdir}/libnvidia-ml.so ${NV_SOVER}
+       fi
+
+       # CUDA & OpenCL
+       if use kernel_linux; then
+               donvidia ${libdir}/libcuda.so ${NV_SOVER}
+               donvidia ${libdir}/libnvidia-compiler.so ${NV_SOVER}
+               donvidia ${libdir}/libOpenCL.so 1.0.0 ${CL_ROOT}
+               donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_preinst
+
+               local videogroup="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "${videogroup}" ]; then
+                       eerror "Failed to determine the video group gid"
+                       die "Failed to determine the video group gid"
+               else
+                       sed -i \
+                               -e "s:PACKAGE:${PF}:g" \
+                               -e "s:VIDEOGID:${videogroup}:" \
+                               "${D}"/etc/modprobe.d/nvidia.conf || die
+               fi
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       use kernel_linux && linux-mod_pkg_postinst
+
+       # Switch to the nvidia implementation
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
+       "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
+
+       readme.gentoo_print_elog
+
+       if ! use X; then
+               elog "You have elected to not install the X.org driver. Along with"
+               elog "this the OpenGL libraries and VDPAU libraries were not"
+               elog "installed. Additionally, once the driver is loaded your card"
+               elog "and fan will run at max speed which may not be desirable."
+               elog "Use the 'nvidia-smi' init script to have your card and fan"
+               elog "speed scale appropriately."
+               elog
+       fi
+       if ! use tools; then
+               elog "USE=tools controls whether the nvidia-settings application"
+               elog "is installed. If you would like to use it, enable that"
+               elog "flag and re-emerge this ebuild. Optionally you can install"
+               elog "media-video/nvidia-settings"
+               elog
+       fi
+}
+
+pkg_prerm() {
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
+
+pkg_postrm() {
+       use kernel_linux && linux-mod_pkg_postrm
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-355.11-r2.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-355.11-r2.ebuild
new file mode 100644 (file)
index 0000000..8ff831a
--- /dev/null
@@ -0,0 +1,500 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \
+       portability toolchain-funcs unpacker user udev
+
+NV_URI="http://us.download.nvidia.com/XFree86/"
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="
+       amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
+       amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
+       x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
+       x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
+"
+
+LICENSE="GPL-2 NVIDIA-r2"
+SLOT="0/355"
+KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools gtk2 gtk3 +X uvm"
+REQUIRED_USE="
+       tools? ( X || ( gtk2 gtk3 ) )
+"
+
+COMMON="
+       app-eselect/eselect-opencl
+       gtk3? ( x11-libs/cairo )
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+       X? (
+               >=app-eselect/eselect-opengl-1.0.9
+       )
+"
+DEPEND="
+       ${COMMON}
+       app-arch/xz-utils
+       kernel_linux? ( virtual/linux-sources )
+"
+RDEPEND="
+       ${COMMON}
+       acpi? ( sys-power/acpid )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               gtk2? ( >=x11-libs/gtk+-2.4:2 )
+               gtk3? ( x11-libs/gtk+:3 )
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+       )
+       X? (
+               <x11-base/xorg-server-1.17.99:=
+               >=x11-libs/libvdpau-0.3-r1
+               multilib? (
+                       >=x11-libs/libX11-1.6.2[abi_x86_32]
+                       >=x11-libs/libXext-1.3.2[abi_x86_32]
+               )
+       )
+"
+
+QA_PREBUILT="opt/* usr/lib*"
+
+S=${WORKDIR}/
+
+pkg_pretend() {
+       if use amd64 && has_multilib_profile && \
+               [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default ABI"
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux && kernel_is ge 4 3; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-4.3"
+               ewarn "<sys-kernel/vanilla-sources-4.3"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # Kernel features/options to check for
+       CONFIG_CHECK="~ZONE_DMA ~MTRR ~SYSVIPC ~!LOCKDEP"
+       use x86 && CONFIG_CHECK+=" ~HIGHMEM"
+
+       # Now do the above checks
+       use kernel_linux && check_extra_config
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use kernel_linux; then
+               MODULE_NAMES="nvidia(video:${S}/kernel)"
+               use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
+
+               # This needs to run after MODULE_NAMES (so that the eclass checks
+               # whether the kernel supports loadable modules) but before BUILD_PARAMS
+               # is set (so that KV_DIR is populated).
+               linux-mod_pkg_setup
+
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
+
+               # linux-mod_src_compile calls set_arch_to_kernel, which
+               # sets the ARCH to x86 but NVIDIA's wrapping Makefile
+               # expects x86_64 or i386 and then converts it to x86
+               # later on in the build process
+               BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
+       fi
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd   && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_OBJ="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}"
+               NV_OBJ="${S}"
+               NV_SRC="${S}/kernel"
+               NV_MAN="${S}"
+               NV_X11="${S}"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+
+       if use kernel_linux; then
+               if kernel_is lt 2 6 9; then
+                       eerror "You must build this against 2.6.9 or higher kernels."
+               fi
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+#              convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+
+       if use pax_kernel; then
+               ewarn "Using PAX patches is not supported. You will be asked to"
+               ewarn "use a standard kernel should you have issues. Should you"
+               ewarn "need support with these patches, contact the PaX team."
+               epatch "${FILESDIR}"/${PN}-355.06-pax.patch
+       fi
+
+       # Allow user patches so they can support RC kernels and whatever else
+       epatch_user
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use kernel_FreeBSD; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
+       elif use kernel_linux; then
+               MAKEOPTS=-j1
+               linux-mod_src_compile
+       fi
+}
+
+# Install nvidia library:
+# the first parameter is the library to install
+# the second parameter is the provided soversion
+# the third parameter is the target directory if it is not /usr/lib
+donvidia() {
+       # Full path to library minus SOVER
+       MY_LIB="$1"
+
+       # SOVER to use
+       MY_SOVER="$2"
+
+       # Where to install
+       MY_DEST="$3"
+
+       if [[ -z "${MY_DEST}" ]]; then
+               MY_DEST="/usr/$(get_libdir)"
+               action="dolib.so"
+       else
+               exeinto ${MY_DEST}
+               action="doexe"
+       fi
+
+       # Get just the library name
+       libname=$(basename $1)
+
+       # Install the library with the correct SOVER
+       ${action} ${MY_LIB}.${MY_SOVER} || \
+               die "failed to install ${libname}"
+
+       # If SOVER wasn't 1, then we need to create a .1 symlink
+       if [[ "${MY_SOVER}" != "1" ]]; then
+               dosym ${libname}.${MY_SOVER} \
+                       ${MY_DEST}/${libname}.1 || \
+                       die "failed to create ${libname} symlink"
+       fi
+
+       # Always create the symlink from the raw lib to the .1
+       dosym ${libname}.1 \
+               ${MY_DEST}/${libname} || \
+               die "failed to create ${libname} symlink"
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               # Add the aliases
+               # This file is tweaked with the appropriate video group in
+               # pkg_preinst, see bug #491414
+               insinto /etc/modprobe.d
+               newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
+               use uvm && doins "${FILESDIR}"/nvidia-uvm.conf
+
+               # Ensures that our device nodes are created when not using X
+               exeinto "$(get_udevdir)"
+               newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
+               udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
+       elif use kernel_FreeBSD; then
+               if use x86-fbsd; then
+                       insinto /boot/modules
+                       doins "${S}/src/nvidia.kld"
+               fi
+
+               exeinto /boot/modules
+               doexe "${S}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       donvidia ${NV_OBJ}/libnvidia-cfg.so ${NV_SOVER}
+
+       # NVIDIA framebuffer capture library
+       donvidia ${NV_OBJ}/libnvidia-fbc.so ${NV_SOVER}
+
+       # NVIDIA video encode/decode <-> CUDA
+       if use kernel_linux; then
+               donvidia ${NV_OBJ}/libnvcuvid.so ${NV_SOVER}
+               donvidia ${NV_OBJ}/libnvidia-encode.so ${NV_SOVER}
+       fi
+
+       if use X; then
+               # Xorg DDX driver
+               insinto /usr/$(get_libdir)/xorg/modules/drivers
+               doins ${NV_X11}/nvidia_drv.so
+
+               # Xorg GLX driver
+               donvidia ${NV_X11}/libglx.so ${NV_SOVER} \
+                       /usr/$(get_libdir)/opengl/nvidia/extensions
+
+               # Xorg nvidia.conf
+               if has_version '>=x11-base/xorg-server-1.16'; then
+                       insinto /usr/share/X11/xorg.conf.d
+                       newins {,50-}nvidia-drm-outputclass.conf
+               fi
+       fi
+
+       # OpenCL ICD for NVIDIA
+       if use kernel_linux; then
+               insinto /etc/OpenCL/vendors
+               doins ${NV_OBJ}/nvidia.icd
+       fi
+
+       # Documentation
+       dohtml ${NV_DOC}/html/*
+       if use kernel_FreeBSD; then
+               dodoc "${NV_DOC}/README"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1"
+               use tools && doman "${NV_MAN}/nvidia-settings.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+               doman "${NV_MAN}/nvidia-smi.1.gz"
+               use X && doman "${NV_MAN}/nvidia-xconfig.1.gz"
+               use tools && doman "${NV_MAN}/nvidia-settings.1.gz"
+               doman "${NV_MAN}/nvidia-cuda-mps-control.1.gz"
+       fi
+
+       # Helper Apps
+       exeinto /opt/bin/
+
+       if use X; then
+               doexe ${NV_OBJ}/nvidia-xconfig
+       fi
+
+       if use kernel_linux; then
+               doexe ${NV_OBJ}/nvidia-cuda-mps-control
+               doexe ${NV_OBJ}/nvidia-cuda-mps-server
+               doexe ${NV_OBJ}/nvidia-debugdump
+               doexe ${NV_OBJ}/nvidia-persistenced
+               doexe ${NV_OBJ}/nvidia-smi
+
+               # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
+               doexe ${NV_OBJ}/nvidia-modprobe
+               fowners root:video /opt/bin/nvidia-modprobe
+               fperms 4710 /opt/bin/nvidia-modprobe
+               dosym /{opt,usr}/bin/nvidia-modprobe
+
+               doman nvidia-cuda-mps-control.1.gz
+               doman nvidia-modprobe.1.gz
+               doman nvidia-persistenced.1.gz
+               newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
+               newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
+               newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
+       fi
+
+       if use tools; then
+               doexe ${NV_OBJ}/nvidia-settings
+               use gtk2 && donvidia libnvidia-gtk2.so ${PV}
+               use gtk3 && donvidia libnvidia-gtk3.so ${PV}
+               insinto /usr/share/nvidia/
+               doins nvidia-application-profiles-${PV}-key-documentation
+               insinto /etc/nvidia
+               newins nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
+       fi
+
+       dobin ${NV_OBJ}/nvidia-bug-report.sh
+
+       # Desktop entries for nvidia-settings
+       if use tools; then
+               # There is no icon in the FreeBSD tarball.
+               use kernel_FreeBSD || newicon ${NV_OBJ}/nvidia-settings.png ${PN}-settings.png
+               domenu "${FILESDIR}"/${PN}-settings.desktop
+               exeinto /etc/X11/xinit/xinitrc.d
+               doexe "${FILESDIR}"/95-nvidia-settings
+       fi
+
+       #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
+
+       if has_multilib_profile && use multilib; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis); do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
+       local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
+       local libdir=${NV_OBJ}
+
+       if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
+               libdir=${NV_OBJ}/32
+       fi
+
+       if use X; then
+               NV_GLX_LIBRARIES=(
+                       "libEGL.so 1 ${GL_ROOT}"
+                       "libEGL_nvidia.so 0 ${GL_ROOT}"
+                       "libGL.so ${NV_SOVER} ${GL_ROOT}"
+                       "libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}"
+                       "libGLdispatch.so 0 ${GL_ROOT}"
+                       "libOpenCL.so 1.0.0 ${CL_ROOT}"
+                       "libOpenGL.so 0 ${GL_ROOT}"
+                       "libcuda.so ${NV_SOVER}"
+                       "libnvcuvid.so ${NV_SOVER}"
+                       "libnvidia-compiler.so ${NV_SOVER}"
+                       "libnvidia-eglcore.so ${NV_SOVER}"
+                       "libnvidia-encode.so ${NV_SOVER}"
+                       "libnvidia-fbc.so ${NV_SOVER}"
+                       "libnvidia-glcore.so ${NV_SOVER}"
+                       "libnvidia-glsi.so ${NV_SOVER}"
+                       "libnvidia-ifr.so ${NV_SOVER}"
+                       "libnvidia-opencl.so ${NV_SOVER}"
+                       "libvdpau.so ${NV_SOVER} ${GL_ROOT}"
+                       "libvdpau_nvidia.so ${NV_SOVER}"
+                       "libvdpau_trace.so ${NV_SOVER} ${GL_ROOT}"
+               )
+               if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
+               then
+                       NV_GLX_LIBRARIES+=( "libnvidia-wfb.so ${NV_SOVER}" )
+               fi
+
+               if use kernel_FreeBSD; then
+                       NV_GLX_LIBRARIES+=( "libnvidia-tls.so ${NV_SOVER}" )
+               fi
+
+               if use kernel_linux; then
+                       NV_GLX_LIBRARIES+=(
+                               "libnvidia-ml.so ${NV_SOVER}"
+                               "tls/libnvidia-tls.so ${NV_SOVER}"
+                       )
+               fi
+
+               for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
+                       donvidia ${libdir}/${NV_LIB}
+               done
+
+               # GLES v2 library is special
+               insinto ${GL_ROOT}
+               doexe ${libdir}/libGLESv2.so.${PV}
+               dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
+               dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_preinst
+
+               local videogroup="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "${videogroup}" ]; then
+                       eerror "Failed to determine the video group gid"
+                       die "Failed to determine the video group gid"
+               else
+                       sed -i \
+                               -e "s:PACKAGE:${PF}:g" \
+                               -e "s:VIDEOGID:${videogroup}:" \
+                               "${D}"/etc/modprobe.d/nvidia.conf || die
+               fi
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       use kernel_linux && linux-mod_pkg_postinst
+
+       # Switch to the nvidia implementation
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
+       "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
+
+       readme.gentoo_print_elog
+
+       if ! use X; then
+               elog "You have elected to not install the X.org driver. Along with"
+               elog "this the OpenGL libraries and VDPAU libraries were not"
+               elog "installed. Additionally, once the driver is loaded your card"
+               elog "and fan will run at max speed which may not be desirable."
+               elog "Use the 'nvidia-smi' init script to have your card and fan"
+               elog "speed scale appropriately."
+               elog
+       fi
+       if ! use tools; then
+               elog "USE=tools controls whether the nvidia-settings application"
+               elog "is installed. If you would like to use it, enable that"
+               elog "flag and re-emerge this ebuild. Optionally you can install"
+               elog "media-video/nvidia-settings"
+               elog
+       fi
+}
+
+pkg_prerm() {
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
+
+pkg_postrm() {
+       use kernel_linux && linux-mod_pkg_postrm
+       use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
+}
diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-96.43.23-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-96.43.23-r1.ebuild
new file mode 100644 (file)
index 0000000..72c8ce2
--- /dev/null
@@ -0,0 +1,519 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+inherit eutils flag-o-matic linux-mod multilib nvidia-driver portability unpacker user versionator
+
+X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
+AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
+X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="http://www.nvidia.com/"
+SRC_URI="x86? ( http://us.download.nvidia.com/XFree86/Linux-x86/${PV}/${X86_NV_PACKAGE}-pkg0.run )
+        amd64? ( http://us.download.nvidia.com/XFree86/Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}-pkg2.run )
+        x86-fbsd? ( http://us.download.nvidia.com/freebsd/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )"
+
+LICENSE="GPL-2 NVIDIA-r1"
+SLOT="0/96"
+KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
+IUSE="acpi custom-cflags gtk multilib kernel_linux"
+RESTRICT="bindist mirror strip"
+EMULTILIB_PKG="true"
+
+COMMON="
+       kernel_linux? ( >=sys-libs/glibc-2.6.1 )
+       >=app-eselect/eselect-opengl-1.0.9
+"
+DEPEND="${COMMON}
+       kernel_linux? ( virtual/linux-sources )
+"
+RDEPEND="${COMMON}
+       <x11-base/xorg-server-1.12.99:=
+       acpi? ( sys-power/acpid )
+       gtk? (
+               !media-video/nvidia-settings
+               dev-libs/atk
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf
+               x11-libs/gtk+:2
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/pango[X]
+               x11-libs/pangox-compat
+       )
+       multilib? (
+               >=x11-libs/libX11-1.6.2[abi_x86_32]
+               >=x11-libs/libXext-1.3.2[abi_x86_32]
+       )
+"
+
+QA_TEXTRELS_x86="
+       usr/lib/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+       usr/lib/libcuda.so.${PV}
+       usr/lib/libnvidia-cfg.so.${PV}
+       usr/lib/libvdpau_nvidia.so.${PV}
+       usr/lib/libXvMCNVIDIA.so.${PV}
+"
+
+QA_TEXTRELS_x86_fbsd="
+       boot/modules/nvidia.ko
+       usr/lib/opengl/nvidia/lib/libGL.so.1
+       usr/lib/opengl/nvidia/lib/libGLcore.so.1
+       usr/lib/libnvidia-cfg.so.1
+       usr/lib/opengl/nvidia/extensions/libglx.so.1
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+"
+
+QA_TEXTRELS_amd64="
+       usr/lib32/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib32/libcuda.so.${PV}
+       usr/lib32/libvdpau_nvidia.so.${PV}
+"
+
+QA_EXECSTACK_x86="
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+       usr/lib/libXvMCNVIDIA.a:NVXVMC.o
+"
+
+QA_EXECSTACK_amd64="
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/libnvcompiler.so.${PV}
+       usr/lib64/libXvMCNVIDIA.so.${PV}
+       usr/lib64/libXvMCNVIDIA.a:NVXVMC.o
+       usr/lib64/libnvidia-cfg.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib64/xorg/modules/drivers/nvidia_drv.so
+       usr/bin/nvidia-settings
+       usr/bin/nvidia-smi
+       usr/bin/nvidia-xconfig
+"
+
+QA_WX_LOAD_x86="
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/libXvMCNVIDIA.a
+"
+
+QA_WX_LOAD_amd64="
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/extensions/libglx.so.${PV}
+"
+
+QA_SONAME_amd64="
+       usr/lib64/libnvcompiler.so.${PV}
+"
+
+QA_FLAGS_IGNORED_amd64="
+       usr/lib32/libcuda.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib32/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib32/libvdpau_nvidia.so.${PV}
+       usr/lib64/libXvMCNVIDIA.so.${PV}
+       usr/lib64/libcuda.so.${PV}
+       usr/lib64/libnvidia-cfg.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib64/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib64/xorg/modules/drivers/nvidia_drv.so
+       usr/lib64/libvdpau_nvidia.so.${PV}
+       usr/bin/nvidia-settings
+       usr/bin/nvidia-smi
+       usr/bin/nvidia-xconfig
+"
+
+QA_FLAGS_IGNORED_x86="
+       usr/lib/libcuda.so.${PV}
+       usr/lib/libnvidia-cfg.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGLcore.so.${PV}
+       usr/lib/opengl/nvidia/lib/libGL.so.${PV}
+       usr/lib/opengl/nvidia/lib/libnvidia-tls.so.${PV}
+       usr/lib/opengl/nvidia/extensions/libglx.so.${PV}
+       usr/lib/xorg/modules/drivers/nvidia_drv.so
+       usr/lib/libXvMCNVIDIA.so.${PV}
+       usr/lib/libvdpau_nvidia.so.${PV}
+       usr/bin/nvidia-settings
+       usr/bin/nvidia-smi
+       usr/bin/nvidia-xconfig
+"
+
+S="${WORKDIR}/"
+
+mtrr_check() {
+       ebegin "Checking for MTRR support"
+       linux_chkconfig_present MTRR
+       eend $?
+
+       if [[ $? -ne 0 ]] ; then
+               eerror "Please enable MTRR support in your kernel config, found at:"
+               eerror
+               eerror "  Processor type and features"
+               eerror "    [*] MTRR (Memory Type Range Register) support"
+               eerror
+               eerror "and recompile your kernel ..."
+               die "MTRR support not detected!"
+       fi
+}
+
+lockdep_check() {
+       if linux_chkconfig_present LOCKDEP; then
+               eerror "You've enabled LOCKDEP -- lock tracking -- in the kernel."
+               eerror "Unfortunately, this option exports the symbol 'lockdep_init_map' as GPL-only"
+               eerror "which will prevent ${P} from compiling."
+               eerror "Please make sure the following options have been unset:"
+               eerror "    Kernel hacking  --->"
+               eerror "        [ ] Lock debugging: detect incorrect freeing of live locks"
+               eerror "        [ ] Lock debugging: prove locking correctness"
+               eerror "        [ ] Lock usage statistics"
+               eerror "in 'menuconfig'"
+               die "LOCKDEP enabled"
+       fi
+}
+
+pkg_setup() {
+       # try to turn off distcc and ccache for people that have a problem with it
+       export DISTCC_DISABLE=1
+       export CCACHE_DISABLE=1
+
+       if use amd64 && has_multilib_profile && [ "${DEFAULT_ABI}" != "amd64" ]; then
+               eerror "This ebuild doesn't currently support changing your default abi."
+               die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
+       fi
+
+       if use kernel_linux; then
+               linux-mod_pkg_setup
+               MODULE_NAMES="nvidia(video:${S}/usr/src/nv)"
+               BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
+               SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
+               mtrr_check
+               lockdep_check
+       fi
+
+       # On BSD userland it wants real make command
+       use userland_BSD && MAKE="$(get_bmake)"
+
+       export _POSIX2_VERSION="199209"
+
+       if use kernel_linux && kernel_is ge 3 7 ; then
+               ewarn "Gentoo supports kernels which are supported by NVIDIA"
+               ewarn "which are limited to the following kernels:"
+               ewarn "<sys-kernel/gentoo-sources-3.7"
+               ewarn "<sys-kernel/vanilla-sources-3.7"
+               ewarn ""
+               ewarn "You are free to utilize epatch_user to provide whatever"
+               ewarn "support you feel is appropriate, but will not receive"
+               ewarn "support as a result of those changes."
+               ewarn ""
+               ewarn "Do not file a bug report about this."
+       fi
+
+       # Since Nvidia ships 3 different series of drivers, we need to give the user
+       # some kind of guidance as to what version they should install. This tries
+       # to point the user in the right direction but can't be perfect. check
+       # nvidia-driver.eclass
+       nvidia-driver-check-warning
+
+       # set variables to where files are in the package structure
+       if use kernel_FreeBSD; then
+               use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
+               NV_DOC="${S}/doc"
+               NV_EXEC="${S}/obj"
+               NV_LIB="${S}/obj"
+               NV_SRC="${S}/src"
+               NV_MAN="${S}/x11/man"
+               NV_X11="${S}/obj"
+               NV_X11_DRV="${NV_X11}"
+               NV_X11_EXT="${NV_X11}"
+               NV_SOVER=1
+       elif use kernel_linux; then
+               NV_DOC="${S}/usr/share/doc"
+               NV_EXEC="${S}/usr/bin"
+               NV_LIB="${S}/usr/lib"
+               NV_SRC="${S}/usr/src/nv"
+               NV_MAN="${S}/usr/share/man/man1"
+               NV_X11="${S}/usr/X11R6/lib"
+               NV_X11_DRV="${NV_X11}/modules/drivers"
+               NV_X11_EXT="${NV_X11}/modules/extensions"
+               NV_SOVER=${PV}
+       else
+               die "Could not determine proper NVIDIA package"
+       fi
+}
+
+src_unpack() {
+       if use kernel_linux && kernel_is lt 2 6 7; then
+               echo
+               ewarn "Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
+               ewarn "This is not officially supported for ${P}. It is likely you"
+               ewarn "will not be able to compile or use the kernel module."
+               ewarn "It is recommended that you upgrade your kernel to a version >= 2.6.7"
+               echo
+               ewarn "DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."
+       fi
+
+       if ! use x86-fbsd; then
+               mkdir "${S}"
+               cd "${S}"
+               unpack_makeself
+       else
+               unpack ${A}
+       fi
+}
+
+src_prepare() {
+       # Please add a brief description for every added patch
+       use x86-fbsd && cd doc
+
+       # Use the correct defines to make gtkglext build work
+       epatch "${FILESDIR}"/NVIDIA_glx-defines.patch
+       # Use some more sensible gl headers and make way for new glext.h
+       epatch "${FILESDIR}"/NVIDIA_glx-glheader.patch
+
+       if use kernel_linux; then
+               # Quiet down warnings the user does not need to see
+               sed -i \
+                       -e 's:-Wpointer-arith::g' \
+                       -e 's:-Wsign-compare::g' \
+                       "${NV_SRC}"/Makefile.kbuild
+
+               # If you set this then it's your own fault when stuff breaks :)
+               use custom-cflags && sed -i "s:-O:${CFLAGS}:" "${NV_SRC}"/Makefile.*
+
+               # If greater than 2.6.5 use M= instead of SUBDIR=
+               convert_to_m "${NV_SRC}"/Makefile.kbuild
+       fi
+}
+
+src_compile() {
+       # This is already the default on Linux, as there's no toplevel Makefile, but
+       # on FreeBSD there's one and triggers the kernel module build, as we install
+       # it by itself, pass this.
+
+       cd "${NV_SRC}"
+       if use x86-fbsd; then
+               MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
+                       LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
+       elif use kernel_linux; then
+               BUILD_PARAMS+=" PATCHLEVEL=not4"
+               linux-mod_src_compile
+       fi
+}
+
+src_install() {
+       if use kernel_linux; then
+               linux-mod_src_install
+
+               VIDEOGROUP="$(egetent group video | cut -d ':' -f 3)"
+               if [ -z "$VIDEOGROUP" ]; then
+                       eerror "Failed to determine the video group gid."
+                       die "Failed to determine the video group gid."
+               fi
+
+               # Add the aliases
+               sed -e 's:PACKAGE:'${PF}':g' \
+                       -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07 > \
+                       "${WORKDIR}"/nvidia || die
+               insinto /etc/modprobe.d
+               newins "${WORKDIR}"/nvidia nvidia.conf
+       elif use x86-fbsd; then
+               insinto /boot/modules
+               doins "${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld"
+
+               exeinto /boot/modules
+               doexe "${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko"
+       fi
+
+       # NVIDIA kernel <-> userspace driver config lib
+       dolib.so ${NV_LIB}/libnvidia-cfg.so.${NV_SOVER}
+
+       # Xorg DDX driver
+       insinto /usr/$(get_libdir)/xorg/modules/drivers
+       doins ${NV_X11_DRV}/nvidia_drv.so
+
+       # Xorg GLX driver
+       insinto /usr/$(get_libdir)/opengl/nvidia/extensions
+       doins ${NV_X11_EXT}/libglx.so.${NV_SOVER}
+       dosym /usr/$(get_libdir)/opengl/nvidia/extensions/libglx.so.${NV_SOVER} \
+               /usr/$(get_libdir)/opengl/nvidia/extensions/libglx.so
+
+       # XvMC driver
+       dolib.a ${NV_X11}/libXvMCNVIDIA.a
+       dolib.so ${NV_X11}/libXvMCNVIDIA.so.${NV_SOVER}
+       dosym libXvMCNVIDIA.so.${NV_SOVER} /usr/$(get_libdir)/libXvMCNVIDIA.so
+
+       # CUDA headers (driver to come)
+       if [[ -d ${S}/usr/include/cuda ]]; then
+               dodir /usr/include/cuda
+               insinto /usr/include/cuda
+               doins usr/include/cuda/*.h
+       fi
+
+       # OpenCL headers (driver to come)
+       if [[ -d ${S}/usr/include/CL ]]; then
+               dodir /usr/include/CL
+               insinto /usr/include/CL
+               doins usr/include/CL/*.h
+       fi
+
+       # Documentation
+       dodoc ${NV_DOC}/XF86Config.sample
+       dohtml ${NV_DOC}/html/*
+       if use x86-fbsd; then
+               dodoc "${NV_DOC}/README"
+               doman "${NV_MAN}/nvidia-xconfig.1"
+       else
+               # Docs
+               newdoc "${NV_DOC}/README.txt" README
+               dodoc "${NV_DOC}/NVIDIA_Changelog"
+#              doman "${NV_MAN}/nvidia-smi.1.gz"
+               doman "${NV_MAN}/nvidia-xconfig.1.gz"
+       fi
+
+       # Helper Apps
+       dobin ${NV_EXEC}/nvidia-xconfig
+       dobin ${NV_EXEC}/nvidia-bug-report.sh
+       if use gtk; then
+               dobin usr/bin/nvidia-settings
+       fi
+#      if use kernel_linux; then
+#              dobin ${NV_EXEC}/nvidia-smi || die
+#      fi
+
+       if has_multilib_profile ; then
+               local OABI=${ABI}
+               for ABI in $(get_install_abis) ; do
+                       src_install-libs
+               done
+               ABI=${OABI}
+               unset OABI
+       else
+               src_install-libs
+       fi
+
+       is_final_abi || die "failed to iterate through all ABIs"
+
+       readme.gentoo_create_doc
+}
+
+# Install nvidia library:
+# the first parameter is the place where to install it
+# the second parameter is the base name of the library
+# the third parameter is the provided soversion
+donvidia() {
+       dodir $1
+       exeinto $1
+
+       libname=$(basename $2)
+
+       doexe $2.$3
+       dosym ${libname}.$3 $1/${libname}
+       [[ $3 != "1" ]] && dosym ${libname}.$3 $1/${libname}.1
+}
+
+src_install-libs() {
+       local inslibdir=$(get_libdir)
+       local NV_ROOT="/usr/${inslibdir}/opengl/nvidia"
+       local libdir= sover=
+
+       if use kernel_linux; then
+               if has_multilib_profile && [[ ${ABI} == "x86" ]] ; then
+                       libdir=usr/lib32
+               else
+                       libdir=usr/lib
+               fi
+               sover=${PV}
+       else
+               libdir=obj
+               # on FreeBSD it has just .1 suffix
+               sover=1
+       fi
+
+       # The GLX libraries
+       donvidia ${NV_ROOT}/lib ${libdir}/libGL.so ${sover}
+       donvidia ${NV_ROOT}/lib ${libdir}/libGLcore.so ${sover}
+       if use x86-fbsd; then
+               donvidia ${NV_ROOT}/lib ${libdir}/libnvidia-tls.so ${sover}
+       else
+               donvidia ${NV_ROOT}/lib ${libdir}/tls/libnvidia-tls.so ${sover}
+       fi
+
+       #cuda
+       if [[ -f ${libdir}/libcuda.so.${sover} ]]; then
+               dolib.so ${libdir}/libcuda.so.${sover}
+               [[ "${sover}" != "1" ]] && dosym libcuda.so.${sover} /usr/${inslibdir}/libcuda.so.1
+               dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so
+       fi
+
+       #vdpau
+       if [[ -f ${libdir}/libvdpau_nvidia.so.${sover} ]]; then
+               dolib.so ${libdir}/libvdpau_nvidia.so.${sover}
+               dosym libvdpau_nvidia.so.${sover} /usr/${inslibdir}/libvdpau_nvidia.so
+       fi
+
+       # OpenCL
+       # NOTE: This isn't currently available in the publicly released drivers.
+       if [[ -f ${libdir}/libOpenCL.so.1.0.0 ]]; then
+
+               dolib.so ${libdir}/libnvcompiler.so.${sover}
+               [[ "${sover}" != "1" ]] && dosym libnvcompiler.so.${sover} /usr/${inslibdir}/libnvcompiler.so.1
+               dosym libnvcompiler.so.1 /usr/${inslibdir}/libnvcompiler.so
+
+               dolib.so ${libdir}/libOpenCL.so.1.0.0
+               dosym libOpenCL.so.1.0.0 /usr/${inslibdir}/libOpenCL.so.1
+               dosym libOpenCL.so.1 /usr/${inslibdir}/libOpenCL.so
+       fi
+}
+
+pkg_preinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_postinst
+       fi
+
+       # Clean the dynamic libGL stuff's home to ensure
+       # we dont have stale libs floating around
+       if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
+               rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
+       fi
+       # Make sure we nuke the old nvidia-glx's env.d file
+       if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
+               rm -f "${ROOT}"/etc/env.d/09nvidia
+       fi
+}
+
+pkg_postinst() {
+       if use kernel_linux; then
+               linux-mod_pkg_postinst
+       fi
+
+       # Switch to the nvidia implementation
+       eselect opengl set --use-old nvidia
+
+       readme.gentoo_print_elog
+}
+
+pkg_postrm() {
+       if use kernel_linux; then
+               linux-mod_pkg_postrm
+       fi
+       eselect opengl set --use-old xorg-x11
+}