commit:     124075b43328286cdcf5437d208876c5b39bb6de
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 17 19:35:51 2022 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Fri Jun 17 19:55:05 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=124075b4

x11-drivers/nvidia-drivers: add 515.49.05:0/vulkan

Note that even though it is newer (for now), it is not recommended
to use the 0/vulkan branch unless you are involved in vulkan
application development, upstream bugs may not get fixed (aka it
adds vulkan features on top of old drivers and rebase occasionally).

Please report if packaging issues, as don't check masked 0/vulkan much.

Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 x11-drivers/nvidia-drivers/Manifest                |   2 +
 .../nvidia-drivers/nvidia-drivers-515.49.05.ebuild | 505 +++++++++++++++++++++
 2 files changed, 507 insertions(+)

diff --git a/x11-drivers/nvidia-drivers/Manifest 
b/x11-drivers/nvidia-drivers/Manifest
index 9bda66ad36d6..7bcceda03acf 100644
--- a/x11-drivers/nvidia-drivers/Manifest
+++ b/x11-drivers/nvidia-drivers/Manifest
@@ -6,6 +6,7 @@ DIST NVIDIA-Linux-x86_64-470.129.06.run 272145574 BLAKE2B 
9eb75456f3aa6cea13a66b
 DIST NVIDIA-Linux-x86_64-470.62.30.run 271859421 BLAKE2B 
13e4782f52d6b531cd8cf9f72066f6e54dc06f781da66c9babf7d747654a73eb8f36c4e95af7c04b9b8da74c4479843a0d31b9b294176c76d2905207a53a4ee8
 SHA512 
729f4242dd12c4c8560167f005c067cb69a8f0b6c4991836de569f7847c5126f136ff37561bc68738d4fdb00cd74acb03a7005bf0f35fa2d1a3d3d737c613abd
 DIST NVIDIA-Linux-x86_64-510.73.05.run 329250752 BLAKE2B 
dd79ad5a7c94cd50a832a224a5dcab7cb24368453417962ac63cb7dca6f7d9bfe0a41460df90f9793b9c8c2e42d1e3666c940cf9f869e18b201df385a66c7dd8
 SHA512 
c2ce41ee8112ad5450d6aa18f910da0870ac08a1ad0ab0d82a256b191c7826057afb3477e7a842244034c9eb9de37c6af919b0dd055bb90dd2a32d7e97a8c72c
 DIST NVIDIA-Linux-x86_64-515.48.07.run 360459673 BLAKE2B 
5f998024070a73f8dae4b5525c651055b311217c0d1d9e40a11e10ba0932b13b4902c47a5a444a461dd3cc1c99de7b21654c9e3bc4195bade22f94794e41d58a
 SHA512 
a8129334ce02e5decccc6b1c336723b58e0883f58ca1cef56288144278af996594dfa141882613453452cc8a0ed7d76839d6d1ecd30d11c73eacf21450524286
+DIST NVIDIA-Linux-x86_64-515.49.05.run 361416064 BLAKE2B 
7f2d9c9d418cb16fb154ff7130533c252a736bad92abe3f993212e837beb14db1882c56b539c81d170f0ea1e89a3cea3bd1f4dea6bddf5abd17687d011baf1bc
 SHA512 
a9f184699b40bad8bc3a98a8abdf609fcfeea9f477e4731dfd792dee84a0122eae247479c2b97b3bcf9628fed51802774ff81ba594fe8614c92b339c44bbac21
 DIST NVIDIA-kernel-module-source-515.48.07.tar.xz 7496780 BLAKE2B 
681bd8dd416763826e2d227fedf67a54613f8ab0feaa1d5be4c5d864cd52aaaa98b6fe8f301d0cf1d1334fd8fc3acb312949f46acdabcd141fd15df21789b165
 SHA512 
5535703d8de781149ea9175785fc04ba9b2ea1c39a524dcf7937941d951489edfb94e72b2bde70044ed682a209b8923e14fa5314e12c46a1fb9621ee8a2e3269
 DIST nvidia-installer-390.151.tar.bz2 150160 BLAKE2B 
