diff --git a/pkgs/os-specific/linux/nvidia-x11/acpixf.patch b/pkgs/os-specific/linux/nvidia-x11/acpixf.patch new file mode 100644 index 000000000000..c94641c69192 --- /dev/null +++ b/pkgs/os-specific/linux/nvidia-x11/acpixf.patch @@ -0,0 +1,27 @@ +diff -pur 96.43.20/conftest.sh 96.43.20-3.4/conftest.sh +--- 96.43.20/conftest.sh 2011-07-18 10:51:11.000000000 +0400 ++++ 96.43.20-3.4/conftest.sh 2012-06-16 00:04:22.870746239 +0400 +@@ -908,6 +908,7 @@ compile_test() { + # + echo "$CONFTEST_PREAMBLE + #include ++ #include + void conftest_acpi_walk_namespace(void) { + acpi_walk_namespace(); + }" > conftest$$.c +@@ -923,6 +924,7 @@ compile_test() { + + echo "$CONFTEST_PREAMBLE + #include ++ #include + void conftest_acpi_walk_namespace(void) { + acpi_walk_namespace(0, NULL, 0, NULL, NULL, NULL, NULL); + }" > conftest$$.c +@@ -939,6 +941,7 @@ compile_test() { + + echo "$CONFTEST_PREAMBLE + #include ++ #include + void conftest_acpi_walk_namespace(void) { + acpi_walk_namespace(0, NULL, 0, NULL, NULL, NULL); + }" > conftest$$.c diff --git a/pkgs/os-specific/linux/nvidia-x11/builder-legacy.sh b/pkgs/os-specific/linux/nvidia-x11/builder-legacy.sh index e0af21759c9d..6062566cbfb1 100755 --- a/pkgs/os-specific/linux/nvidia-x11/builder-legacy.sh +++ b/pkgs/os-specific/linux/nvidia-x11/builder-legacy.sh @@ -14,6 +14,12 @@ buildPhase() { cd usr/src/nv/ + shopt -s nullglob + + for a in $kpatches; do + patch -p1 < $a + done + # Workaround: get it to build on kernels that have CONFIG_XEN # set. Disable the test, apply a patch to disable the Xen # functionality. diff --git a/pkgs/os-specific/linux/nvidia-x11/generated.patch b/pkgs/os-specific/linux/nvidia-x11/generated.patch new file mode 100644 index 000000000000..6cf7a93c6445 --- /dev/null +++ b/pkgs/os-specific/linux/nvidia-x11/generated.patch @@ -0,0 +1,12 @@ +diff -pur 173.14.31/conftest.sh 173.14.31-3.3/conftest.sh +--- 173.14.31/conftest.sh 2011-07-18 09:49:58.000000000 +0400 ++++ 173.14.31-3.3/conftest.sh 2012-04-09 19:33:34.407928432 +0400 +@@ -123,7 +123,7 @@ build_cflags() { + CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" + + if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then +- CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include" ++ CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$SOURCES/arch/x86/include/generated" + fi + if [ -n "$BUILD_PARAMS" ]; then + CFLAGS="$CFLAGS -D$BUILD_PARAMS" diff --git a/pkgs/os-specific/linux/nvidia-x11/legacy96.nix b/pkgs/os-specific/linux/nvidia-x11/legacy96.nix index 156484f53e1f..fd27a989c079 100644 --- a/pkgs/os-specific/linux/nvidia-x11/legacy96.nix +++ b/pkgs/os-specific/linux/nvidia-x11/legacy96.nix @@ -26,6 +26,16 @@ stdenv.mkDerivation { inherit versionNumber kernel; + # Only for kernels 3.4 and over + # Patches taken from arch linux AUR + # https://aur.archlinux.org/packages.php?ID=57698 + kpatches = stdenv.lib.optionals (stdenv.lib.strings.versionOlder "3.4" kernel.version) + [ ./acpixf.patch + ./generated.patch + ./patchlevel.patch + ./switch_to.patch + ]; + dontStrip = true; glPath = stdenv.lib.makeLibraryPath [xlibs.libXext xlibs.libX11 xlibs.libXrandr]; diff --git a/pkgs/os-specific/linux/nvidia-x11/patchlevel.patch b/pkgs/os-specific/linux/nvidia-x11/patchlevel.patch new file mode 100644 index 000000000000..256922ca966d --- /dev/null +++ b/pkgs/os-specific/linux/nvidia-x11/patchlevel.patch @@ -0,0 +1,59 @@ +diff -pur 96.43.20-t1/conftest.sh 96.43.20-t2/conftest.sh +--- 96.43.20-t1/conftest.sh 2012-06-16 17:14:47.206589267 +0400 ++++ 96.43.20-t2/conftest.sh 2012-06-16 15:35:45.049203248 +0400 +@@ -1303,10 +1303,14 @@ case "$5" in + MAKEFILE=$HEADERS/../Makefile + + if [ -f $MAKEFILE ]; then ++ VERSION=$(grep "^VERSION =" $MAKEFILE | cut -d " " -f 3) + PATCHLEVEL=$(grep "^PATCHLEVEL =" $MAKEFILE | cut -d " " -f 3) + +- if [ -z "$PATCHLEVEL" ]; then ++ if [ -z "$PATCHLEVEL" -o -z "$VERSION" ]; then + exit 1 ++ elif [ "$VERSION" = '3' ]; then ++ echo 6 ++ exit 0 + else + echo $PATCHLEVEL + exit 0 +@@ -1426,10 +1430,11 @@ case "$5" in + # kernel older than 2.6.6, that's all we require to + # build the module. + # ++ VERSION=$(grep "^VERSION =" $MAKEFILE | cut -d " " -f 3) + PATCHLEVEL=$(grep "^PATCHLEVEL =" $MAKEFILE | cut -d " " -f 3) + SUBLEVEL=$(grep "^SUBLEVEL =" $MAKEFILE | cut -d " " -f 3) + +- if [ -n "$PATCHLEVEL" -a $PATCHLEVEL -ge 6 \ ++ if [ "$VERSION" = '2' -a -n "$PATCHLEVEL" -a $PATCHLEVEL -ge 6 \ + -a -n "$SUBLEVEL" -a $SUBLEVEL -le 5 ]; then + SELECTED_MAKEFILE=Makefile.kbuild + RET=0 +@@ -1525,11 +1530,12 @@ case "$5" in + # This source tree is not configured, but includes + # the top-level Makefile. + # ++ VERSION=$(grep "^VERSION =" $MAKEFILE | cut -d " " -f 3) + PATCHLEVEL=$(grep "^PATCHLEVEL =" $MAKEFILE | cut -d " " -f 3) + SUBLEVEL=$(grep "^SUBLEVEL =" $MAKEFILE | cut -d " " -f 3) + +- if [ -n "$PATCHLEVEL" -a -n "$SUBLEVEL" ]; then +- echo 2.$PATCHLEVEL.$SUBLEVEL ++ if [ -n "$VERSION" -a -n "$PATCHLEVEL" -a -n "$SUBLEVEL" ]; then ++ echo $VERSION.$PATCHLEVEL.$SUBLEVEL + RET=0 + fi + fi +diff -pur 96.43.20-t1/Makefile.kbuild 96.43.20-t2/Makefile.kbuild +--- 96.43.20-t1/Makefile.kbuild 2011-07-18 10:51:11.000000000 +0400 ++++ 96.43.20-t2/Makefile.kbuild 2012-06-16 17:08:11.694605133 +0400 +@@ -132,7 +132,7 @@ MODULE_ROOT := /lib/modules/$(KERNEL_UNA + # + + TOPDIR ?= $(KERNEL_SOURCES) +-PATCHLEVEL ?= $(shell $(CONFTEST) kernel_patch_level) ++PATCHLEVEL := $(shell $(CONFTEST) kernel_patch_level) + + # + # Linux 2.4 uses the .o module extension. Linux 2.6, however, uses the .ko diff --git a/pkgs/os-specific/linux/nvidia-x11/switch_to.patch b/pkgs/os-specific/linux/nvidia-x11/switch_to.patch new file mode 100644 index 000000000000..51ffa7f83f15 --- /dev/null +++ b/pkgs/os-specific/linux/nvidia-x11/switch_to.patch @@ -0,0 +1,24 @@ +diff -pur 173.14.31-3.3/conftest.sh 173.14.31-3.4/conftest.sh +--- 173.14.31-3.3/conftest.sh 2012-04-09 19:33:34.407928432 +0400 ++++ 173.14.31-3.4/conftest.sh 2012-04-10 19:50:36.052346728 +0400 +@@ -465,7 +465,7 @@ compile_test() { + # and if it as an 'event' member. + # + echo "$CONFTEST_PREAMBLE +- #include ++ #include + #include + void conftest_pm_message_t(pm_message_t state) { + pm_message_t *p = &state; +diff -pur 173.14.31-3.3/nv-linux.h 173.14.31-3.4/nv-linux.h +--- 173.14.31-3.3/nv-linux.h 2011-07-18 09:49:58.000000000 +0400 ++++ 173.14.31-3.4/nv-linux.h 2012-04-10 19:53:04.853776013 +0400 +@@ -92,7 +92,7 @@ + #include + + #include /* do_div() */ +-#include /* cli, sli, save_flags */ ++#include /* cli, sli, save_flags */ + #include /* ioremap, virt_to_phys */ + #include /* access_ok */ + #include /* PAGE_OFFSET */