local X_MOD KVER                                                    &&
KVER=$(get_kernel_version)                                          &&
MAKEFILE=Makefile                                                   &&
#
# Install kernel module 'nvidia.ko'
#
cd  $SOURCE_DIRECTORY/kernel                  &&
make  KERNEL_MODLIB=$INSTALL_ROOT/lib/modules/$KVER  \
      KERNEL_UNAME=$KVER                             \
      SYSSRC=$INSTALL_ROOT/lib/modules/$KVER/source  \
      -f $MAKEFILE  modules_install            &&
cd $SOURCE_DIRECTORY                           &&

#
# Install firmware
#
mkdir -p "$INSTALL_ROOT"/usr/lib/firmware/nvidia                                 &&
install -m644 -o root -g root firmware/* "$INSTALL_ROOT"/usr/lib/firmware/nvidia &&

#
# Install binaries and script
#
if is_depends_enabled $SPELL gtk+2; then
  install -v -m 0755 -o root -g root nvidia-settings $INSTALL_ROOT/usr/bin
fi &&
for file in nvidia-bug-report.sh nvidia-xconfig nvidia-debugdump nvidia-smi \
            nvidia-cuda-mps-server nvidia-cuda-mps-control nvidia-persistenced;  do
  install -v -m 0755  -o root  -g root  $file  $INSTALL_ROOT/usr/bin
done                              &&
install -v -m 0766  -o root  -g root  nvidia-installer  $INSTALL_ROOT/usr/bin  &&

#
# use mesa's OpenGL headers
#
ln -sfn /usr/include/GL/.mesa $INSTALL_ROOT/usr/include/GL/.nvidia &&

#
# Install OpenGL libraries
#

# Fill in the path to libGL.so
cd $SOURCE_DIRECTORY &&
for lib in \
	libnvidia-allocator.so.${VERSION/-.} \
	libnvidia-cbl.so.${VERSION/-/.} \
	libnvidia-cfg.so.${VERSION/-/.} \
	libnvidia-compiler.so.${VERSION/-/.} \
	libnvidia-eglcore.so.${VERSION/-/.} \
	libnvidia-egl-wayland.so.1.1.10 \
	libnvidia-egl-gbm.so.1.1.0 \
	libnvidia-eglcore.so.${VERSION/-/.} \
	libnvidia-encode.so.${VERSION/-/.} \
	libnvidia-fbc.so.${VERSION/-/.} \
	libnvidia-glcore.so.${VERSION/-/.} \
	libnvidia-glsi.so.${VERSION/-/.} \
	libnvidia-glvkspirv.so.${VERSION/-/.} \
	libnvidia-gtk2.so.${VERSION/-/.} \
	libnvidia-gtk3.so.${VERSION/-/.} \
	libnvidia-ifr.so.${VERSION/-/.} \
	libnvidia-ml.so.${VERSION/-/.} \
	libnvidia-ngx.so.${VERSION/-/.} \
	libnvidia-opencl.so.${VERSION/-/.} \
	libnvidia-opticalflow.so.${VERSION/-/.} \
	libnvidia-ptxjitcompiler.so.${VERSION/-/.} \
	libnvidia-rtcore.so.${VERSION/-/.} \
	libnvidia-tls.so.${VERSION/-/.} \
	libnvoptix.so.${VERSION/-/.} \
	; do
  install -v -m 0644  -o root  -g root  $lib  $INSTALL_ROOT/usr/lib
done                              &&
mkdir -vp $INSTALL_ROOT/usr/lib/.nvidia \
          $INSTALL_ROOT/usr/lib/xorg/modules/extensions/.nvidia/ &&

cp -vr libGL.so.1.7.0 $INSTALL_ROOT/usr/lib/.nvidia           &&
cp -vr libGLdispatch.so.0 $INSTALL_ROOT/usr/lib/.nvidia       &&
cp -vr libEGL.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/.nvidia &&
cp -vr libEGL.so.1.1.0 $INSTALL_ROOT/usr/lib/.nvidia          &&
cp -vr libGLESv1_CM.so.1.2.0 $INSTALL_ROOT/usr/lib/.nvidia    &&
cp -vr libGLESv2.so.2.1.0 $INSTALL_ROOT/usr/lib/.nvidia       &&
cp -vr libGLX.so.0 $INSTALL_ROOT/usr/lib/.nvidia              &&
cp -vr libOpenGL.so.0 $INSTALL_ROOT/usr/lib/.nvidia           &&

mkdir  -vp  $INSTALL_ROOT/usr/lib/tls &&
install -v -m 0644  -o root  -g root  libnvidia-tls.so.${VERSION/-/.}  \
         $INSTALL_ROOT/usr/lib/tls                                 &&

#
# Xorg conf for PRIME
#
mkdir -p "$INSTALL_ROOT"/usr/share/X11/xorg.conf.d &&
install -m644 nvidia-drm-outputclass.conf "$INSTALL_ROOT"/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf &&

#
# Create library symlinks
#
pushd  $INSTALL_ROOT/usr/lib/.nvidia                           &&
ln  -sfn  libGL.so.1.7.0                   libGL.so.1          &&
ln  -sfn  libGL.so.1                       libGL.so            &&

ln  -sfn  libEGL_nvidia.so.${VERSION/-/.}  libEGL_nvidia.so.1  &&
ln  -sfn  libEGL_nvidia.so.1               libEGL_nvidia.so    &&

ln  -sfn  libGLX.so.0                      libGLX.so           &&

ln  -sfn  libEGL.so.${VERSION/-/.}         libEGL.so.1         &&
ln  -sfn  libEGL.so.1                      libEGL.so           &&

ln  -sfn  libGLESv1_CM.so.1                libGLESv1_CM.so     &&
ln  -sfn  libGLESv1_CM.so.1.2.0            libGLESv1_CM.so.1   &&
ln  -sfn  libGLESv2.so.2.1.0               libGLESv2.so        &&
ln  -sfn  libOpenGL.so.0                   libOpenGL.so        &&
popd                                                           &&
pushd  $INSTALL_ROOT/usr/lib                                   &&
ln  -sfn  libnvidia-glcore.so.${VERSION/-/.}   libGLcore.so.1  &&

ln  -sfn  libnvidia-cfg.so.${VERSION/-/.}  libnvidia-cfg.so.1  &&
ln  -sfn  libnvidia-cfg.so.1               libnvidia-cfg.so    &&

ln  -sfn  libnvidia-tls.so.${VERSION/-/.}  libnvidia-tls.so.1  &&

ln  -sfn  libnvidia-egl-wayland.so.1.1.0   libnvidia-egl-wayland.so.1 &&

ln  -sfn  libnvidia-ml.so.${VERSION/-/.}  libnvidia-ml.so.1  &&
ln  -sfn  libnvidia-ml.so.1               libnvidia-ml.so    &&

ln  -sfn  libnvidia-encode.so.${VERSION/-/.}  libnvidia-encode.so.1  &&
ln  -sfn  libnvidia-encode.so.1               libnvidia-encode.so    &&

ln  -sfn  libnvidia-ifr.so.${VERSION/-/.}  libnvidia-ifr.so.1  &&
ln  -sfn  libnvidia-ifr.so.1               libnvidia-ifr.so    &&

ln  -sfn  libnvidia-fbc.so.${VERSION/-/.}  libnvidia-fbc.so.1  &&
ln  -sfn  libnvidia-fbc.so.1               libnvidia-fbc.so    &&

ln  -sfn  libnvidia-fatbinaryloader.so.${VERSION/-/.}  libnvidia-fatbinaryloader.so.1  &&
ln  -sfn  libnvidia-fatbinaryloader.so.1               libnvidia-fatbinaryloader.so    &&
popd                                                           &&
pushd  $INSTALL_ROOT/usr/lib/tls                               &&
ln  -sfn  libnvidia-tls.so.${VERSION/-/.}  libnvidia-tls.so.1  &&
popd                                                           &&

#
# Install X11 modules
#
mkdir -vp $INSTALL_ROOT/usr/lib/xorg/modules/drivers &&
install -v -m 0644 -o root -g root nvidia_drv.so $INSTALL_ROOT/usr/lib/xorg/modules/drivers/ &&
install -v -m 0644 -o root -g root libGLX_nvidia.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/.nvidia/ &&
pushd $INSTALL_ROOT/usr/lib/.nvidia/                       &&
ln -sfn libGLX_nvidia.so.${VERSION/-/.} libGLX_nvidia.so.0 &&
ln -sfn libGLX_nvidia.so.0 libGLX_nvidia.so                &&
popd                                                       &&

cp -vr libEGL_nvidia.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/.nvidia       &&
cp -vr libGLESv1_CM_nvidia.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/.nvidia &&
cp -vr libGLESv2_nvidia.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/.nvidia    &&

cp -vr libglxserver_nvidia.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/xorg/modules/extensions/ &&
pushd $INSTALL_ROOT/usr/lib/xorg/modules/extensions/                   &&
ln -sfn libglxserver_nvidia.so.${VERSION/-/.} libglxserver_nvidia.so.1 &&
ln -sfn libglxserver_nvidia.so.1 libglxserver_nvidia.so                &&
popd                                                                   &&
#
# Setup symlinks
#
ln -sfn /usr/lib/.nvidia/libGLX_nvidia.so.${VERSION/-/.} $INSTALL_ROOT/usr/lib/libGLX_indirect.so.0 &&
#
# Install Cuda headers
#
#mkdir  -vp  $INSTALL_ROOT/usr/include/cuda
#for file in cudaGL.h cuda.h; do
#  install -v -m 0644  -o root  -g root  $file  $INSTALL_ROOT/usr/include/cuda/
#done                                     &&

#
# Install Cuda libraries
#
for lib in libcuda.so.${VERSION/-/.} libnvcuvid.so.${VERSION/-/.}; do
  install -v -m 0644  -o root  -g root  $lib  $INSTALL_ROOT/usr/lib
done                                    &&
#
# Setup symlinks
#
pushd  $INSTALL_ROOT/usr/lib                                   &&
ln  -sfn  libcuda.so.${VERSION/-/.}  libcuda.so.1              &&
ln  -sfn  libcuda.so.1  libcuda.so                             &&
popd                                                           &&

#
# Install VDPAU headers
#
#mkdir  -vp  $INSTALL_ROOT/usr/include/vdpau
#for file in vdpau.h vdpau_x11.h; do
#  install -v -m 0644  -o root  -g root  $file  $INSTALL_ROOT/usr/include/vdpau/
#done                                     &&

#
# Install VDPAU libraries
#
for lib in libvdpau_nvidia.so.${VERSION/-/.}; do
  install -v -m 0644  -o root  -g root  $lib  $INSTALL_ROOT/usr/lib/
done                                                                         &&
mkdir  -vp  $INSTALL_ROOT/usr/lib/vdpau                                      &&
for lib in libvdpau_nvidia.so.${VERSION/-/.}; do
  install -v -m 0644  -o root  -g root  $lib  $INSTALL_ROOT/usr/lib/vdpau/
done                                    &&

#
# Install wine libraries
#
mkdir -p "$INSTALL_ROOT"/usr/lib/nvidia/wine                    &&
install -v -m755 {_,}nvngx.dll "$INSTALL_ROOT"/usr/lib/nvidia/wine &&

#
# Setup symlinks
#
pushd  $INSTALL_ROOT/usr/lib                                                 &&
ln  -sfn  libvdpau_nvidia.so.${VERSION/-/.}  libvdpau.so.1                   &&
ln  -sfn  libvdpau.so.1  libvdpau.so                                         &&
popd                                                                         &&
pushd  $INSTALL_ROOT/usr/lib/vdpau                                           &&
ln  -sfn  libvdpau_nvidia.so.${VERSION/-/.}  libvdpau_nvidia.so.1            &&
ln  -sfn  libvdpau_nvidia.so.1  libvdpau_nvidia.so                           &&
popd                                                                         &&

#
# Install OpenCL headers
#
#mkdir  -vp  $INSTALL_ROOT/usr/include/CL
#for file in cl_gl.h cl.h cl_platform.h; do
#  install -v -m 0644  -o root  -g root  $file  $INSTALL_ROOT/usr/include/CL/
#done                                     &&

#
# Install OpenCL libraries
#
for lib in libOpenCL.so.1.0.0; do
  install -v -m 0644  -o root  -g root  $lib  $INSTALL_ROOT/usr/lib/
done                                    &&
#
# Setup symlinks
#
pushd  $INSTALL_ROOT/usr/lib                                   &&
ln  -sfn  libOpenCL.so.1.0.0 libOpenCL.so.1                    &&
ln  -sfn  libOpenCL.so.1 libOpenCL.so                          &&
popd &&

#
# Install Freedesktop.org spec
#
install  -m 0644  -o root  -g root                                         \
         $SOURCE_DIRECTORY/nvidia-settings.desktop  \
         $INSTALL_ROOT/usr/share/applications                              &&

#
# Install documentation
#
pushd $SOURCE_DIRECTORY/html &&
if  [  !  -d  $INSTALL_ROOT/usr/share/doc/NVIDIA_GLX-1.0  ];  then
  mkdir  -p  $INSTALL_ROOT/usr/share/doc/NVIDIA_GLX-1.0
fi                                                             &&
cp  -a  *  $INSTALL_ROOT/usr/share/doc/NVIDIA_GLX-1.0          &&
popd &&

# Install pixmap
mkdir -p $INSTALL_ROOT/usr/share/pixmaps/                      &&
cp  nvidia-settings.png  $INSTALL_ROOT/usr/share/pixmaps/       &&

if  [  !  -d  $INSTALL_ROOT/usr/share/doc/$SPELL  ];  then
  mkdir  -p  $INSTALL_ROOT/usr/share/doc/$SPELL
fi                                                             &&
install  -m 0644  -o root  -g root  $SOURCE_DIRECTORY/LICENSE  \
         $INSTALL_ROOT/usr/share/doc/$SPELL                    &&
install  -m 0644  -o root  -g root  $SOURCE_DIRECTORY/LICENSE  \
         $INSTALL_ROOT/usr/share/doc/NVIDIA_GLX-1.0            &&

#
# Install man pages
#
for manual in nvidia-cuda-mps-control.1.gz \
              nvidia-modprobe.1.gz \
              nvidia-settings.1.gz \
              nvidia-xconfig.1.gz \
              nvidia-installer.1.gz \
              nvidia-persistenced.1.gz \
              nvidia-smi.1.gz; do
  install  -m 0644  -o root  -g root  $manual  $INSTALL_ROOT/usr/share/man/man1
done