373c0f26ca258d6e274891ec49f8ae768b3ba50cc1079b697e310c52fac7710b221591074497803b3e65a8fc9c2f49a493126de0907a117d6af1101d190b2b38
 SHA512 
027676209d1ba5fa3bf63d716562beb308c28b083f9411461112493f006afa69bcad7c95c479724a841f2790548924a3cf4b11ae95b70e33854ce0b2eff4b8f8
 DIST nvidia-installer-470.103.01.tar.bz2 146121 BLAKE2B 
06da3693cf8edba849b802f2255dcf2086ba3846f83ef19a02cb813ea2c07a6904f8a49e263018fb8b40c9fece7ab4422d95a50d12030ae6815ec60a7edac055
 SHA512 
b080f32394a6163c34e152561b80cca9277a53e0b38c5225b91daddc2169403e2ff4cf63a30b488ee0c3a954b21d32065b5624fb9dd33e672313909b9096de02
@@ -32,3 +33,4 @@ DIST nvidia-xconfig-470.103.01.tar.bz2 108687 BLAKE2B 
2e5de637f9ba7bb516fd1a6801
 DIST nvidia-xconfig-470.129.06.tar.bz2 108704 BLAKE2B 
71ead889bca8503e987bc00c71531a4fd1a779ba6e679da5bee7636bfb4c46ff2984fc3b7feadd296ec45b58730fee52c55e1eedc0b24a4ff0976357eed79b3c
 SHA512 
26955fbcd17e5d2caaadd0ff818cbdf93934d6cec5f29bb43fbc98bf300c9bc745f9e3dd977be1209a5f5a7f812d3fb9b2b33140ffc4b86789477661bb8c49c3
 DIST nvidia-xconfig-510.73.05.tar.bz2 109809 BLAKE2B 
4554555b543073281f7b2e3f2d3463f7b4e8a7c8a734663af0d6a3110d432dd8f9e14e4e0efbd93902ae1e8cd1afefd35838f0bf70a5a619b05119acef25aa1a
 SHA512 
bc992cd75e9e757f2e3edf35b38106362de0900085dec059b3b609bca3bc02fcac4a39a1481a7c9ca0e704fe0355e8f9620a1e8cc867e1c341d2b0df2cf47bf0
 DIST nvidia-xconfig-515.48.07.tar.bz2 110220 BLAKE2B 
54283c809f4d50337279727c70bed11e98b1422751663a1c77afb250917c28f269cecf6d75c1458051ed09bd826d9fdc7329b332d8e2118e6b3529f6a4e34bc1
 SHA512 
417bcb829fe578ccecea713780e5d3cbe79798d974ef66741c2b0fe3a87c6a236c719e369af44b297f0c42d82b33af76a61a0e205ad939684b56d258a0d37b0b
+DIST open-gpu-kernel-modules-515.49.05.tar.gz 7408161 BLAKE2B 
6fbabbb06f8ebd7605b4d2ab51301236cb3df0a3d301ba3d8b2f8d96a56ca6f88882cc451ea0cd95b9e5d110bc53c409ad7311f788a29861e7cd5b58a33d493f
 SHA512 
daa24d51b9986057c622b15d74185c21b2370a0169cef768a82e9f1a68387b85e547b8695f05c8da9559be0fdd398deadf7fe56c23955b365212091c3db180f9

diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-515.49.05.ebuild 
b/x11-drivers/nvidia-drivers/nvidia-drivers-515.49.05.ebuild
new file mode 100644
index 000000000000..62a10cbd7bd7
--- /dev/null
+++ b/x11-drivers/nvidia-drivers/nvidia-drivers-515.49.05.ebuild
@@ -0,0 +1,505 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MODULES_OPTIONAL_USE="driver"
+inherit desktop flag-o-matic linux-mod multilib readme.gentoo-r1 \
+       systemd toolchain-funcs unpacker user-info
+
+NV_KERNEL_MAX="5.15"
+NV_PIN="515.48.07"
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="https://developer.nvidia.com/vulkan-driver";
+SRC_URI="
+       https://developer.nvidia.com/vulkan-beta-${PV//.}-linux -> 
NVIDIA-Linux-x86_64-${PV}.run
+       $(printf "https://download.nvidia.com/XFree86/%s/%s-${NV_PIN}.tar.bz2 " 
\
+               nvidia-{installer,modprobe,persistenced,settings,xconfig}{,})
+       
https://github.com/NVIDIA/open-gpu-kernel-modules/archive/refs/tags/${PV}.tar.gz
+               -> open-gpu-kernel-modules-${PV}.tar.gz"
+# nvidia-installer is unused but here for GPL-2's "distribute sources"
+S="${WORKDIR}"
+
+LICENSE="NVIDIA-r2 BSD BSD-2 GPL-2 MIT ZLIB curl openssl"
+SLOT="0/vulkan"
+KEYWORDS="-* ~amd64"
+IUSE="+X abi_x86_32 abi_x86_64 +driver kernel-open persistenced +static-libs 
+tools wayland"
+REQUIRED_USE="kernel-open? ( driver )"
+
+COMMON_DEPEND="
+       acct-group/video
+       sys-libs/glibc
+       X? ( x11-libs/libpciaccess )
+       persistenced? (
+               acct-user/nvpd
+               net-libs/libtirpc:=
+       )
+       tools? (
+               dev-libs/atk
+               dev-libs/glib:2
+               dev-libs/jansson:=
+               media-libs/harfbuzz:=
+               x11-libs/cairo
+               x11-libs/gdk-pixbuf:2
+               x11-libs/gtk+:3
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/libXxf86vm
+               x11-libs/pango
+       )"
+RDEPEND="
+       ${COMMON_DEPEND}
+       X? (
+               media-libs/libglvnd[X,abi_x86_32(-)?]
+               x11-libs/libX11[abi_x86_32(-)?]
+               x11-libs/libXext[abi_x86_32(-)?]
+       )
+       wayland? (
+               gui-libs/egl-gbm
+               >=gui-libs/egl-wayland-1.1.7-r1
+               media-libs/libglvnd
+       )"
+DEPEND="
+       ${COMMON_DEPEND}
+       static-libs? (
+               x11-libs/libX11
+               x11-libs/libXext
+       )
+       tools? (
+               media-libs/libglvnd
+               sys-apps/dbus
+               x11-base/xorg-proto
+               x11-libs/libXrandr
+               x11-libs/libXv
+               x11-libs/libvdpau
+       )"
+BDEPEND="
+       sys-devel/m4
+       virtual/pkgconfig"
+
+QA_PREBUILT="lib/firmware/* opt/bin/* usr/lib*"
+
+PATCHES=(
+       "${FILESDIR}"/nvidia-modprobe-390.141-uvm-perms.patch
+       "${FILESDIR}"/nvidia-settings-390.144-desktop.patch
+       "${FILESDIR}"/nvidia-settings-390.144-no-gtk2.patch
+       "${FILESDIR}"/nvidia-settings-390.144-raw-ldflags.patch
+)
+
+pkg_setup() {
+       use driver || return
+
+       local CONFIG_CHECK="
+               PROC_FS
+               ~DRM_KMS_HELPER
+               ~SYSVIPC
+               ~!LOCKDEP
+               ~!SLUB_DEBUG_ON
+               ~!X86_KERNEL_IBT
+               !DEBUG_MUTEXES"
+       local ERROR_DRM_KMS_HELPER="CONFIG_DRM_KMS_HELPER: is not set but 
needed for Xorg auto-detection
+       of drivers (no custom config), and for wayland / nvidia-drm.modeset=1.
+       Cannot be directly selected in the kernel's menuconfig, and may need
+       selection of a DRM device even if unused, e.g. CONFIG_DRM_AMDGPU=m or
+       DRM_I915=y, DRM_NOUVEAU=m also acceptable if a module and not built-in."
+       local ERROR_X86_KERNEL_IBT="X86_KERNEL_IBT: is set, be warned the 
modules may not load with it.
+       If run into problems, either unset or pass ibt=off to the kernel."
+
+       use amd64 && kernel_is -ge 5 8 && CONFIG_CHECK+=" X86_PAT" #817764
+
+       use kernel-open && CONFIG_CHECK+=" MMU_NOTIFIER" #843827
+       local ERROR_MMU_NOTIFIER="CONFIG_MMU_NOTIFIER: is not set but needed to 
build with USE=kernel-open.
+       Cannot be directly selected in the kernel's menuconfig, and may need
+       selection of another option that requires it such as CONFIG_KVM."
+
+       MODULE_NAMES="
+               nvidia(video:kernel)
+               nvidia-drm(video:kernel)
+               nvidia-modeset(video:kernel)
+               nvidia-peermem(video:kernel)
+               nvidia-uvm(video:kernel)"
+       use kernel-open &&
+               
MODULE_NAMES=${MODULE_NAMES//:kernel/:kernel-module-source:kernel-module-source/kernel-open}
+
+       linux-mod_pkg_setup
+
+       [[ ${MERGE_TYPE} == binary ]] && return
+
+       BUILD_PARAMS='NV_VERBOSE=1 IGNORE_CC_MISMATCH=yes SYSSRC="${KV_DIR}" 
SYSOUT="${KV_OUT_DIR}"'
+       BUILD_TARGETS="modules"
+
+       if linux_chkconfig_present CC_IS_CLANG; then
+               ewarn "Warning: building ${PN} with a clang-built kernel is 
experimental"
+
+               BUILD_PARAMS+=' CC=${CHOST}-clang'
+               if linux_chkconfig_present LD_IS_LLD; then
+                       BUILD_PARAMS+=' LD=ld.lld'
+                       if linux_chkconfig_present LTO_CLANG_THIN; then
+                               # kernel enables cache by default leading to 
sandbox violations
+                               BUILD_PARAMS+=' ldflags-y=--thinlto-cache-dir= 
LDFLAGS_MODULE=--thinlto-cache-dir='
+                       fi
+               fi
+       fi
+
+       if kernel_is -gt ${NV_KERNEL_MAX/./ }; then
+               ewarn "Kernel ${KV_MAJOR}.${KV_MINOR} is either known to break 
this version of ${PN}"
+               ewarn "or was not tested with it. It is recommended to use one 
of:"
+               ewarn "  <=sys-kernel/gentoo-kernel-${NV_KERNEL_MAX}.x"
+               ewarn "  <=sys-kernel/gentoo-sources-${NV_KERNEL_MAX}.x"
+               ewarn "You are free to try or use /etc/portage/patches, but 
support will"
+               ewarn "not be given and issues wait until NVIDIA releases a 
fixed version"
+               ewarn "(Gentoo will not accept patches for this)."
+               ewarn
+               ewarn "Do _not_ file a bug report if run into issues."
+               ewarn
+       fi
+}
+
+src_prepare() {
+       # make patches usable across versions
+       rm nvidia-modprobe && mv nvidia-modprobe{-${NV_PIN},} || die
+       rm nvidia-persistenced && mv nvidia-persistenced{-${NV_PIN},} || die
+       rm nvidia-settings && mv nvidia-settings{-${NV_PIN},} || die
+       rm nvidia-xconfig && mv nvidia-xconfig{-${NV_PIN},} || die
+       mv open-gpu-kernel-modules-${PV} kernel-module-source || die
+
+       default
+
+       # prevent detection of incomplete kernel DRM support (bug #603818)
+       sed 's/defined(CONFIG_DRM/defined(CONFIG_DRM_KMS_HELPER/g' \
+               -i kernel{,-module-source/kernel-open}/conftest.sh || die
+
+       # adjust service files
+       sed 's/__USER__/nvpd/' \
+               
nvidia-persistenced/init/systemd/nvidia-persistenced.service.template \
+               > "${T}"/nvidia-persistenced.service || die
+       use !amd64 || sed -i "s|/usr|${EPREFIX}/opt|" 
systemd/system/nvidia-powerd.service || die
+
+       # enable nvidia-drm.modeset=1 by default with USE=wayland
+       cp "${FILESDIR}"/nvidia-470.conf "${T}"/nvidia.conf || die
+       use !wayland || sed -i '/^#.*modeset=1$/s/^#//' "${T}"/nvidia.conf || 
die
+
+       # makefile attempts to install wayland library even if not built
+       use wayland || sed -i 's/ WAYLAND_LIB_install$//' \
+               nvidia-settings/src/Makefile || die
+
+       # temporary option, nvidia will remove in the future
+       use !kernel-open ||
+               sed -i '/blacklist/a\
+\
+# Enable using kernel-open with workstation GPUs (experimental)\
+options nvidia NVreg_OpenRmEnableUnsupportedGpus=1' "${T}"/nvidia.conf || die
+}
+
+src_compile() {
+       tc-export AR CC CXX LD OBJCOPY OBJDUMP
+
+       NV_ARGS=(
+               PREFIX="${EPREFIX}"/usr
+               HOST_CC="$(tc-getBUILD_CC)"
+               HOST_LD="$(tc-getBUILD_LD)"
+               NV_USE_BUNDLED_LIBJANSSON=0
+               NV_VERBOSE=1 DO_STRIP= MANPAGE_GZIP= OUTPUTDIR=out
+               WAYLAND_AVAILABLE=$(usex wayland 1 0)
+               XNVCTRL_CFLAGS=-fPIC #840389
+       )
+
+       if use driver; then
+               if linux_chkconfig_present GCC_PLUGINS; then
+                       mkdir "${T}"/plugin-test || die
+                       echo "obj-m += test.o" > "${T}"/plugin-test/Kbuild || 
die
+                       > "${T}"/plugin-test/test.c || die
+                       if [[ $(LC_ALL=C make -C "${KV_OUT_DIR}" 
ARCH="$(tc-arch-kernel)" \
+                                       HOSTCC="$(tc-getBUILD_CC)" 
M="${T}"/plugin-test 2>&1) \
+                               =~ "error: incompatible gcc/plugin version" ]]; 
then
+                               ewarn "Warning: detected kernel was built with 
different gcc/plugin versions,"
+                               ewarn "you may need to 'make clean' and rebuild 
your kernel with the current"
+                               ewarn "gcc version (or re-emerge for 
distribution kernels, including kernel-bin)."
+                       fi
+               fi
+
+               linux-mod_src_compile
+       fi
+
+       emake "${NV_ARGS[@]}" -C nvidia-modprobe
+       use persistenced && emake "${NV_ARGS[@]}" -C nvidia-persistenced
+       use X && emake "${NV_ARGS[@]}" -C nvidia-xconfig
+
+       if use tools; then
+               # cflags: avoid noisy logs, only use here and set first to let 
override
+               # ldflags: abi currently needed if LD=ld.lld
+               CFLAGS="-Wno-deprecated-declarations ${CFLAGS}" \
+                       RAW_LDFLAGS="$(get_abi_LDFLAGS) $(raw-ldflags)" \
+                       emake "${NV_ARGS[@]}" -C nvidia-settings
+       elif use static-libs; then
+               emake "${NV_ARGS[@]}" -C nvidia-settings/src out/libXNVCtrl.a
+       fi
+}
+
+src_install() {
+       local libdir=$(get_libdir) libdir32=$(ABI=x86 get_libdir)
+
+       NV_ARGS+=( DESTDIR="${D}" LIBDIR="${ED}"/usr/${libdir} )
+
+       local -A paths=(
+               [APPLICATION_PROFILE]=/usr/share/nvidia
+               [CUDA_ICD]=/etc/OpenCL/vendors
+               
[EGL_EXTERNAL_PLATFORM_JSON]=/usr/share/egl/egl_external_platform.d
+               [FIRMWARE]=/lib/firmware/nvidia/${PV}
+               [GBM_BACKEND_LIB_SYMLINK]=/usr/${libdir}/gbm
+               [GLVND_EGL_ICD_JSON]=/usr/share/glvnd/egl_vendor.d
+               [VULKAN_ICD_JSON]=/usr/share/vulkan
+               [WINE_LIB]=/usr/${libdir}/nvidia/wine
+               [XORG_OUTPUTCLASS_CONFIG]=/usr/share/X11/xorg.conf.d
+
+               [GLX_MODULE_SHARED_LIB]=/usr/${libdir}/xorg/modules/extensions
+               [GLX_MODULE_SYMLINK]=/usr/${libdir}/xorg/modules
+               [XMODULE_SHARED_LIB]=/usr/${libdir}/xorg/modules
+       )
+
+       local skip_files=(
+               # nvidia_icd/layers(vulkan): skip with -X too as it uses 
libGLX_nvidia
+               $(usev !X "
+                       libGLX_nvidia libglxserver_nvidia
+                       nvidia_icd.json nvidia_layers.json")
+               $(usev !wayland libnvidia-vulkan-producer)
+               libGLX_indirect # non-glvnd unused fallback
+               libnvidia-{gtk,wayland-client} nvidia-{settings,xconfig} # from 
source
+               libnvidia-egl-gbm 15_nvidia_gbm # gui-libs/egl-gbm
+               libnvidia-egl-wayland 10_nvidia_wayland # gui-libs/egl-wayland
+       )
+       local skip_modules=(
+               $(usev !X "nvfbc vdpau xdriver")
+               $(usev !driver gsp)
+               installer nvpd # handled separately / built from source
+       )
+       local skip_types=(
+               GLVND_LIB GLVND_SYMLINK EGL_CLIENT.\* GLX_CLIENT.\* # 
media-libs/libglvnd
+               OPENCL_WRAPPER.\* # virtual/opencl
+               DOCUMENTATION DOT_DESKTOP .\*_SRC DKMS_CONF SYSTEMD_UNIT # 
handled separately / unused
+       )
+
+       local DOCS=(
+               README.txt NVIDIA_Changelog supported-gpus/supported-gpus.json
+               nvidia-settings/doc/{FRAMELOCK,NV-CONTROL-API}.txt
+       )
+       local HTML_DOCS=( html/. )
+       einstalldocs
+
+       local DISABLE_AUTOFORMATTING=yes
+       local DOC_CONTENTS="\
+Trusted users should be in the 'video' group to use NVIDIA devices.
+You can add yourself by using: gpasswd -a my-user video\
+$(usev driver "
+
+Like all out-of-tree kernel modules, it is necessary to rebuild
+${PN} after upgrading or rebuilding the Linux kernel
+by for example running \`emerge @module-rebuild\`. Alternatively,
+if using a distribution kernel (sys-kernel/gentoo-kernel{,-bin}),
+this can be automated by setting USE=dist-kernel globally.
+
+Loaded kernel modules also must not mismatch with the installed
+${PN} version (excluding -r revision), meaning should
+ensure \`eselect kernel list\` points to the kernel that will be
+booted before building and preferably reboot after upgrading
+${PN} (the ebuild will emit a warning if mismatching).
+
+See '${EPREFIX}/etc/modprobe.d/nvidia.conf' for modules options.")\
+$(use amd64 && usev !abi_x86_32 "
+
+Note that without USE=abi_x86_32 on ${PN}, 32bit applications
+(typically using wine / steam) will not be able to use GPU acceleration.")
+
+For general information on using ${PN}, please see:
+https://wiki.gentoo.org/wiki/NVIDIA/nvidia-drivers";
+       readme.gentoo_create_doc
+
+       if use driver; then
+               linux-mod_src_install
+
+               insinto /etc/modprobe.d
+               doins "${T}"/nvidia.conf
+
+               # used for gpu verification with binpkgs (not kept, see 
pkg_preinst)
+               insinto /usr/share/nvidia
+               doins supported-gpus/supported-gpus.json
+       fi
+
+       emake "${NV_ARGS[@]}" -C nvidia-modprobe install
+       fowners :video /usr/bin/nvidia-modprobe #505092
+       fperms 4710 /usr/bin/nvidia-modprobe
+
+       if use persistenced; then
+               emake "${NV_ARGS[@]}" -C nvidia-persistenced install
+               newconfd "${FILESDIR}"/nvidia-persistenced.confd 
nvidia-persistenced
+               newinitd "${FILESDIR}"/nvidia-persistenced.initd 
nvidia-persistenced
+               systemd_dounit "${T}"/nvidia-persistenced.service
+       fi
+
+       if use tools; then
+               emake "${NV_ARGS[@]}" -C nvidia-settings install
+
+               doicon nvidia-settings/doc/nvidia-settings.png
+               domenu nvidia-settings/doc/nvidia-settings.desktop
+
+               exeinto /etc/X11/xinit/xinitrc.d
+               newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
+       fi
+
+       if use static-libs; then
+               dolib.a nvidia-settings/src/out/libXNVCtrl.a
+
+               insinto /usr/include/NVCtrl
+               doins nvidia-settings/src/libXNVCtrl/NVCtrl{Lib,}.h
+       fi
+
+       use X && emake "${NV_ARGS[@]}" -C nvidia-xconfig install
+
+       # mimic nvidia-installer by reading .manifest to install files
+       # 0:file 1:perms 2:type 3+:subtype/arguments -:module
+       local m into
+       while IFS=' ' read -ra m; do
+               ! [[ ${#m[@]} -ge 2 && ${m[-1]} =~ MODULE: ]] ||
+                       [[ " ${m[0]##*/}" =~ ^(\ ${skip_files[*]/%/.*|\\} )$ ]] 
||
+                       [[ " ${m[2]}" =~ ^(\ ${skip_types[*]/%/|\\} )$ ]] ||
+                       has ${m[-1]#MODULE:} "${skip_modules[@]}" && continue
+
+               case ${m[2]} in
+                       MANPAGE)
+                               gzip -dc ${m[0]} | newman - ${m[0]%.gz}; assert
+                               continue
+                       ;;
+                       GBM_BACKEND_LIB_SYMLINK) m[4]=../${m[4]};; # missing ../
+                       VDPAU_SYMLINK) m[4]=vdpau/; m[5]=${m[5]#vdpau/};; # .so 
to vdpau/
+               esac
+
+               if [[ -v paths[${m[2]}] ]]; then
+                       into=${paths[${m[2]}]}
+               elif [[ ${m[2]} =~ _BINARY$ ]]; then
+                       into=/opt/bin
+               elif [[ ${m[3]} == COMPAT32 ]]; then
+                       use abi_x86_32 || continue
+                       into=/usr/${libdir32}
+               elif [[ ${m[2]} =~ _LIB$|_SYMLINK$ ]]; then
+                       into=/usr/${libdir}
+               else
+                       die "No known installation path for ${m[0]}"
+               fi
+               [[ ${m[3]: -2} == ?/ ]] && into+=/${m[3]%/}
+               [[ ${m[4]: -2} == ?/ ]] && into+=/${m[4]%/}
+
+               if [[ ${m[2]} =~ _SYMLINK$ ]]; then
+                       [[ ${m[4]: -1} == / ]] && m[4]=${m[5]}
+                       dosym ${m[4]} ${into}/${m[0]}
+                       continue
+               fi
+               [[ ${m[0]} =~ ^libnvidia-ngx.so|^libnvidia-egl-gbm.so ]] &&
+                       dosym ${m[0]} ${into}/${m[0]%.so*}.so.1 # soname not in 
.manifest
+
+               printf -v m[1] %o $((m[1] | 0200)) # 444->644
+               insopts -m${m[1]}
+               insinto ${into}
+               doins ${m[0]}
+       done < .manifest || die
+
+       # MODULE:installer non-skipped extras
+       exeinto /lib/systemd/system-sleep
+       doexe systemd/system-sleep/nvidia
+       dobin systemd/nvidia-sleep.sh
+       systemd_dounit systemd/system/nvidia-{hibernate,resume,suspend}.service
+
+       dobin nvidia-bug-report.sh
+
+       # MODULE:powerd extras
+       if use amd64; then
+               systemd_dounit systemd/system/nvidia-powerd.service
+               dodoc nvidia-dbus.conf
+       fi
+
+       # symlink non-versioned profile for nvidia-settings in case
+       # fails to detect version (i.e. mismatch, or with kernel-open)
+       dosym nvidia-application-profiles-${PV}-key-documentation \
+               
${paths[APPLICATION_PROFILE]}/nvidia-application-profiles-key-documentation
+}
+
+pkg_preinst() {
+       has_version "${CATEGORY}/${PN}[wayland]" && NV_HAD_WAYLAND=
+
+       use driver || return
+       linux-mod_pkg_preinst
+
+       # set video group id based on live system (bug #491414)
+       local g=$(egetent group video | cut -d: -f3)
+       [[ ${g} =~ ^[0-9]+$ ]] || die "Failed to determine video group id (got 
'${g}')"
+       sed -i "s/@VIDEOGID@/${g}/" "${ED}"/etc/modprobe.d/nvidia.conf || die
+
+       # try to find driver mismatches using temporary supported-gpus.json
+       for g in $(grep -l 0x10de /sys/bus/pci/devices/*/vendor 2>/dev/null); do
+               g=$(grep -io 
"\"devid\":\"$(<${g%vendor}device)\"[^}]*branch\":\"[0-9]*" \
+                       "${ED}"/usr/share/nvidia/supported-gpus.json 
2>/dev/null)
+               if [[ ${g} ]]; then
+                       g=$((${g##*\"}+1))
+                       if ver_test -ge ${g}; then
+                               NV_LEGACY_MASK=">=${CATEGORY}/${PN}-${g}"
+                               break
+                       fi
+               fi
+       done
+       rm "${ED}"/usr/share/nvidia/supported-gpus.json || die
+}
+
+pkg_postinst() {
+       linux-mod_pkg_postinst
+
+       readme.gentoo_print_elog
+
+       if [[ -r /proc/driver/nvidia/version &&
+               $(</proc/driver/nvidia/version) != *"  ${PV}  "* ]]; then
+               ewarn "Currently loaded NVIDIA modules do not match the newly 
installed"
+               ewarn "libraries and may prevent launching GPU-accelerated 
applications."
+               use driver && ewarn "The easiest way to fix this is usually to 
reboot."
+       fi
+
+       if [[ $(</proc/cmdline) == *slub_debug=[!-]* ]]; then
+               ewarn "Detected that the current kernel command line is using 
'slub_debug=',"
+               ewarn "this may lead to system instability/freezes with this 
version of"
+               ewarn "${PN}. Bug: https://bugs.gentoo.org/796329";
+       fi
+
+       if [[ -v NV_LEGACY_MASK ]]; then
+               ewarn
+               ewarn "***WARNING***"
+               ewarn
+               ewarn "You are installing a version of ${PN} known not to work"
+               ewarn "with a GPU of the current system. If unwanted, add the 
mask:"
+               if [[ -d ${EROOT}/etc/portage/package.mask ]]; then
+                       ewarn "  echo '${NV_LEGACY_MASK}' > 
${EROOT}/etc/portage/package.mask/${PN}"
+               else
+                       ewarn "  echo '${NV_LEGACY_MASK}' >> 
${EROOT}/etc/portage/package.mask"
+               fi
+               ewarn "...then downgrade to a legacy branch if possible. For 
details, see:"
+               ewarn "https://www.nvidia.com/object/IO_32667.html";
+       fi
+
+       if use kernel-open; then
+               ewarn
+               ewarn "Open source variant of ${PN} was selected, be warned it 
is experimental"
+               ewarn "and only usable with Turing / Ampere and later GPUs, aka 
GTX 1650+."
+               ewarn "Please also see: 
${EROOT}/usr/share/doc/${PF}/html/kernel_open.html"
+               ewarn
+               ewarn "Many features are not yet implemented in the drivers and 
limitations are"
+               ewarn "to be expected. Please do not report non-build/packaging 
bugs to Gentoo."
+               ewarn "Switch back to USE=-kernel-open to restore functionality 
if needed for now."
+       fi
+
+       if use wayland && use driver && [[ ! -v NV_HAD_WAYLAND ]]; then
+               elog
+               elog "With USE=wayland, this version of ${PN} sets 
nvidia-drm.modeset=1"
+               elog "in '${EROOT}/etc/modprobe.d/nvidia.conf'. This feature is 
considered"
+               elog "experimental but is required for wayland."
+               elog
+               elog "If you experience issues, either disable wayland or edit 
nvidia.conf."
+               elog "Of note, may possibly cause issues with SLI and Reverse 
PRIME."
+       fi
+}

Reply via email to