Sophie

Sophie

distrib > Mageia > 9 > armv7hl > by-pkgid > f6beecd2647613c2da4a6ebc427b4b40 > files > 7

nvidia-newfeature-545.29.06-2.mga9.nonfree.src.rpm

# This SPEC file was derived from the nvidia-current SPEC file.

# debugfiles.list is empty, dont try to create the rpms define
%define _enable_debug_packages	%{nil}
%define debug_package		%{nil}

# dont try to check the desktop file, its a ghost for update-alternatives
%global dont_check_desktop_files 1

# enable this to rename/promote the package name as "nvidia-current":
#
# bcond_without -> package named as nvidia-current
# bcond_with -> package named as nvidia545
%bcond_with	use_pkgname_as_nvidia_current

%if %{with use_pkgname_as_nvidia_current}
%define name		nvidia-current
%else
%define name		nvidia-newfeature
%endif

# When updating, please add new ids to ldetect-lst (merge2pcitable.pl)
%define version		545.29.06
# version of the utils (usually should be in sync with main version, except for beta drivers)
%define utilver		%{version}
#
%define rel		2
# the highest supported videodrv abi (currently xorg 21.1)
%define videodrv_abi	25

# version of nvidia wayland_egl
%define wayland_eglver	1.1.5

# version of nvidia egl-gbm
%define gbm_eglver	1.1.0

%define priority	9700

%define pkgname64	NVIDIA-Linux-x86_64-%{version}

%if %{with use_pkgname_as_nvidia_current}
%define drivername		nvidia-current
%else
%define drivername		nvidia-newfeature
%endif
%define driverpkgname		x11-driver-video-%{drivername}
%define modulename		%{drivername}
# for description and documentation
%define cards			New Features supported cards
%define xorg_extra_modules	%{_libdir}/xorg/extra-modules
%define nvidia_driversdir	%{_libdir}/xorg/modules/drivers
%define nvidia_old_driversdir	%{_libdir}/%{drivername}/xorg
%define nvidia_extensionsdir	%{_libdir}/xorg/modules/extensions
%define nvidia_modulesdir	%{_libdir}/%{drivername}/xorg
%define nvidia_libdir		%{_libdir}
%define nvidia_libdir32		%{_prefix}/lib
%define nvidia_bindir		%{_bindir}
%define nvidia_datadir		%{_datadir}/%{drivername}
%define nvidia_datadir_std	%{_datadir}/nvidia

# Conflict names to let package be mutually exclusive against
# non-nvidia-newfeature driver. If newer driver series family need to
# be added to the distribution, please add the new conflict names in a list
# below (as conflictname2, conflictname3, etc.).
#
%if %{with use_pkgname_as_nvidia_current}
%define conflictname		nvidia470
%define driverconflictname	nvidia470
%define driverpkgconflictname	x11-driver-video-%{driverconflictname}
%define conflictname2		nvidia-newfeature
%define driverconflictname2	nvidia-newfeature
%define driverpkgconflictname2	x11-driver-video-%{driverconflictname2}
%else
%define conflictname		nvidia-current
%define driverconflictname	nvidia-current
%define driverpkgconflictname	x11-driver-video-%{driverconflictname}
%define conflictname2		nvidia470
%define driverconflictname2	nvidia470
%define driverpkgconflictname2	x11-driver-video-%{driverconflictname2}
%endif

%ifarch %{ix86}
%define nsource %{SOURCE0}
%endif
%ifarch x86_64
%define nsource %{SOURCE1}
%define pkgname %{pkgname64}
%endif

