# nvidia-drivers-313.18 failed with kernel 3.8.0

## Xywa

Hi,

I have similar problem like not long time ago with kernel 3.7.6.

[SOLVED] nvidia-drivers-313.18 failed with kernel 3.7.6

https://forums.gentoo.org/viewtopic-t-950612.html

This time, this sollution did not help:

https://forums.gentoo.org/viewtopic-t-950330.html

After:

```
ln -s /usr/src/linux/include/generated/uapi/linux/version.h /usr/src/linux/include/linux/version.h
```

I have:

```
>>> Source configured.                                                                                                                                        

>>> Compiling source in /mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/work ...                                                                     

 * Preparing nvidia module

make -j2 HOSTCC=x86_64-pc-linux-gnu-gcc CROSS_COMPILE=x86_64-pc-linux-gnu- 'LDFLAGS=-m elf_x86_64' ARCH=x86_64 IGNORE_CC_MISMATCH=yes V=1 SYSSRC=/usr/src/linux SYSOUT=/lib/modules/3.8.0-gentoo/build CC=x86_64-pc-linux-gnu-gcc clean module 

If you are using a Linux 2.4 kernel, please make sure

you either have configured kernel sources matching your

kernel or the correct set of kernel headers installed

on your system.

If you are using a Linux 2.6 kernel, please make sure

you have configured kernel sources matching your kernel

installed on your system. If you specified a separate

output directory using either the "KBUILD_OUTPUT" or

the "O" KBUILD parameter, make sure to specify this

directory with the SYSOUT environment variable or with

the equivalent nvidia-installer command line option.

Depending on where and how the kernel sources (or the

kernel headers) were installed, you may need to specify

their location with the SYSSRC environment variable or

the equivalent nvidia-installer command line option.

*** Unable to determine the target kernel version. ***

make: *** [select_makefile] Error 1

 * ERROR: x11-drivers/nvidia-drivers-313.18 failed (compile phase):

 *   emake failed

 * 

 * If you need support, post the output of `emerge --info '=x11-drivers/nvidia-drivers-313.18'`,

 * the complete build log and the output of `emerge -pqv '=x11-drivers/nvidia-drivers-313.18'`.

 * The complete build log is located at '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/temp/build.log'.

 * The ebuild environment file is located at '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/temp/environment'.

 * Working directory: '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/work/kernel'

 * S: '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/work/'

>>> Failed to emerge x11-drivers/nvidia-drivers-313.18, Log file:

>>>  '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/temp/build.log'

 * Messages for package x11-drivers/nvidia-drivers-313.18:

 * ERROR: x11-drivers/nvidia-drivers-313.18 failed (compile phase):

 *   emake failed

 * 

 * If you need support, post the output of `emerge --info '=x11-drivers/nvidia-drivers-313.18'`,

 * the complete build log and the output of `emerge -pqv '=x11-drivers/nvidia-drivers-313.18'`.

 * The complete build log is located at '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/temp/build.log'.

 * The ebuild environment file is located at '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/temp/environment'.

 * Working directory: '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/work/kernel'

 * S: '/mnt/video/tmp/portage/x11-drivers/nvidia-drivers-313.18/work/'

```

----------

## the.root

I added a patch and updated the ebuild to include it.

Basically just needed :

```

    --- a/kernel/conftest.sh

    +++ b/kernel/conftest.sh

    @@ -160,6 +160,7 @@ build_cflags() {

     

         if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then

             CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include"

    +        CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include/uapi"

             CFLAGS="$CFLAGS -I$OUTPUT/arch/x86/include/generated"

             CFLAGS="$CFLAGS -I$OUTPUT/arch/x86/include/generated/uapi"

         elif [ "$ARCH" = "arm" ]; then

    --

```

ebuild : http://pastebin.com/6vn2D6qB

patch  : http://pastebin.com/f4RJagZp

----------

## platojones

Thanks for the patch.  It works.

----------

## the.root

 *platojones wrote:*   

> Thanks for the patch.  It works.

 

NP, also added to: https://bugs.gentoo.org/show_bug.cgi?id=458382

----------

## HTS

Patch fixed it for me as well!

----------

## FatherBusa

I should certainly know this, since I've been using Gentoo for many years, but how do you do this?  How do you apply this patch?

----------

## giorgos

 *FatherBusa wrote:*   

> I should certainly know this, since I've been using Gentoo for many years, but how do you do this?  How do you apply this patch?

 

Just download and move the patch to /etc/portage/patches/x11-drivers/nvidia-drivers.

----------

## FatherBusa

 *Quote:*   

> Just download and move the patch to /etc/portage/patches/x11-drivers/nvidia-drivers.

 

Outstanding.  Had no idea portage was so clever.  :Wink: 

Thanks!

----------

## cdstealer

kudos the.root  :Smile: 

----------

## cybermc75

Sorry for my noob question:

My system works perfectly with gentoo kernel 3.5.9 and nvidia-drivers-304.64.

Updating, kernel 3.7.9 came in.

The new kernel works, but X complain about nvidia module.

module-rebuild tried to rebuild nvidia-drivers-304.64, but it was impossible for me to make it work, because the driver "cannot detrmine the kernel version". I tried the patches for a while, then I realize these are for newer version of nvidia driver.

Do you think it's better for me to unmask newer version of nvidia or wait it to be stable?

Or is there any magical way to use the old module with the new kernel, or some miracle-patch to apply to 304.64 to build it?

Consider that my old PC (Celeron 2.8GHz) has:

01:00.0 VGA compatible controller: NVIDIA Corporation G72 [GeForce 7300 SE/7200 GS] (rev a1)

Thanks.

----------

## Gusar

You have a Geforce 7, so you can't use drivers newer than 304.64. Your only options are either patch the driver, or use an older kernel. Well, there's a third option - Nvidia releases a new version of the 304.xx branch. I have a feeling Nvidia will be releasing new versions for all their branches soon, but since Nvidia never provides any plans, there's no way to tell when exactly "soon" is  :Smile: 

----------

## cybermc75

Thanks Gusar.

There's no reason for me to run ahead new releases. But I learned to avoid my system to be too old.

Just to know, where I can find information about compatibility of nvidia-drivers version and kernels and compatible hardware?

Maybe the.root can give me some tip to make a good patch. The problem is about new /include/uapi folder in the kernel.

Adapting the pacth you gave for 313.18 leads to a missing asm-generic/types.h in include/asm/types.h or something like that.

However, I'm in a good situation to experiment at the moment.

----------

## Gusar

 *cybermc75 wrote:*   

> Just to know, where I can find information about compatibility of nvidia-drivers version and kernels and compatible hardware?

 

Hardware compatibility is very simple: 173.xx for Geforce FX 5, 304.xx for Geforce 6/7, newer versions for Geforce 8 and up.

Kernel compatibility is not so simple. There's no fixed point of info, things change dynamically. When problems arise, people post about them on distro forums, and at the nvidia forum: https://devtalk.nvidia.com/default/board/98/linux/. So when you hit problems, you search the forums. Sometimes you'll find patches, sometimes you'll be told to stay with an older kernel for the time being. That's pretty much that.

New driver releases are announced here: https://devtalk.nvidia.com/default/board/99/unix-graphics-announcements-and-news/

----------

## cybermc75

Thanks again, gusar.

 I found https://devtalk.nvidia.com/default/topic/525935/linux/please-update-310-xx-drivers-for-linux-3-7-3-8-compatibility/2/ and similar.

Let's wait for a while for this new release, or a NVIDIA supported patch.[/url]

Ciao

----------

## Gusar

Just noticed Arch has patches for 304.xx and kernel 3.7: https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/nvidia-304xx

Also, kernel 3.7 and 3.8 patches for 313.18: https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/nvidia

----------

## Olis

 *Gusar wrote:*   

> Hardware compatibility is very simple: 173.xx for Geforce FX 5, 304.xx for Geforce 6/7, newer versions for Geforce 8 and up.

 

I was also hit by the "Unable to determine the target kernel version" problem when I tried to update the kernel from 3.6.11 to the now stable 3.7.9.

My system is using an NVIDIA GeForce GT 530 (HP OEM, 14 month old), how do I know whether this a Geforce 5, 6, 7, 8 or up? I'm currently using nvidia-drivers-304.64, higher versions are marked as unstable here that's why I'm not using them.