# Other packages should not require any NVIDIA libraries, and this package
# should not be pulled in when libGL.so.1 is required
%global __provides_exclude \\.so|libnvidia-allocator|libvdpau_nvidia|libnvidia-ptxjitcompiler|libnvcuvid|devel\\(libcuda|devel\\(libnvidia|application

%global common__requires_exclude ^libEGL_nvidia\\.so|^libGL\\.so|^libGLcore\\.so|^libGLdispatch\\.so|^libnvidia.*\\.so|^libGLX\\.so|libnvcuvid|devel\\(libGL|devel\\(libX11|devel\\(libm|devel\\(libXext|devel\\(libdl

# (anssi) Allow installing of 64-bit package if the runtime dependencies
# of 32-bit libraries are not satisfied. If a 32-bit package that requires
# libGL.so.1 is installed, the 32-bit mesa libs are pulled in and that will
# pull the dependencies of 32-bit nvidia libraries in as well.
%global __requires_exclude %common__requires_exclude|^libX11\\.so\\.6$|^libXext\\.so\\.6$|^libdl\\.so\\.2$|^libm\\.so\\.6$|^libpthread\\.so\\.0$|^librt\\.so\\.1$

# (anssi) Workaround wrong linking as of 310.19.
# This will probably be fixed soon (at least similar issues have been in the past).
# https://devtalk.nvidia.com/default/topic/523762/libnvidia-encode-so-310-19-has-dependency-on-missing-library/
# (tmb) also work around "missing" dep in 418.43
%global __requires_exclude_from libnvidia-encode.so.%version|libnvidia-opticalflow.so.%version

# backportability
%global _provides_exceptions %(echo '%__provides_exclude' | sed 's,|,\\\\|,g')
%global _requires_exceptions %(echo '%__requires_exclude' | sed 's,|,\\\\|,g')
%global _exclude_files_from_autoreq %(echo '%__requires_exclude_from' | sed 's,|,\\\\|,g')

Summary:	NVIDIA proprietary X.org driver and libraries, current driver series
Name:		%{name}
Version:	%{version}
Release:	%mkrel %{rel}
Source1:	https://download.nvidia.com/XFree86/Linux-x86_64/%{version}/%{pkgname64}.run
# GPLv2 source code; see also https://github.com/NVIDIA/nvidia-settings (or https://cgit.freedesktop.org/~aplattner/)
Source2:	https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-%{utilver}.tar.bz2
# GPLv2 source code; see also https://github.com/NVIDIA/nvidia-xconfig (or https://cgit.freedesktop.org/~aplattner/)
Source3:	https://download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-%{utilver}.tar.bz2
# GPLv2 source code; see also https://github.com/NVIDIA/nvidia-modprobe (or https://cgit.freedesktop.org/~aplattner/)
Source4:	https://download.nvidia.com/XFree86/nvidia-modprobe/nvidia-modprobe-%{utilver}.tar.bz2
# GPLv2 source code; see also https://github.com/NVIDIA/nvidia-persistenced (or https://cgit.freedesktop.org/~aplattner/)
Source5:	https://download.nvidia.com/XFree86/nvidia-persistenced/nvidia-persistenced-%{utilver}.tar.bz2
# Script for building rpms of arbitrary nvidia installers (needs this .spec appended)
Source10:	nvidia-mgabuild-skel
# udev rules (mixed from deb, from https://pkgs.rpmfusion.org/cgit/nonfree/xorg-x11-drv-nvidia.git/tree/ and from
# https://download.nvidia.com/XFree86/Linux-x86_64/455.28/README/dynamicpowermanagement.html)
Source20:	81-nvidia.rules
Source21:	81-nvidia-pm.rules
# include xf86vmproto for X_XF86VidModeGetGammaRampSize, fixes build on cooker
Patch3:		nvidia-settings-include-xf86vmproto.patch
# (tmb) fix false detection of NV_SET_MEMORY_ARRAY_UC_PRESENT support (mga#25890)
Patch4:		NVIDIA-Linux-x86_64-430.64-work-around-mga-bug-25890.patch
License:	Freeware
BuildRoot:	%{_tmppath}/%{name}-buildroot
URL:		https://www.nvidia.com/object/unix.html
Group:		System/Kernel and hardware
ExclusiveArch:	x86_64
BuildRequires:	ImageMagick
BuildRequires:	gtk+2-devel
BuildRequires:	gtk+3-devel
BuildRequires:	libxv-devel
BuildRequires:	MesaGL-devel
BuildRequires:	mesaegl-devel
BuildRequires:	libxxf86vm-devel
BuildRequires:	rpmdevtools
BuildRequires:	vdpau-devel >= 0.9
BuildRequires:	pkgconfig(libtirpc)

%description
Source package of the current NVIDIA proprietary driver. Binary
packages are named %{driverpkgname}.

%package -n %{driverpkgname}
Summary:	NVIDIA proprietary X.org driver and libraries for %cards
Group:		System/Kernel and hardware
Conflicts:	%{drivername}-cuda-opencl < 430.14-2
# conflicts with other nvidia series (e.g. x11-driver-video-nvidia470)
Conflicts:	%{driverpkgconflictname}
Conflicts:	%{driverpkgconflictname2}
#
Requires:	%{drivername}-utils = %{version}-%{release}
Requires(post): update-alternatives
Requires(postun): update-alternatives
Requires:	x11-server-common
Recommends:	%{drivername}-doc-html = %{version}
# Proper support for versioned kmod() was added in 2008.1:
Requires:	kmod(%{modulename}.ko) = %{version}
# At least mplayer dlopens libvdpau.so.1, so the software will not pull in
# the vdpau library package. We ensure its installation here.
Requires:	%{_lib}vdpau1
Requires:	xserver-abi(videodrv) < %(echo $((%{videodrv_abi}+1)))
Requires:	ldetect-lst >= 0.6.40-1
Requires:	%{_lib}nvidia-egl-wayland1
Requires:	egl-wayland-json
Requires:	vaapi-driver-vdpau

%description -n %{driverpkgname}
NVIDIA proprietary X.org graphics driver, related libraries and
configuration tools for %cards,
including the associated Quadro cards.

NOTE: You should use XFdrake to configure your NVIDIA card. The
correct packages will be automatically installed and configured.

If you do not want to use XFdrake, see README.manual-setup.

This NVIDIA driver should be used with %cards,
including the associated Quadro cards.

%package -n dkms-%{drivername}
Summary:	NVIDIA kernel module for %cards
Group:		System/Kernel and hardware
Requires:	dkms >= 2.0.19-37
Requires(post):	dkms >= 2.0.19-37
Requires(preun): dkms >= 2.0.19-37
Provides:	kmod(%{modulename}.ko) = %{version}
Requires:	ldetect-lst >= 0.6.0-1
# (tmb) prebuilt kmods violates gpl
%if %{with use_pkgname_as_nvidia_current}
%ifarch %{ix86}
Obsoletes:	nvidia-current-kernel-desktop586-latest < %{version}-%{release}
Provides:	nvidia-current-kernel-desktop586-latest = %{version}-%{release}
%endif
Obsoletes:	nvidia-current-kernel-desktop-latest < %{version}-%{release}
Provides:	nvidia-current-kernel-desktop-latest = %{version}-%{release}
Obsoletes:	nvidia-current-kernel-server-latest < %{version}-%{release}
Provides:	nvidia-current-kernel-server-latest = %{version}-%{release}
%endif
Conflicts:	dkms-%{driverconflictname}
Conflicts:	dkms-%{driverconflictname2}

%description -n dkms-%{drivername}
NVIDIA kernel module for %cards. This
is to be used with the %{driverpkgname} package.

%package -n %{drivername}-devel
Summary:	NVIDIA OpenGL/CUDA development libraries and headers
Group:		Development/C
Conflicts:	%{drivername}-cuda-opencl < 430.14-3
# conflicts with other nvidia series (e.g. nvidia470-devel)
Conflicts:	%{driverconflictname}-devel
Conflicts:	%{driverconflictname2}-devel
#
Requires:	%{drivername}-cuda-opencl = %{version}-%{release}
Requires:	%{_lib}vdpau-devel

%description -n %{drivername}-devel
NVIDIA OpenGL/CUDA headers for %cards. This package
is not required for normal use.

%package -n %{drivername}-cuda-opencl
Summary:	CUDA and OpenCL libraries for NVIDIA proprietary driver
Group:		System/Kernel and hardware
Provides:	%{drivername}-cuda = %{version}-%{release}
Conflicts:	%{drivername}-devel < 430.14-3
Conflicts:	%{driverpkgname} < 430.14-2
# conflicts with other nvidia series (e.g. nvidia470-cuda-opencl)
Conflicts:	%{driverconflictname}-cuda-opencl
Conflicts:	%{driverconflictname2}-cuda-opencl
#
Requires:	kmod(%{modulename}.ko) = %{version}
Requires:	%{drivername}-utils = %{version}-%{release}

%description -n %{drivername}-cuda-opencl
Cuda and OpenCL libraries for NVIDIA proprietary driver. This package is not
required for normal use, it provides libraries to use NVIDIA cards for High
Performance Computing (HPC).

# HTML doc splitted off because of size, for live cds:
%package -n %{drivername}-doc-html
Summary:	NVIDIA html documentation (%{drivername})
Group:		System/Kernel and hardware
Conflicts:	%{driverconflictname}-doc-html
Conflicts:	%{driverconflictname2}-doc-html

%description -n %{drivername}-doc-html
HTML version of the README.txt file provided in package
%{driverpkgname}.

%package -n %{drivername}-utils
Summary:	Utilities for NVIDIA proprietary driver
Group:		System/Kernel and hardware
Conflicts:	%{driverpkgname} < 430.26-1
# conflicts with other nvidia series (e.g. nvidia-current-utils)
Conflicts:	%{driverconflictname}-utils
Conflicts:	%{driverconflictname2}-utils

%description -n %{drivername}-utils
Utilities for NVIDIA proprietary driver. Currently provides nvidia-smi and
nvidia-persistenced so they can be used with cuda without X.

%package -n %{drivername}-lib32
Summary:	Dependencies for 32bit libraries
Group:		System/Kernel and hardware
Requires:	libegl1
Requires:	libgl1
Requires:	libgldispatch0
Requires:	libglesv1_cm1
Requires:	libglesv22
Requires:	libglx0
Requires:	libnvidia-egl-wayland1
Requires:	libopencl1
Requires:	libopengl0
Conflicts:	%{driverconflictname}-lib32
Conflicts:	%{driverconflictname2}-lib32

%description -n %{drivername}-lib32
This package installs the libglvnd library dependencies required for
the 32bit version of NVidia libraries.

Install it if you plan to use 32bit software involving GL libraries, such as
32bit games (note that you need to enable the 32bit media sources).

%package -n %{drivername}-all
Summary:	Metapackage for %{drivername}
Group:		System/Kernel and hardware
Requires:	%{driverpkgname} = %{version}-%{release}
Requires:	dkms-%{drivername} = %{version}-%{release}
Requires:	%{drivername}-cuda-opencl = %{version}-%{release}
Requires:	%{drivername}-doc-html = %{version}-%{release}
Requires:	%{drivername}-utils = %{version}-%{release}
Requires:	%{drivername}-lib32 = %{version}-%{release}
Conflicts:	%{driverconflictname}-all
Conflicts:	%{driverconflictname2}-all
Conflicts:	%{driverpkgconflictname}
Conflicts:	%{driverpkgconflictname2}
Conflicts:	dkms-%{driverconflictname}
Conflicts:	dkms-%{driverconflictname2}
Conflicts:	%{driverconflictname}-cuda-opencl
Conflicts:	%{driverconflictname2}-cuda-opencl
Conflicts:	%{driverconflictname}-doc-html
Conflicts:	%{driverconflictname2}-doc-html
Conflicts:	%{driverconflictname}-utils
Conflicts:	%{driverconflictname2}-utils
Conflicts:	%{driverconflictname}-lib32
Conflicts:	%{driverconflictname2}-lib32

%description -n %{drivername}-all
This is a meta-package and installs all the extra dependencies and recommended
additions for %{drivername} driver.

%prep
%setup -q -c -T -a 2 -a 3 -a 4 -a 5
cd nvidia-settings-%{utilver}
%patch3 -p1 -b .proto
cd ..
sh %{nsource} --extract-only

cd %{pkgname}
%ifarch x86_64
# extra patches here
%patch4 -p1
%endif
cd ..

rm -rf %{pkgname}/usr/src/nv/precompiled

# (tmb) nuke nVidia provided dkms.conf as we need our own
rm -f %{pkgname}/kernel/dkms.conf

# install our own dkms.conf
cat > %{pkgname}/kernel/dkms.conf <<EOF
PACKAGE_NAME="%{drivername}"
PACKAGE_VERSION="%{version}-%{release}"
BUILT_MODULE_NAME[0]="nvidia"
DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm"
DEST_MODULE_NAME[0]="%{modulename}"
BUILT_MODULE_NAME[1]="nvidia-modeset"
DEST_MODULE_LOCATION[1]="/kernel/drivers/char/drm"
BUILT_MODULE_NAME[2]="nvidia-drm"
DEST_MODULE_LOCATION[2]="/kernel/drivers/char/drm"
BUILT_MODULE_NAME[3]="nvidia-uvm"
DEST_MODULE_LOCATION[3]="/kernel/drivers/char/drm"
BUILT_MODULE_NAME[4]="nvidia-peermem"
DEST_MODULE_LOCATION[4]="/kernel/drivers/char/drm"
MAKE[0]="'make' -j\${parallel_jobs} IGNORE_CC_MISMATCH=1 SYSSRC=\${kernel_source_dir} modules"
AUTOINSTALL="yes"
EOF

cat > README.install.urpmi <<EOF
This driver is for %cards.

Use XFdrake to configure X to use the correct NVIDIA driver. Any needed
packages will be automatically installed if not already present.
1. Run XFdrake as root.
2. Go to the Graphics Card list.
3. Select your card (it is usually already autoselected).
4. Answer any questions asked and then quit.

If you do not want to use XFdrake, see README.manual-setup.
EOF

cat > README.manual-setup <<EOF
This file describes the procedure for the manual installation of this NVIDIA
driver package. You can find the instructions for the recommended automatic
installation in the file 'README.install.urpmi' in this directory.

- Open %{_sysconfdir}/X11/xorg.conf and make the following changes:
  o Change the Driver to "nvidia" in the Device section
  o Make the line below the only 'glx' related line in the Module section,
    adding it if it is not already there:
      Load "glx"
  o Remove any 'ModulePath' lines from the Files section
- Run "update-alternatives --set gl_conf %{_sysconfdir}/%{drivername}/ld.so.conf" as root.
- Run "ldconfig -X" as root.
EOF

%build
# Avoid compiling fails due to excess of warnings on using a gtk+2.0 deprecated declaration of TimeVal
export CFLAGS_SUPPRESS_WARNINGS="-Wno-deprecated-declarations"
# The code contains dozens on top of dozens on top of dozens of "false" positives
export CFLAGS="%optflags -Wno-error=format-security ${CFLAGS_SUPPRESS_WARNINGS}"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="%{?ldflags}"
%make_build -C nvidia-settings-%{utilver}/src/libXNVCtrl
%make_build -C nvidia-settings-%{utilver} NV_KEEP_UNSTRIPPED_BINARIES=false
%make_build -C nvidia-xconfig-%{utilver} NV_KEEP_UNSTRIPPED_BINARIES=false
%make_build -C nvidia-modprobe-%{utilver} NV_KEEP_UNSTRIPPED_BINARIES=false all
%make_build -C nvidia-persistenced-%{utilver} NV_KEEP_UNSTRIPPED_BINARIES=false

%install
rm -rf %{buildroot}
cd %{pkgname}

# menu entry
install -d -m 755 %{buildroot}%{_datadir}/applications
cat > %{buildroot}%{_datadir}/applications/mageia-nvidia-settings.desktop <<EOF
[Desktop Entry]
Name=NVIDIA Display Settings
Comment=Configure NVIDIA X driver
Exec=%{_bindir}/nvidia-settings
Icon=%{drivername}-settings
Terminal=false
Type=Application
Categories=GTK;Settings;HardwareSettings;
EOF

# icons
install -d -m755 %{buildroot}%{_iconsdir}/hicolor/{16x16,32x32,48x48,64x64,96x96,128x128}/apps
convert nvidia-settings.png -resize 16x16 %{buildroot}%{_iconsdir}/hicolor/16x16/apps/%{drivername}-settings.png
convert nvidia-settings.png -resize 32x32 %{buildroot}%{_iconsdir}/hicolor/32x32/apps/%{drivername}-settings.png
convert nvidia-settings.png -resize 48x48 %{buildroot}%{_iconsdir}/hicolor/48x48/apps/%{drivername}-settings.png
convert nvidia-settings.png -resize 64x64 %{buildroot}%{_iconsdir}/hicolor/64x64/apps/%{drivername}-settings.png
convert nvidia-settings.png -resize 96x96 %{buildroot}%{_iconsdir}/hicolor/96x96/apps/%{drivername}-settings.png
convert nvidia-settings.png -resize 128x128 %{buildroot}%{_iconsdir}/hicolor/128x128/apps/%{drivername}-settings.png

error_fatal() {
	echo "Error: $@." >&2
	exit 1
}

error_unhandled() {
	echo "Warning: $@." >&2
	echo "Warning: $@." >> warns.log
	# cause distro builds to fail in case of unhandled files
	exit 1
}

parseparams() {
	for value in $rest; do
		local param=$1

		if [[ $value == MODULE:* ]]; then
		    # skip nvidia installer specific tag
		    continue
		fi

		[ -n "$param" ] || error_fatal "unhandled parameter $value"
		shift
		eval $param=$value

		[ -n "$value" ] || error_fatal "empty $param"

		# resolve libdir based on $arch
		if [ "$param" = "arch" ]; then
			case "$arch" in
			NATIVE)		nvidia_libdir=%{nvidia_libdir};;
			COMPAT32)	nvidia_libdir=%{nvidia_libdir32};;
			*)		error_fatal "unknown arch $arch"
			esac
		fi
		if [ "$param" = "libtype" ]; then
			case "$libtype" in
			NON_GLVND);;
			GLVND);;
			*)		error_fatal "unknown libtype $libtype"
			esac
		fi
	done
}

add_to_list() {
	# on distro builds, only use .manifest for %doc files
	[ "${2#%doc}" = "${2}" ] && return
	local list="$1.files"
	local entry="$2"
	echo $entry >> $list
}

install_symlink() {
	local pkg="$1"
	local dir="$2"
	mkdir -p %{buildroot}$dir
	ln -s $dest %{buildroot}$dir/$file
	add_to_list $pkg $dir/$file
}

install_lib_symlink() {
	local pkg="$1"
	local dir="$2"
	case "$file" in
	libvdpau_*.so)
		# vdpau drivers => not put into -devel
		;;
	*.so)
		pkg=nvidia-devel;;
	esac
	install_symlink $pkg $dir
}