I also found bug 447566 but it seems at the moment there's only an official patch for the latest unstable version of the driver (313.18). Just wondering that 3.7.9 was moved to the stable tree knowing that probably a lot of people using NVIDIA graphic cards will run into problems. Or is my 14 month old HP system already too old for current kernels?

For now I've switched back to kernel 3.6.11 and masked kernels 3.7.0 and above.

Regards,

Oliver

----------

## Gusar

 *Olis wrote:*   

> how do I know whether this a Geforce 5, 6, 7, 8 or up?

 

Wikipedia knows everything: http://en.wikipedia.org/wiki/GeForce_series#Generations. Well, probably not everything  :Smile: , but that list is very nice.

 *Olis wrote:*   

> I also found bug 447566 but it seems at the moment there's only an official patch for the latest unstable version of the driver (313.18 ).

 

Look more closely, there's patches for 304.64 too in that bug. Or you use the links to the Arch patches I gave above. But since your 530 is "up", you can use 313.18

----------

## aCOSwt

 *Olis wrote:*   

> Just wondering that 3.7.9 was moved to the stable tree knowing that probably a lot of people using NVIDIA graphic cards will run into problems.

 

There are indeed tons of reasons for questioning the stabilization of the 3.7.9, regressions with USB, deblobbing broken... but... the NVIDIA problem is not a valid one.

Kernel is first. It's stabilization must not be submitted to the availability of whatever driver, even less with the availability of a proprietary driver. You get in kernel the code needed for driving your Nvidia and this one builds and works with no known regression compared to last stable kernel release !

----------

## Olis

 *Gusar wrote:*   

>  *Olis wrote:*   how do I know whether this a Geforce 5, 6, 7, 8 or up? 
> 
> Wikipedia knows everything: http://en.wikipedia.org/wiki/GeForce_series#Generations. Well, probably not everything , but that list is very nice.

 

Yes, I checked Wikipedia few minutes after my post and found that the 530 belongs to "up".   :Smile: 

 *Gusar wrote:*   

> Look more closely, there's patches for 304.64 too in that bug. Or you use the links to the Arch patches I gave above. But since your 530 is "up", you can use 313.18

 

I saw that patch, but while 313.18 already received an "offical" patch (in portage) 304.64 is still broken when using the stable kernel. I think I will try nvidia-driver-313.18 next, but this has to wait until sunday.

Oliver

----------

## Olis

 *aCOSwt wrote:*   

> There are indeed tons of reasons for questioning the stabilization of the 3.7.9, regressions with USB, deblobbing broken... but... the NVIDIA problem is not a valid one.
> 
> Kernel is first. It's stabilization must not be submitted to the availability of whatever driver, even less with the availability of a proprietary driver. You get in kernel the code needed for driving your Nvidia and this one builds and works with no known regression compared to last stable kernel release !

 

I don't question the stabilization of kernel 3.7.9, but it would be nice to get a warning that this kernel will not work with the stable Nvidia driver. This could save a lot of people time and frustration.

Ok, I found a simple fix, just add ">=sys-kernel/gentoo-sources-3.7.0" to /etc/portage/package.mask and everything is fine again.

----------

## juantxorena

 *aCOSwt wrote:*   

> 
> 
> There are indeed tons of reasons for questioning the stabilization of the 3.7.9, regressions with USB, deblobbing broken... but... the NVIDIA problem is not a valid one.
> 
> Kernel is first. It's stabilization must not be submitted to the availability of whatever driver, even less with the availability of a proprietary driver. You get in kernel the code needed for driving your Nvidia and this one builds and works with no known regression compared to last stable kernel release !

 

And what's the reason of not applying a patch for nvidia-drivers so it can compile with the lastest stable version of the kernel, a patch that has been around in bugzilla december?

----------

## aCOSwt

 *juantxorena wrote:*   

>  *aCOSwt wrote:*   
> 
> There are indeed tons of reasons for questioning the stabilization of the 3.7.9, regressions with USB, deblobbing broken... but... the NVIDIA problem is not a valid one.
> 
> Kernel is first. It's stabilization must not be submitted to the availability of whatever driver, even less with the availability of a proprietary driver. You get in kernel the code needed for driving your Nvidia and this one builds and works with no known regression compared to last stable kernel release ! 
> ...

 

This is another good question!

I believe you'll find its answer in Doug Goldstein's comment #2 ("We support what NVIDIA supports")

----------

## aCOSwt

 *Olis wrote:*   

> it would be nice to get a warning that this kernel will not work with the stable Nvidia driver. This could save a lot of people time and frustration.

 

I think you are correct!

----------

## juantxorena

 *aCOSwt wrote:*   

> 
> 
> This is another good question!
> 
> I believe you'll find its answer in Doug Goldstein's comment #2 ("We support what NVIDIA supports")

 

Well, it's a stupid policy, if you ask me. It may be OK in most of the cases, but when a conflict appears like in this case, a conflict that in the better case is a nuisance, and in the worst a non-working system for a inexperienced user, sticking to that without any sign of adaptability is stubborn and childish.

----------

## NeddySeagoon

the.roots patch worked for me

Just drop it into /etc/portage/patches/x11-drivers/nvidia-drivers-313.18/kernel-3.8.0.patch and portage does the rest.

----------

## DawgG

GREAT, THX for the patch & ebuild. Worked for me, too. Of course, i'm completely ~unstable  :wink:

----------

## tld

 *Gusar wrote:*   

>  *Olis wrote:*   how do I know whether this a Geforce 5, 6, 7, 8 or up? 
> 
> Wikipedia knows everything: http://en.wikipedia.org/wiki/GeForce_series#Generations. Well, probably not everything , but that list is very nice.
> 
>  *Olis wrote:*   I also found bug 447566 but it seems at the moment there's only an official patch for the latest unstable version of the driver (313.18 ). 
> ...

 

My card requires the 304 drivers.  I've applied the patch in that bug for 3.7.9 (nvidia-drivers-304.64-kernel-3.7.patch).  I can see it's applying properly:

```
 * Converting /kernel/Makefile.kbuild to use M= instead of SUBDIRS= ...                                                                                                                 [ ok ]

 * Applying user patches from /etc/portage/patches//x11-drivers/nvidia-drivers-304.64 ...

 *   nvidia-drivers-304.64-kernel-3.7.patch ...                                                                                                                                         [ ok ]

 * Done with patching

```

...but it's still failing with the same "Unable to determine the target kernel version" error.  I have an older x86 system.  Is that patch possibly not for that??

EDIT: Comments in that bug seem to imply that even with that patch I need to symlink the version.h file.  Is that correct?  I'm a little confused as to exactly what I need to symlink there.

EDIT: OK...I needed the patch plus the following:

```
ln -s /usr/src/linux/include/generated/uapi/linux/version.h /usr/src/linux/include/linux/version.h
```

TomLast edited by tld on Mon Feb 25, 2013 3:26 pm; edited 2 times in total

----------

## Gusar

Have you tried the Arch patches? There's two of them. The link to the patches is in one of my previous posts in this thread.

----------

## dewhite

 *Olis wrote:*   

>  *Gusar wrote:*   Hardware compatibility is very simple: 173.xx for Geforce FX 5, 304.xx for Geforce 6/7, newer versions for Geforce 8 and up. 
> 
> I was also hit by the "Unable to determine the target kernel version" problem when I tried to update the kernel from 3.6.11 to the now stable 3.7.9.
> 
> My system is using an NVIDIA GeForce GT 530 (HP OEM, 14 month old), how do I know whether this a Geforce 5, 6, 7, 8 or up? I'm currently using nvidia-drivers-304.64, higher versions are marked as unstable here that's why I'm not using them.
> ...

 

Just wanted to chime in that I am running a newly deprecated 'legacy' 7800GT, and installed kernel 3.7.9 stable today - which makes my flavor of this issue: getting 304.64 to build with 3.7.9.  Reading the bug report provided the information that eventually got it working for me.  Specifically comment #43 was the solution to my specific problem.  Also, keep in mind that it's important that the conftest.patch be applied before the kernel-3.7.patch, so best to make sure they are named as such when copied or moved into your /etc/portage/patches/x11-drivers/nvidia-drivers/ folder.  I also added:

```
>=x11-drivers/nvidia-drivers-305.0.0
```

to /etc/portage/packages.mask to keep higher versions of the driver which are not compatible with my hardware from installing.

Thanks all!