install_file_only() {
	local pkg="$1"
	local dir="$2"
	mkdir -p %{buildroot}$dir
	# replace 0444 with more usual 0644
	[ "$perms" = "0444" ] && perms="0644"
	install -m $perms $file %{buildroot}$dir
}

install_file() {
	local pkg="$1"
	local dir="$2"
	install_file_only $pkg $dir
	add_to_list $pkg $dir/$(basename $file)
}

install_src_file() {
	local pkg="$1"
	local dir="$2"
	local moddir=$(dirname $file)
	local subdir=${moddir#kernel}
	install_file_only $pkg $dir$subdir
	add_to_list $pkg $dir$subdir/$(basename $file)
}

get_module_dir() {
	local subdir="$1"
	case "$subdir" in
	extensions*)	echo %{nvidia_extensionsdir};;
	drivers/)	echo %{nvidia_driversdir};;
	/)		echo %{nvidia_modulesdir};;
	*)		error_unhandled "unhandled module subdir $subdir"
			echo %{nvidia_modulesdir};;
	esac
}

for file in nvidia.files nvidia-devel.files nvidia-cuda.files nvidia-dkms.files nvidia-html.files; do
	rm -f $file
	touch $file
done

# install files according to .manifest
cat .manifest | tail -n +9 | while read line; do
	arch=
	style=
	subdir=
	dest=
	nvidia_libdir=
	libtype=

	rest=${line}
	file=${rest%%%% *}
	rest=${rest#* }
	perms=${rest%%%% *}
	rest=${rest#* }
	type=${rest%%%% *}
	[ "${rest#* }" = "$rest" ] && rest= || rest=${rest#* }

	case "$type" in
	CUDA_LIB)
		parseparams arch subdir
		install_file nvidia-cuda $nvidia_libdir/$subdir
		;;
	CUDA_SYMLINK)
		parseparams arch subdir dest
		install_lib_symlink nvidia-cuda $nvidia_libdir/$subdir
		;;
	EGL_CLIENT_LIB)
		parseparams arch
		install_file nvidia $nvidia_libdir
		;;
	EGL_CLIENT_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	EGL_EXTERNAL_PLATFORM_JSON)
		# (tmb) skip for now
		case $libtype in NON_GLVND);; *) continue; esac
		install_file nvidia %{_sysconfdir}/%{drivername}
		;;
	ENCODEAPI_LIB)
		parseparams arch subdir
		install_file nvidia $nvidia_libdir/$subdir
		;;
	ENCODEAPI_LIB_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	EXPLICIT_PATH)
		parseparams dest
		dest="$(echo "$dest" | sed s,%{_datadir}/nvidia,%{nvidia_datadir},)"
		install_file nvidia $dest
		;;
	FIRMWARE)
		install_file_only nvidia /lib/firmware/nvidia/%{version}/
		;;
	GBM_BACKEND_LIB_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	GLVND_EGL_ICD_JSON)
		# (tmb) skip for now
		case $libtype in NON_GLVND);; *) continue; esac
		install_file nvidia %{_sysconfdir}/%{drivername}
		;;
	GLVND_LIB)
		parseparams arch
		install_file nvidia $nvidia_libdir
		;;
	GLVND_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	GLX_CLIENT_LIB)
		parseparams arch
		install_file nvidia $nvidia_libdir
		;;
	GLX_CLIENT_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	NVCUVID_LIB)
		parseparams arch subdir
		install_file nvidia-cuda $nvidia_libdir/$subdir
		;;
	NVCUVID_LIB_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia-cuda $nvidia_libdir
		;;
	NVIFR_LIB)
		parseparams arch subdir
		install_file nvidia $nvidia_libdir/$subdir
		;;
	NVIFR_LIB_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	OPENCL_LIB)
		parseparams arch subdir
		install_file nvidia-cuda $nvidia_libdir/$subdir
		;;
	OPENCL_LIB_SYMLINK)
		parseparams arch subdir dest
		install_lib_symlink nvidia-cuda $nvidia_libdir/$subdir
		;;
	OPENCL_WRAPPER_LIB)
		parseparams arch subdir
		install_file nvidia-cuda $nvidia_libdir/$subdir
		;;
	OPENCL_WRAPPER_SYMLINK)
		parseparams arch subdir dest
		install_lib_symlink nvidia-cuda $nvidia_libdir/$subdir
		;;
	OPENGL_DATA)
		parseparams dest
		dest="$(echo "$dest" | sed s,%{_datadir}/nvidia,%{nvidia_datadir},)"
		install_file nvidia $dest
		;;
	OPENGL_LIB)
		parseparams arch
		install_file nvidia $nvidia_libdir
		;;
	OPENGL_SYMLINK)
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	SYSTEMD_UNIT)
		parseparams dest
		install_file nvidia %{_unitdir}
		;;
	SYSTEMD_UNIT_SYMLINK)
		continue
		;;
	SYSTEMD_SLEEP_SCRIPT)
		install_file nvidia %{_systemd_util_dir}/system-sleep/
		;;
	TLS_LIB)
		parseparams arch style subdir
		install_file nvidia $nvidia_libdir/$subdir
		;;
	TLS_SYMLINK)
		parseparams arch style subdir dest
		install_lib_symlink nvidia $nvidia_libdir/$subdir
		;;
	UTILITY_LIB)
		# skip libnvidia-gtk[23], we build those by ourself
		echo "$file" | grep -q nvidia-gtk && continue
		# backward-compatibility
		[ -n "${rest}" ] || rest="NATIVE $rest"
		parseparams arch subdir
		install_file nvidia $nvidia_libdir/$subdir
		;;
	UTILITY_LIB_SYMLINK)
		# backward-compatibility
		[ "${rest#* }" != "$rest" ] || rest="NATIVE $rest"
		parseparams arch dest
		install_lib_symlink nvidia $nvidia_libdir
		;;
	VDPAU_LIB)
		parseparams arch subdir
		case $file in *libvdpau_nvidia.so*);; *) continue; esac
		install_file nvidia $nvidia_libdir/$subdir
		# install in two places
		install_file nvidia $nvidia_libdir
		;;
	VDPAU_SYMLINK)
		parseparams arch subdir dest
		case $file in *libvdpau_nvidia.so*);; *) continue; esac
		install_lib_symlink nvidia $nvidia_libdir/$subdir
		;;
	VDPAU_WRAPPER_LIB)
		parseparams arch subdir
		case $file in *libvdpau_nvidia.so*);; *) continue; esac
		install_file nvidia $nvidia_libdir/$subdir
		;;
	VDPAU_WRAPPER_SYMLINK)
		parseparams arch subdir dest
		case $file in *libvdpau_nvidia.so*);; *) continue; esac
		install_lib_symlink nvidia $nvidia_libdir/$subdir
		;;
	VULKAN_ICD_JSON)
		install_file nvidia %{_sysconfdir}/vulkan/icd.d/
		;;
	WINE_LIB)
		install_file_only nvidia %{nvidia_libdir32}/nvidia/wine/
		;;
	XLIB_STATIC_LIB)
		install_file nvidia-devel %{nvidia_libdir}
		;;
	XLIB_SHARED_LIB)
		install_file nvidia %{nvidia_libdir}
		;;
	XLIB_SYMLINK)
		parseparams dest
		install_lib_symlink nvidia %{nvidia_libdir}
		;;
	LIBGL_LA)
		# (Anssi) we don't install .la files
		;;
	XMODULE_SHARED_LIB|GLX_MODULE_SHARED_LIB)
		parseparams subdir
		install_file nvidia $(get_module_dir $subdir)
		;;
	XMODULE_NEWSYM)
		# symlink that is created only if it doesn't already
		# exist (i.e. as part of x11-server)
		case "$file" in
		libwfb.so)
			continue
			;;
		*)
			error_unhandled "unknown XMODULE_NEWSYM type file $file, skipped"
			continue
		esac
		parseparams subdir dest
		install_symlink nvidia $(get_module_dir $subdir)
		;;
	XORG_OUTPUTCLASS_CONFIG)
		# (tmb) dont install xorg driver autoloader conf
		continue
		;;
	XMODULE_SYMLINK|GLX_MODULE_SYMLINK)
		parseparams subdir dest
		install_symlink nvidia $(get_module_dir $subdir)
		;;
	VDPAU_HEADER)
		continue
		parseparams subdir
		install_file_only nvidia-devel %{_includedir}/%{drivername}/$subdir
		;;
	OPENGL_HEADER|CUDA_HEADER)
		parseparams subdir
		install_file_only nvidia-devel %{_includedir}/%{drivername}/$subdir
		;;
	DOCUMENTATION)
		parseparams subdir
		case $subdir in
		*/html)
			add_to_list nvidia-html "%%doc %{pkgname}/$file"
			continue
			;;
		*/include/*)
			continue
			;;
		esac
		case $file in
		*XF86Config*|*nvidia-settings.png)
			continue;;
		esac
		add_to_list nvidia "%%doc %{pkgname}/$file"
		;;
	ICON)
		parseparams subdir
		case $file in
		*XF86Config*|*nvidia-settings.png)
			continue
			;;
		esac
		;;
	MANPAGE|NVIDIA_MODPROBE_MANPAGE)
		parseparams subdir
		case "$file" in
		*nvidia-installer*)
			# not installed
			continue
			;;
		*nvidia-settings*|*nvidia-xconfig*|*nvidia-modprobe*|*nvidia-persistenced*)
			# installed separately below
			continue
			;;
		*nvidia-smi*|*nvidia-cuda-mps-control*)
			# ok
			;;
		*)
			error_unhandled "skipped unknown man page $(basename $file)"
			continue
		esac
		install_file_only nvidia %{_mandir}/$subdir
		;;
	UTILITY_BINARY)
		case "$file" in
		*nvidia-settings|*nvidia-xconfig|*nvidia-persistenced)
			# not installed, we install our own copy
			continue
			;;
		*nvidia-smi|*nvidia-bug-report.sh|*nvidia-debugdump|*nvidia-sleep.sh)
			# ok
			;;
		*nvidia-cuda-mps-control|*nvidia-cuda-mps-server)
			# ok
			;;
		*nvidia-ngx-updater)
			# ok
			;;
		*nvidia-powerd)
			# ok
			;;
		*)
			error_unhandled "unknown binary $(basename $file) will be installed to %{nvidia_bindir}/$(basename $file)"
			;;
		esac
		install_file nvidia %{nvidia_bindir}
		;;
	UTILITY_BIN_SYMLINK)
		case $file in nvidia-uninstall) continue;; esac
		parseparams dest
		install_symlink nvidia %{nvidia_bindir}
		;;
	INTERNAL_UTILITY_BINARY)
		case $file in glvnd_check) continue;; esac
		;;
	INTERNAL_UTILITY_LIB)
		case $file in libGLX_installcheck.so.*) continue;; esac
		;;
	INTERNAL_UTILITY_DATA)
		case $file in egl_dummy_vendor.json) continue;; esac
		;;
	NVIDIA_MODPROBE)
		# A suid-root tool (GPLv2) used as fallback for loading the module and
		# creating the device nodes in case the driver component is running as
		# a non-root user (e.g. a CUDA application). While the module is automatically
		# loaded by udev rules, the device nodes are not automatically created
		# like with regular drivers and therefore this tool is installed on
		# Mageia as well, at least for now.

		# We install our self-compiled version in non-simple mode
		install_file nvidia %{nvidia_bindir}
		;;
	INSTALLER_BINARY)
		# not installed
		;;
	KERNEL_MODULE_SRC|DKMS_CONF)
		install_src_file nvidia-dkms %{_usrsrc}/%{drivername}-%{version}-%{release}
		;;
	CUDA_ICD)
		# in theory this should go to the cuda subpackage, but it goes into the main package
		# as this avoids one broken symlink and it is small enough to not cause space issues
		install_file nvidia %{_sysconfdir}/%{drivername}
		;;
	APPLICATION_PROFILE)
		parseparams subdir
		install_file nvidia %{nvidia_datadir}/$subdir
		;;
	DOT_DESKTOP)
		# we provide our own for now
		;;
	*)
		error_unhandled "file $(basename $file) of unknown type $type will be skipped"
	esac
done

[ -z "$warnings" ] || echo "Please inform Anssi Hannula <anssi@mageia.org> or https://bugs.mageia.org/ of the above warnings." >> warns.log

# confirm SONAME; if something else than libvdpau_nvidia.so or libvdpau_nvidia.so.1, adapt .spec as needed:
[ "$(objdump -p %{buildroot}%{nvidia_libdir}/vdpau/libvdpau_nvidia.so.%{version} | grep SONAME | gawk '{ print $2 }')" = "libvdpau_nvidia.so.1" ]

# self-built binaries
install -m  755 ../nvidia-settings-%{utilver}/src/_out/*/nvidia-settings	%{buildroot}%{nvidia_bindir}
install -m  755 ../nvidia-xconfig-%{utilver}/_out/*/nvidia-xconfig		%{buildroot}%{nvidia_bindir}
install -m 4755 ../nvidia-modprobe-%{utilver}/_out/*/nvidia-modprobe		%{buildroot}%{nvidia_bindir}
install -m  755 ../nvidia-persistenced-%{utilver}/_out/*/nvidia-persistenced	%{buildroot}%{nvidia_bindir}

# nvidia-settings dlopens libnvidia-gtk*.so.VERSION
for file in ../nvidia-settings-%{utilver}/src/_out/*/libnvidia-gtk*.so; do
	install -m 755 ${file} %{buildroot}%{nvidia_libdir}/$(basename "$file").%{utilver}