p.s. This is a dumb problem to have - likely to agitate myriad newer users; but a good introduction to how useful patches can be...

----------

## tld

 *dewhite wrote:*   

> 
> 
> Just wanted to chime in that I am running a newly deprecated 'legacy' 7800GT, and installed kernel 3.7.9 stable today - which makes my flavor of this issue: getting 304.64 to build with 3.7.9.  Reading the bug report provided the information that eventually got it working for me.  Specifically comment #43 was the solution to my specific problem.  Also, keep in mind that it's important that the conftest.patch be applied before the kernel-3.7.patch, so best to make sure they are named as such when copied or moved into your /etc/portage/patches/x11-drivers/nvidia-drivers/ folder.

 

Thanks!  Just to confirm, when I added that conftest.patch in addition to the nvidia-drivers-304.64-kernel-3.7.patch I no longer needed that symlink mentioned above to compile 304.64.

Tom

----------

## tld

Just so I don't go nuts when it comes time to upgrade my MythTV front end...that machine has a newer card and will use the 313.18 driver.

What patch (or patches) will I need for that with the 3.7.9 kernel?  I'm not seeing anything that quite clears that up.

Tom

----------

## tld

 *tld wrote:*   

> What patch (or patches) will I need for that with the 3.7.9 kernel?  I'm not seeing anything that quite clears that up.
> 
> 

 

For anyone interested:  To install 313.18 under kernel 3.7.9 I just needed to apply the nvidia-drivers-313.18-linux-3.8.patch patch, as the version checking patch is already in the current portage version of nvidia-drivers-313.18.

Also note that I added a patch to that bug for the current stable x11-drivers/nvidia-drivers-310.32 driver that works with kernel 3.7.9.  I decided I didn't want to use 313.18 yet unless it was necessary.

Tom

----------

## kbzium

And if all of these fail, you can always put

"x11-drivers/nvidia-drivers ~amd64" into your package.keywords file.

It helped me... no pathing needed. Works just fine!

----------

## Xywa

Have any one tried 3.8.1?

----------

## Chiitoo

 *Xywa wrote:*   

> Have any one tried 3.8.1?

 

Just compiled and installed a while ago.

I sort of skipped 3.8.0, so I didn't get to be hit with the version blah, but I still needed to add the

```
CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include/uapi"
```

that was mentioned earlier.

----------

## Xywa

3.8.1 do not wok either for me  :Sad: 

----------

## Chiitoo

 *Xywa wrote:*   

> 3.8.1 do not wok either for me 

 

You mean to say it doesn't work at all, even with them patches?

----------

## Xywa

 *Chiitoo wrote:*   

>  *Xywa wrote:*   3.8.1 do not wok either for me  
> 
> You mean to say it doesn't work at all, even with them patches?

 

I mean this one 3.8.1 form portage without patches.

----------

## gerard27

Works fine for me with patches.

Gerard.

Edit: And I did not rename the patch.

----------

## Chiitoo

 *Xywa wrote:*   

>  *Chiitoo wrote:*    *Xywa wrote:*   3.8.1 do not wok either for me  
> 
> You mean to say it doesn't work at all, even with them patches? 
> 
> I mean this one 3.8.1 form portage without patches.

 

Yeah, at least for the 313.18 it still requires the

```
Applying nvidia-drivers-313.18-builddir-config.patch ...

Applying nvidia-drivers-313.18-linux-3.7+.patch ...

Applying kernel-blubb.patch ...
```

patches (from which the 'blubb' one would be pretty much the same as to what the.root posted here).

The 3.7+ comes with Portage already though, which I was referring to with 'not getting to be hit with the version thingy'.

----------

## artbody

Thx for the ideas

304.xx for Geforce 6/7

my.keyword

 *Quote:*   

> >=x11-drivers/nvidia-drivers-305.0.0 ~amd64 

 

make.conf

```
CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include/uapi"
```

+

```
ln -s /usr/src/linux/include/generated/uapi/linux/version.h /usr/src/linux/include/linux/version.h
```

then 

```
emerge -uDN nvidia-drivers
```

brings in the newest version (march 4th 2013 ) nvidia-drivers-304.84

works fine without pathing anything

----------

## cybermc75

nvidia-drivers-304.84 on GeForce G72 (7300SE / 7200 GS) works with kernel 3.7.10 without any patch.