done

# binaries
install -d -m 755	%{buildroot}%{_bindir}

# rpmlint:
chmod 0755		%{buildroot}%{_bindir}/*

# datadir alternative
mkdir -p		%{buildroot}%{nvidia_datadir_std}

# install man pages
install -m 644 ../nvidia-settings-%{utilver}/doc/_out/*/nvidia-settings.1	%{buildroot}%{_mandir}/man1
install -m 644 ../nvidia-xconfig-%{utilver}/_out/*/nvidia-xconfig.1		%{buildroot}%{_mandir}/man1
install -m 644 ../nvidia-modprobe-%{utilver}/_out/*/nvidia-modprobe.1		%{buildroot}%{_mandir}/man1
install -m 644 ../nvidia-persistenced-%{utilver}/_out/*/nvidia-persistenced.1	%{buildroot}%{_mandir}/man1

# if driver contains utils which are newer than the GPL ones, use them (e.g. in case of beta drivers)
res=$(rpmdev-vercmp "%{version}" "%{utilver}")
if [ "$?" == "11" ]; then
	install -m 755	./nvidia-settings \
			./nvidia-xconfig \
			./nvidia-modprobe \
			./nvidia-persistenced %{buildroot}%{nvidia_bindir}
	rm -f %{buildroot}%{nvidia_libdir}/libnvidia-gtk*.so.%{utilver}
	install -m 755 ./libnvidia-gtk*.so.%{version} %{buildroot}%{nvidia_libdir}/
	gunzip -cd nvidia-settings.1.gz >	%{buildroot}%{_mandir}/man1/nvidia-settings.1
	gunzip -cd nvidia-xconfig.1.gz >	%{buildroot}%{_mandir}/man1/nvidia-xconfig.1
	gunzip -cd nvidia-modprobe.1.gz >	%{buildroot}%{_mandir}/man1/nvidia-modprobe.1
	gunzip -cd nvidia-persistenced.1.gz >	%{buildroot}%{_mandir}/man1/nvidia-persistenced.1
fi

# bug #41638 - whatis entries of nvidia man pages appear wrong
gunzip %{buildroot}%{_mandir}/man1/*.gz
sed -r -i '/^nvidia\\-[a-z]+ \\- NVIDIA/s,^nvidia\\-,nvidia-,' %{buildroot}%{_mandir}/man1/*.1

# cuda nvidia.icd
install -d -m 755		%{buildroot}%{_sysconfdir}/OpenCL/vendors

# ld.so.conf
# these are "dummy" right now, just for compatibility with drakx11
install -d -m 755		%{buildroot}%{_sysconfdir}/%{drivername}
touch				%{buildroot}%{_sysconfdir}/%{drivername}/ld.so.conf
install -d -m 755		%{buildroot}%{_sysconfdir}/ld.so.conf.d
touch				%{buildroot}%{_sysconfdir}/ld.so.conf.d/GL.conf

# modprobe.conf
install -d -m 755		%{buildroot}%{_sysconfdir}/modprobe.d
touch				%{buildroot}%{_sysconfdir}/modprobe.d/display-driver.conf
echo "install nvidia /sbin/modprobe %{modulename} \$CMDLINE_OPTS" > %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo -e "\n# Uncomment the following line to enable complete power management" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo "#options nvidia NVreg_DynamicPowerManagement=0x02" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo -e "\n# Uncomment the following line to enable kernel modesetting support" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo "#options nvidia-drm modeset=1" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo -e "\n# alias" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo "alias nvidia %{modulename}" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo -e "\n# extra blacklist of nouveau" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo "blacklist nouveau" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf
echo "options nouveau modeset=0" >> %{buildroot}%{_sysconfdir}/%{drivername}/modprobe.conf

# nvidia-application-profiles-%%{version}-key-documentation is still searched
# by the nvidia-settings executable in in %{_datadir}/nvidia/; we add a symlink here
# (or as alternative we should patch nvidia-settings to search in %{nvidia_datadir}
# instead [todo]).
mkdir -p %{buildroot}/%{nvidia_datadir_std}
ln -s %{nvidia_datadir}/nvidia-application-profiles-%{version}-rc \
	%{buildroot}%{nvidia_datadir_std}/nvidia-application-profiles-%{version}-rc
ln -s %{nvidia_datadir}/nvidia-application-profiles-%{version}-key-documentation \
	%{buildroot}%{nvidia_datadir_std}/nvidia-application-profiles-%{version}-key-documentation
ln -s %{nvidia_datadir}/nvidia-application-profiles-%{version}-key-documentation \
	%{buildroot}%{nvidia_datadir_std}/nvidia-application-profiles-key-documentation

# XFdrake/drakx11 detects whether a driver is correctly installed
# according to the presence of the file %%{_libdir}/nvidia-current/xorg/libglx.so.
# (see: https://gitweb.mageia.org/software/drakx-kbd-mouse-x11/tree/lib/Xconfig/proprietary.pm#n120
# or https://gitweb.mageia.org/software/drakx-kbd-mouse-x11/tree/lib/Xconfig/proprietary.pm?id=e7e7b854938ae9209a5572ded4ecaa2fb15109c4#n120)
# Let's keep a dummy symlink for compatibility.
if [ ! -e "%{buildroot}%{nvidia_old_driversdir}" ]; then
	mkdir -p %{buildroot}%{nvidia_old_driversdir}
fi
pushd %{buildroot}%{nvidia_old_driversdir}
	ln -s %{nvidia_extensionsdir}/libglxserver_nvidia.so.%{version} libglx.so
popd

# xinit script
install -d -m755 %{buildroot}%{_sysconfdir}/%{drivername}
cat > %{buildroot}%{_sysconfdir}/%{drivername}/nvidia-settings.xinit <<EOF
# to be sourced
#
# Do not modify this file; the changes will be overwritten.
# If you want to disable automatic configuration loading, create
# /etc/sysconfig/nvidia-settings with this line: LOAD_NVIDIA_SETTINGS="no"
#
LOAD_NVIDIA_SETTINGS="yes"
[ -f %{_sysconfdir}/sysconfig/nvidia-settings ] && . %{_sysconfdir}/sysconfig/nvidia-settings
[ "\$LOAD_NVIDIA_SETTINGS" = "yes" ] && %{_bindir}/nvidia-settings --load-config-only
EOF
chmod 0755 %{buildroot}%{_sysconfdir}/%{drivername}/nvidia-settings.xinit
install -d -m755 %{buildroot}%{_sysconfdir}/X11/xinit.d
touch %{buildroot}%{_sysconfdir}/X11/xinit.d/nvidia-settings.xinit

# fix vulkan files position
install -d -m755 %{buildroot}%{_sysconfdir}/vulkan/implicit_layer.d/
mv -f %{buildroot}%{_sysconfdir}/vulkan/icd.d/nvidia_layers.json \
	%{buildroot}%{_sysconfdir}/vulkan/implicit_layer.d/
# fix OpenCL position
mv -f %{buildroot}%{_sysconfdir}/%{drivername}/nvidia.icd \
	%{buildroot}%{_sysconfdir}/OpenCL/vendors

# 10_nvidia_wayland.json (to be fixed in the sh parser above)
install -d -m755 %{buildroot}%{_datadir}/egl/egl_external_platform.d/
install -m644 ./10_nvidia_wayland.json %{buildroot}%{_datadir}/egl/egl_external_platform.d/

# 10_nvidia.json
install -d -m 755 %{buildroot}%{_datadir}/glvnd/egl_vendor.d
install -m644 ./10_nvidia.json %{buildroot}%{_datadir}/glvnd/egl_vendor.d/

# nvidia-drm
install -d -m755 %{buildroot}%{_sysconfdir}/X11/xorg.conf.d
cat > %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-nvidia.conf <<EOF
Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    #Option "SLI" "off"
    Option "BaseMosaic" "on"
EndSection

Section "ServerLayout"
    Identifier "layout"
    Option "AllowNVIDIAGPUScreens"
EndSection
EOF

# udev rules (from deb)
# to be reviewed: nvidia-persistenced.service (see with cuda-toolkit for missed nvidia dev node generation)
install -d -m 755 %{buildroot}%{_udevrulesdir}
install -m 644 %{SOURCE20} %{buildroot}%{_udevrulesdir}/81-nvidia.rules
install -m 644 %{SOURCE21} %{buildroot}%{_udevrulesdir}/81-nvidia-pm.rules

# avoid inclusion in initrddir
mkdir -p %{buildroot}%{_sysconfdir}/dracut.conf.d
cat > %{buildroot}%{_sysconfdir}/dracut.conf.d/99-nvidia.conf <<EOF
# Omit the nvidia driver from the initramfs image, to avoid needing to regenerate
# the initramfs on updates.
omit_drivers+=" nvidia nvidia-drm nvidia-modeset nvidia-uvm nvidia-peermem nouveau "
EOF

# clean installed glvnd libraries (already provided by system libglvnd for mesa's glvnd(ed))
rm -f	%{buildroot}%{nvidia_libdir}/libEGL.so* \
	%{buildroot}%{nvidia_libdir}/libGLdispatch.so* \
	%{buildroot}%{nvidia_libdir}/libGLESv1_CM.so* \
	%{buildroot}%{nvidia_libdir}/libGLESv2.so* \
	%{buildroot}%{nvidia_libdir}/libGL.so* \
	%{buildroot}%{nvidia_libdir}/libGLX.so* \
	%{buildroot}%{nvidia_libdir}/libOpenGL.so* \
	%{buildroot}%{nvidia_libdir32}/libEGL.so* \
	%{buildroot}%{nvidia_libdir32}/libGLdispatch.so* \
	%{buildroot}%{nvidia_libdir32}/libGLESv1_CM.so* \
	%{buildroot}%{nvidia_libdir32}/libGLESv2.so* \
	%{buildroot}%{nvidia_libdir32}/libGL.so* \
	%{buildroot}%{nvidia_libdir32}/libGLX.so* \
	%{buildroot}%{nvidia_libdir32}/libOpenGL.so*

rm -f	%{buildroot}%{nvidia_libdir}/libOpenCL.so* \
	%{buildroot}%{nvidia_libdir32}/libOpenCL.so*

rm -f	%{buildroot}%{nvidia_libdir}/libGLX_indirect.so* \
	%{buildroot}%{nvidia_libdir32}/libGLX_indirect.so*

# Already provided in system package lib|lib64nvidia-egl-wayland1
rm -f	%{buildroot}%{nvidia_libdir}/libnvidia-egl-wayland.so* \
	%{buildroot}%{nvidia_libdir32}libnvidia-egl-wayland.so*

# Already provided in system package egl-wayland-json
rm -f	%{buildroot}%{_datadir}/egl/egl_external_platform.d/10_nvidia_wayland.json

# dont ship open drivers as part of this, must be in a separate package in core
rm -rf %{buildroot}%{_usrsrc}/%{drivername}-%{version}-%{release}-open

# libnvidia-pkcs11.so is linked against libcrypto.so.1.1 which is
# provided only in mga8, viceversa libnvidia-pkcs11-openssl3.so is
# linked against libcrypto.so.3, which is provided only in mga9 and
# beyond.
%if %mgaversion >= 9
rm -f %{buildroot}%{nvidia_libdir}/libnvidia-pkcs11.so.%{version}
%else
rm -f %{buildroot}%{nvidia_libdir}/libnvidia-pkcs11-openssl3.so.%{version}
%endif

# Add missed symlinks
mkdir -p %{buildroot}%{_libdir}/gbm \
	%{buildroot}%{_libdir}/nvidia/wine \
	%{buildroot}%{_datadir}/nvidia
ln -s %{nvidia_libdir}/libnvidia-allocator.so.1 %{buildroot}%{_libdir}/gbm/nvidia-drm_gbm.so
ln -s %{nvidia_libdir32}/nvidia/wine/_nvngx.dll %{buildroot}%{_libdir}/nvidia/wine/_nvngx.dll
ln -s %{nvidia_libdir32}/nvidia/wine/nvngx.dll  %{buildroot}%{_libdir}/nvidia/wine/nvngx.dll
ln -s %{nvidia_datadir}/nvoptix.bin %{buildroot}%{_datadir}/nvidia/nvoptix.bin

export EXCLUDE_FROM_STRIP="$(find %{buildroot} -type f \! -name nvidia-settings \! -name nvidia-xconfig \! -name nvidia-modprobe \! -name nvidia-persistenced \! -name 'libnvidia-gtk*.so')"


%post -n %{driverpkgname}
# XFdrake used to generate an nvidia.conf file
[ -L %{_sysconfdir}/modprobe.d/nvidia.conf ] || rm -f %{_sysconfdir}/modprobe.d/nvidia.conf

# remove cuda-specific ld conf to not conflict with alternatives
rm -f %{_sysconfdir}/ld.so.conf.d/%{drivername}-cuda.conf

current_glconf="$(readlink -e %{_sysconfdir}/ld.so.conf.d/GL.conf)"

%{_sbindir}/update-alternatives \
	--install %{_sysconfdir}/ld.so.conf.d/GL.conf gl_conf %{_sysconfdir}/%{drivername}/ld.so.conf %{priority} \
	--slave %{_sysconfdir}/X11/xinit.d/nvidia-settings.xinit nvidia-settings.xinit %{_sysconfdir}/%{drivername}/nvidia-settings.xinit \
	--slave %{_sysconfdir}/modprobe.d/display-driver.conf display-driver.conf %{_sysconfdir}/%{drivername}/modprobe.conf

%posttrans -n %{driverpkgname}
# When upgrading 340 => 346, the alternativeszification of /usr/share/nvidia may
# cause uninstallation of 340 (during upgrade) to remove these files through
# the /usr/share/nvidia symlink. Restore them.
for file in %{nvidia_datadir}/pci.ids %{nvidia_datadir}/monitoring.conf; do
	backupfile="%{_datadir}/%{drivername}/$(basename "$file").mga"
	if ! [ -e $file ] && [ -e "$backupfile" ]; then
		ln -T "$backupfile" "$file"
	fi
done
# update-alternatives from older packages might remove libvdpau_nvidia.so.1 links, restore them
if [ ! -e %{nvidia_libdir}/vdpau/libvdpau_nvidia.so.1 ]; then
	ln -sf %{_libdir}/vdpau/libvdpau_nvidia.so.%{version} %{_libdir}/vdpau/libvdpau_nvidia.so.1
	ln -sf %{_prefix}/lib/vdpau/libvdpau_nvidia.so.%{version} %{_prefix}/lib/vdpau/libvdpau_nvidia.so.1
fi

%postun -n %{driverpkgname}
if [ ! -f %{_sysconfdir}/%{drivername}/ld.so.conf ]; then
  %{_sbindir}/update-alternatives --remove gl_conf %{_sysconfdir}/%{drivername}/ld.so.conf
fi

%post -n %{drivername}-cuda-opencl
if [ ! -f %{_sysconfdir}/%{drivername}/ld.so.conf ]; then
    touch %{_sysconfdir}/ld.so.conf.d/%{drivername}-cuda.conf
fi

%post -n dkms-%{drivername}
    /usr/sbin/dkms --rpm_safe_upgrade add -m %{drivername} -v %{version}-%{release}
if [ -z "$DURING_INSTALL" ] ; then
    /usr/sbin/dkms --rpm_safe_upgrade build -m %{drivername} -v %{version}-%{release} &&
    /usr/sbin/dkms --rpm_safe_upgrade install -m %{drivername} -v %{version}-%{release} --force
    /usr/bin/dracut -f
fi

# rmmod any old driver if present and not in use (e.g. by X)
rmmod nvidia > /dev/null 2>&1 || true

%preun -n dkms-%{drivername}
/usr/sbin/dkms --rpm_safe_upgrade remove -m %{drivername} -v %{version}-%{release} --all

# rmmod any old driver if present and not in use (e.g. by X)
rmmod nvidia_uvm > /dev/null 2>&1 || true
rmmod nvidia_drm > /dev/null 2>&1 || true
rmmod nvidia_modeset > /dev/null 2>&1 || true
rmmod nvidia > /dev/null 2>&1 || true

%clean
rm -rf %{buildroot}

%files -n %{driverpkgname} -f %{pkgname}/nvidia.files
%defattr(-,root,root)
# other documentation files are listed in nvidia.files
%doc README.install.urpmi README.manual-setup


# ld.so.conf, modprobe.conf, xinit
%ghost %{_sysconfdir}/ld.so.conf.d/GL.conf
%ghost %{_sysconfdir}/X11/xinit.d/nvidia-settings.xinit
%ghost %{_sysconfdir}/modprobe.d/display-driver.conf
%dir %{_sysconfdir}/%{drivername}
%{_sysconfdir}/%{drivername}/modprobe.conf
%{_sysconfdir}/%{drivername}/ld.so.conf
%{_sysconfdir}/%{drivername}/nvidia-settings.xinit

%{_bindir}/nvidia-powerd
%{_systemd_util_dir}/system/nvidia-powerd.service
%{_systemd_util_dir}/system-sleep/nvidia
%{_unitdir}/nvidia-hibernate.service
%{_unitdir}/nvidia-resume.service
%{_unitdir}/nvidia-suspend.service

%config(noreplace) %{_sysconfdir}/X11/xorg.conf.d/10-nvidia.conf
%{_sysconfdir}/vulkan/icd.d/nvidia_icd.json
%{_sysconfdir}/vulkan/implicit_layer.d/nvidia_layers.json
%{_datadir}/glvnd/egl_vendor.d/10_nvidia.json

%dir %{nvidia_datadir}
%{nvidia_datadir}/nvidia-application-profiles-%{version}-rc
%{nvidia_datadir}/nvidia-application-profiles-%{version}-key-documentation
%{nvidia_datadir}/nvoptix.bin
%{_datadir}/nvidia/nvoptix.bin
%dir %{nvidia_datadir}/rim
%{nvidia_datadir}/rim/RIM_GH100PROD.swidtag
%dir %{nvidia_datadir_std}
%{nvidia_datadir_std}/nvidia-application-profiles-%{version}-rc
%{nvidia_datadir_std}/nvidia-application-profiles-%{version}-key-documentation
%{nvidia_datadir_std}/nvidia-application-profiles-key-documentation

%{nvidia_bindir}/nvidia-bug-report.sh
%{nvidia_bindir}/nvidia-debugdump
%{nvidia_bindir}/nvidia-settings
%{nvidia_bindir}/nvidia-sleep.sh
%{nvidia_bindir}/nvidia-xconfig
%{_mandir}/man1/nvidia-xconfig.1%{_extension}
%{_mandir}/man1/nvidia-settings.1%{_extension}

%{_datadir}/applications/mageia-nvidia-settings.desktop
%{_iconsdir}/hicolor/16x16/apps/%{drivername}-settings.png
%{_iconsdir}/hicolor/32x32/apps/%{drivername}-settings.png
%{_iconsdir}/hicolor/48x48/apps/%{drivername}-settings.png
%{_iconsdir}/hicolor/64x64/apps/%{drivername}-settings.png
%{_iconsdir}/hicolor/96x96/apps/%{drivername}-settings.png
%{_iconsdir}/hicolor/128x128/apps/%{drivername}-settings.png

# vdpau
%dir %{nvidia_libdir}/vdpau
# ensure this file is not removed by upgrades from previous package releases
%{_libdir}/libvdpau_nvidia.so.1
%{_libdir}/libvdpau_nvidia.so.%{version}
# this file is dlopened sometimes, so not for -devel
%{nvidia_libdir}/libvdpau_nvidia.so
%{nvidia_libdir}/vdpau/libvdpau_nvidia.so.1
%{nvidia_libdir}/vdpau/libvdpau_nvidia.so.%{version}
#
%dir %{nvidia_libdir32}/vdpau
# ensure this file is not removed by upgrades from previous package releases
%{_prefix}/lib/libvdpau_nvidia.so.1
%{_prefix}/lib/libvdpau_nvidia.so.%{version}
# this file is dlopened sometimes, so not for devel
%{nvidia_libdir32}/libvdpau_nvidia.so
%{nvidia_libdir32}/vdpau/libvdpau_nvidia.so.1
%{nvidia_libdir32}/vdpau/libvdpau_nvidia.so.%{version}
# wine
%{nvidia_libdir32}/nvidia/wine/_nvngx.dll
%{nvidia_libdir32}/nvidia/wine/nvngx.dll
%{_libdir}/nvidia/wine/_nvngx.dll
%{_libdir}/nvidia/wine/nvngx.dll

# GLX libs
%{nvidia_libdir}/libEGL_nvidia.so.0
%{nvidia_libdir}/libEGL_nvidia.so.%{version}
%{nvidia_libdir}/libGLESv1_CM_nvidia.so.1
%{nvidia_libdir}/libGLESv1_CM_nvidia.so.%{version}
%{nvidia_libdir}/libGLESv2_nvidia.so.2
%{nvidia_libdir}/libGLESv2_nvidia.so.%{version}
%{nvidia_libdir}/libGLX_nvidia.so.0
%{nvidia_libdir}/libGLX_nvidia.so.%{version}
%{nvidia_libdir}/libnvidia-allocator.so.1
%{nvidia_libdir}/libnvidia-allocator.so.%{version}
%{nvidia_libdir}/libnvidia-api.so.1
%{nvidia_libdir}/libnvidia-cfg.so.1
%{nvidia_libdir}/libnvidia-cfg.so.%{version}
%{nvidia_libdir}/libnvidia-eglcore.so.%{version}
%{nvidia_libdir}/libnvidia-egl-gbm.so.1
%{nvidia_libdir}/libnvidia-egl-gbm.so.%{gbm_eglver}
%{nvidia_libdir}/libnvidia-fbc.so.1
%{nvidia_libdir}/libnvidia-fbc.so.%{version}
%{nvidia_libdir}/libnvidia-glcore.so.%{version}
%{nvidia_libdir}/libnvidia-glsi.so.%{version}
%{nvidia_libdir}/libnvidia-glvkspirv.so.%{version}
%{nvidia_libdir}/libnvidia-gpucomp.so.%{version}
%{nvidia_libdir}/libnvidia-gtk2.so.%{version}
%{nvidia_libdir}/libnvidia-gtk3.so.%{version}
%{nvidia_libdir}/libnvidia-ngx.so.1
%{nvidia_libdir}/libnvidia-ngx.so.%{version}
%if %{mgaversion} >= 9
%{nvidia_libdir}/libnvidia-pkcs11-openssl3.so.%{version}
%else
%{nvidia_libdir}/libnvidia-pkcs11.so.%{version}
%endif
%{nvidia_libdir}/libnvidia-rtcore.so.%{version}
%{nvidia_libdir}/libnvidia-tls.so.%{version}
%{nvidia_libdir}/libnvidia-wayland-client.so.%{version}
%{nvidia_libdir}/libnvoptix.so.1
%{nvidia_libdir}/libnvoptix.so.%{version}
%{nvidia_libdir}/nvidia-drm_gbm.so
%{_libdir}/gbm/nvidia-drm_gbm.so
%{nvidia_libdir32}/libEGL_nvidia.so.0
%{nvidia_libdir32}/libEGL_nvidia.so.%{version}
%{nvidia_libdir32}/libGLESv1_CM_nvidia.so.1
%{nvidia_libdir32}/libGLESv1_CM_nvidia.so.%{version}
%{nvidia_libdir32}/libGLESv2_nvidia.so.2
%{nvidia_libdir32}/libGLESv2_nvidia.so.%{version}
%{nvidia_libdir32}/libGLX_nvidia.so.0
%{nvidia_libdir32}/libGLX_nvidia.so.%{version}
%{nvidia_libdir32}/libnvidia-allocator.so
%{nvidia_libdir32}/libnvidia-allocator.so.1
%{nvidia_libdir32}/libnvidia-allocator.so.%{version}
%{nvidia_libdir32}/libnvidia-eglcore.so.%{version}
%{nvidia_libdir32}/libnvidia-fbc.so.1
%{nvidia_libdir32}/libnvidia-fbc.so.%{version}
%{nvidia_libdir32}/libnvidia-glcore.so.%{version}
%{nvidia_libdir32}/libnvidia-glsi.so.%{version}
%{nvidia_libdir32}/libnvidia-glvkspirv.so.%{version}
%{nvidia_libdir32}/libnvidia-gpucomp.so.%{version}
%{nvidia_libdir32}/libnvidia-tls.so.%{version}

# nvidia glxserver
%{nvidia_extensionsdir}/libglxserver_nvidia.so.%{version}
%{nvidia_extensionsdir}/libglxserver_nvidia.so
%{nvidia_driversdir}/nvidia_drv.so
%{nvidia_old_driversdir}/libglx.so

%files -n %{drivername}-devel
%defattr(-,root,root)
%{nvidia_libdir}/libnvcuvid.so
%{nvidia_libdir}/libnvidia-allocator.so
%{nvidia_libdir}/libnvidia-cfg.so
%{nvidia_libdir}/libnvidia-encode.so
%{nvidia_libdir}/libnvidia-fbc.so
%{nvidia_libdir}/libnvidia-ml.so
%{nvidia_libdir}/libnvidia-opticalflow.so
%{nvidia_libdir32}/libnvcuvid.so
%{nvidia_libdir32}/libnvidia-encode.so
%{nvidia_libdir32}/libnvidia-fbc.so
%{nvidia_libdir32}/libnvidia-ml.so
%{nvidia_libdir32}/libnvidia-opticalflow.so

%files -n dkms-%{drivername}
%defattr(-,root,root)
%license %{pkgname}/LICENSE
%{_usrsrc}/%{drivername}-%{version}-%{release}
%{_udevrulesdir}/81-nvidia.rules
%{_udevrulesdir}/81-nvidia-pm.rules
%config(noreplace) %{_sysconfdir}/dracut.conf.d/99-nvidia.conf
/lib/firmware/nvidia/%{version}/gsp_ga10x.bin
/lib/firmware/nvidia/%{version}/gsp_tu10x.bin

%files -n %{drivername}-doc-html -f %pkgname/nvidia-html.files
%defattr(-,root,root)

%files -n %{drivername}-cuda-opencl
%defattr(-,root,root)
%dir %{_sysconfdir}/OpenCL
%dir %{_sysconfdir}/OpenCL/vendors
%{_sysconfdir}/OpenCL/vendors/nvidia.icd
%ghost %{_sysconfdir}/ld.so.conf.d/%{drivername}-cuda.conf
%{nvidia_libdir}/libcuda.so
%{nvidia_libdir}/libcuda.so.1
%{nvidia_libdir}/libcuda.so.%{version}
%{nvidia_libdir}/libcudadebugger.so.1
%{nvidia_libdir}/libcudadebugger.so.%{version}
%{nvidia_libdir}/libnvcuvid.so.1
%{nvidia_libdir}/libnvcuvid.so.%{version}
%{nvidia_libdir}/libnvidia-encode.so.1
%{nvidia_libdir}/libnvidia-encode.so.%{version}
%{nvidia_libdir}/libnvidia-ml.so.1
%{nvidia_libdir}/libnvidia-ml.so.%{version}
%{nvidia_libdir}/libnvidia-nvvm.so
%{nvidia_libdir}/libnvidia-nvvm.so.4
%{nvidia_libdir}/libnvidia-nvvm.so.%{version}
%{nvidia_libdir}/libnvidia-opencl.so.1
%{nvidia_libdir}/libnvidia-opencl.so.%{version}
%{nvidia_libdir}/libnvidia-opticalflow.so.1
%{nvidia_libdir}/libnvidia-opticalflow.so.%{version}
%{nvidia_libdir}/libnvidia-ptxjitcompiler.so
%{nvidia_libdir}/libnvidia-ptxjitcompiler.so.1
%{nvidia_libdir}/libnvidia-ptxjitcompiler.so.%{version}
%{nvidia_libdir32}/libcuda.so
%{nvidia_libdir32}/libcuda.so.1
%{nvidia_libdir32}/libcuda.so.%{version}
%{nvidia_libdir32}/libnvcuvid.so.1
%{nvidia_libdir32}/libnvcuvid.so.%{version}
%{nvidia_libdir32}/libnvidia-encode.so.1
%{nvidia_libdir32}/libnvidia-encode.so.%{version}
%{nvidia_libdir32}/libnvidia-ml.so.1
%{nvidia_libdir32}/libnvidia-ml.so.%{version}
%{nvidia_libdir32}/libnvidia-nvvm.so
%{nvidia_libdir32}/libnvidia-nvvm.so.4
%{nvidia_libdir32}/libnvidia-nvvm.so.%{version}
%{nvidia_libdir32}/libnvidia-opencl.so.1
%{nvidia_libdir32}/libnvidia-opencl.so.%{version}
%{nvidia_libdir32}/libnvidia-opticalflow.so.1
%{nvidia_libdir32}/libnvidia-opticalflow.so.%{version}
%{nvidia_libdir32}/libnvidia-ptxjitcompiler.so
%{nvidia_libdir32}/libnvidia-ptxjitcompiler.so.1
%{nvidia_libdir32}/libnvidia-ptxjitcompiler.so.%{version}
%{nvidia_bindir}/nvidia-cuda-mps-control
%{nvidia_bindir}/nvidia-cuda-mps-server
%{_mandir}/man1/nvidia-cuda-mps-control.1%{_extension}

%files -n %{drivername}-utils
%defattr(-,root,root)
%{nvidia_bindir}/nvidia-modprobe
%{nvidia_bindir}/nvidia-persistenced
%{nvidia_bindir}/nvidia-smi
%{nvidia_bindir}/nvidia-ngx-updater
%{_mandir}/man1/nvidia-modprobe.1%{_extension}
%{_mandir}/man1/nvidia-persistenced.1%{_extension}
%{_mandir}/man1/nvidia-smi.1%{_extension}

%files -n %{drivername}-lib32
%defattr(-,root,root)

%files -n %{drivername}-all
%defattr(-,root,root)



%changelog
* Thu Jan 25 2024 ghibo <ghibo> 545.29.06-2.mga9
+ Revision: 2034500
- Avoid using specific (sub)module names
- Update to release 545.29.06
- nvidia-newfeature for mga9
- Update to release 545.29.02
- Sync SPEC file with latest nvidia-current.
- Update files list.

* Thu Jun 01 2023 ghibo <ghibo> 530.41.03-3.mga9.nonfree
+ Revision: 1960452
- Rename kernel modules name to include also the series

* Mon May 29 2023 ghibo <ghibo> 530.41.03-2.mga9.nonfree
+ Revision: 1959698
- Add Conflicts also between dkms modules

* Sun May 28 2023 ghibo <ghibo> 530.41.03-1.mga9.nonfree
+ Revision: 1959307
- imported package nvidia-newfeature


* Sat May 27 2023 ghibo <ghibo> 530.41.03-1.mga9
- Introduce nvidia-newfeature package renaming from nvidia-current.
- Bump to release 530.41.03 (new feature branch).