As announced here https://devtalk.nvidia.com/default/topic/533430, this version is compatible with recent kernel versions.

Kernel 3.5.7 with nvidia-drivers-304.64 was my previously running config.

Sunday, during my weekly update, my previous working configuration was broken by portage cause by a wrong version of nvidia-drivers update (even if a message has warned me about it). I'm not sure why before I was able to update the system without any package.mask set.

Some observations:

As stated here https://wiki.gentoo.org/wiki/NVidia/nvidia-drivers I had to mask >305 versions of the drivers.

/etc/portage/package.mask

```
>=x11-drivers/nvidia-drivers-305.0.0
```

This setting is enough to take the old kernel working again (running emerge nvidia-drivers again, take 304.64 back).

To bring 304.84 in with portage I had to :

/etc/portage/package.accept_keywords

```
x11-drivers/nvidia-drivers ~x86
```

(I have an x86 32bit architecture)

Otherwise portage compiles 304.64 which is stable but not working (without patches) with new kernels.

304.84 can be set as stable for me.

Any comment appreciated.

----------

## dman777

Hmm.... I see the title of the roots.patch is nvidia-drivers-313.18-linux-3.8+.patch. Will this patch work with the 3.7.10 kernel? I need to compile x11-drivers/nvidia-drivers-304.64 with it.

----------

## the.root

 *dman777 wrote:*   

> Hmm.... I see the title of the roots.patch is nvidia-drivers-313.18-linux-3.8+.patch. Will this patch work with the 3.7.10 kernel? I need to compile x11-drivers/nvidia-drivers-304.64 with it.

 

You'll want to check out the bug https://bugs.gentoo.org/show_bug.cgi?id=447566 to find the right patch. There's one for 304.64 & kernel-3.7 (https://bugs.gentoo.org/attachment.cgi?id=338262 - i think).

----------

## dman777

i am trying to add a patch so i can compile nvidia drivers with kernel 3.7.0. i placed     epatch "${FILESDIR}"/${PN}-313.18-linux-3.7+.patch #447566" in the ebuild so it would look for the patch. but when  i do a "ebuild nvidia-drivers-310.32.ebuild digest" i get an error. this is a new system build so not sure if the error is from python/portage or the ebuild itself.

```
calhost nvidia-drivers-310.32 # cat nvidia-drivers-310.32.ebuild 

# Copyright 1999-2013 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/x11-drivers/nvidia-drivers/nvidia-drivers-310.32.ebuild,v 1.7 2013/03/07 16:14:25 jer Exp $

EAPI=4

inherit eutils flag-o-matic linux-info linux-mod multilib nvidia-driver \

   portability toolchain-funcs unpacker user udev

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 X11 driver and GLX libraries"

HOMEPAGE="http://www.nvidia.com/"

SRC_URI="x86? ( ftp://download.nvidia.com/XFree86/Linux-x86/${PV}/${X86_NV_PACKAGE}.run )

    amd64? ( ftp://download.nvidia.com/XFree86/Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )

    amd64-fbsd? ( ftp://download.nvidia.com/XFree86/FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )

    x86-fbsd? ( ftp://download.nvidia.com/XFree86/FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )"

LICENSE="GPL-2 NVIDIA"

SLOT="0"

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-admin/eselect-opencl

   kernel_linux? ( >=sys-libs/glibc-2.6.1 )

   multilib? ( app-emulation/emul-linux-x86-xlibs )

   X? (

      <x11-base/xorg-server-1.14.99

      >=app-admin/eselect-opengl-1.0.9

   )"

DEPEND="${COMMON}

   kernel_linux? (

      virtual/linux-sources

   )"

RDEPEND="${COMMON}

   acpi? ( sys-power/acpid )

   tools? (

      dev-libs/atk

      dev-libs/glib

      x11-libs/gdk-pixbuf

      x11-libs/gtk+:2

      x11-libs/libX11

      x11-libs/libXext

      x11-libs/pango[X]

      || ( x11-libs/pangox-compat <x11-libs/pango-1.31[X] )

   )

   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 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."

   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}"/nvidia-drivers-pax-const.patch

       epatch "${FILESDIR}"/nvidia-drivers-pax-usercopy.patch

   fi

        epatch "${FILESDIR}"/${PN}-313.18-builddir-config.patch

        epatch "${FILESDIR}"/${PN}-313.18-linux-3.7+.patch #447566

        epatch "${FILESDIR}"/${PN}-313.18-linux-3.8+.patch

   # 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

      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

      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

      [ -f "${FILESDIR}/nvidia-169.07" ] || die "nvidia missing in FILESDIR"

      sed -e 's:PACKAGE:'${PF}':g' \

         -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07 > \

         "${WORKDIR}"/nvidia

      insinto /etc/modprobe.d

      newins "${WORKDIR}"/nvidia nvidia.conf || die

      # Ensures that our device nodes are created when not using X

      exeinto "$(udev_get_udevdir)"

      doexe "${FILESDIR}"/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" || die

      fi

      exeinto /boot/modules

      doexe "${S}/src/nvidia.ko" || die

   fi

   # NVIDIA kernel <-> userspace driver config lib

   donvidia ${NV_OBJ}/libnvidia-cfg.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 || die "failed to install 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-proxy-control.1.gz"

   fi

   # Helper Apps

   exeinto /opt/bin/

   if use X; then

      doexe ${NV_OBJ}/nvidia-xconfig || die

   fi

   if use kernel_linux ; then

      doexe ${NV_OBJ}/nvidia-debugdump || die

      doexe ${NV_OBJ}/nvidia-cuda-proxy-control || die

      doexe ${NV_OBJ}/nvidia-cuda-proxy-server || die

      doexe ${NV_OBJ}/nvidia-smi || die

      newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi

   fi

   if use tools; then

      doexe ${NV_OBJ}/nvidia-settings || die

   fi

   exeinto /usr/bin/

   doexe ${NV_OBJ}/nvidia-bug-report.sh || die

   # 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 nvidia-drivers-settings.png

      domenu "${FILESDIR}"/nvidia-drivers-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"

}

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}

      else

         donvidia ${libdir}/tls/libnvidia-tls.so ${NV_SOVER}

      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}

      donvidia ${libdir}/libnvidia-opencl.so ${NV_SOVER}

   fi

}

pkg_preinst() {

   use kernel_linux && linux-mod_pkg_preinst

   # 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

   elog "You must be in the video group to use the NVIDIA device"

   elog "For more info, read the docs at"

   elog "http://www.gentoo.org/doc/en/nvidia-guide.xml#doc_chap3_sect6"

   elog

   elog "This ebuild installs a kernel module and X driver. Both must"

   elog "match explicitly in their version. This means, if you restart"

   elog "X, you must modprobe -r nvidia before starting it back up"

   elog

   elog "To use the NVIDIA GLX, run \"eselect opengl set nvidia\""

   elog

   elog "To use the NVIDIA CUDA/OpenCL, run \"eselect opencl set nvidia\""

   elog

   elog "NVIDIA has requested that any bug reports submitted have the"

   elog "output of /opt/bin/nvidia-bug-report.sh included."

   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

}

localhost nvidia-drivers-310.32 # ebuild nvidia-drivers-310.32.ebuild digest 

Traceback (most recent call last):

  File "/usr/bin/ebuild", line 335, in <module>

    vartree=portage.db[portage.root]['vartree'])

  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 31, in __call__

    return result(*args, **kwargs)

  File "/usr/lib64/portage/pym/portage/package/ebuild/doebuild.py", line 981, in doebuild

    return not digestgen(mysettings=mysettings, myportdb=mydbapi)

  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 31, in __call__

    return result(*args, **kwargs)

  File "/usr/lib64/portage/pym/portage/package/ebuild/digestgen.py", line 45, in digestgen

    for cpv in fetchlist_dict:

  File "/usr/lib64/portage/pym/portage/dbapi/porttree.py", line 1123, in __iter__

    return iter(self.portdb.cp_list(self.cp, mytree=self.mytree))

TypeError: cp_list() got an unexpected keyword argument 'mytree'

localhost nvidia-drivers-310.32 #
```

----------

## Gusar

Instead of playing around with patches, why don't you just use 313.26 (or 304.84 if you need the legacy release)? They're in portage even, ~arch currently, but it's a self-contained package, it's no problem unmasking just this one package.

----------

