create_links() {
    find "$PKGDIR" -type f -name '*.so*' ! -path '*xorg/*' -print0 | while read -d $'\0' _lib; do
        _soname=$(dirname "${_lib}")/$(readelf -d "${_lib}" | grep -Po 'SONAME.*: \[\K[^]]*' || true)
        _base=$(echo ${_soname} | sed -r 's/(.*).so.*/\1.so/')
        [[ -e "${_soname}" ]] || ln -s $(basename "${_lib}") "${_soname}"
        [[ -e "${_base}" ]] || ln -s $(basename "${_soname}") "${_base}"
    done
}

cd NVIDIA-Linux-x86_64-$PKGVER/kernel

abinfo "Processing DKMS configuration file..."
sed -i "s/__VERSION_STRING/$PKGVER/" dkms.conf
sed -i 's/__JOBS/`nproc`/' dkms.conf
sed -i 's/__DKMS_MODULES//' dkms.conf
sed -i '$iBUILT_MODULE_NAME[0]="nvidia"\
DEST_MODULE_LOCATION[0]="/kernel/drivers/video"\
BUILT_MODULE_NAME[1]="nvidia-uvm"\
DEST_MODULE_LOCATION[1]="/kernel/drivers/video"\
BUILT_MODULE_NAME[2]="nvidia-modeset"\
DEST_MODULE_LOCATION[2]="/kernel/drivers/video"\
BUILT_MODULE_NAME[3]="nvidia-drm"\
DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf

cd ..

abinfo "NVIDIA blacklist for Nouveau..."
install -dm 755 "$PKGDIR"/usr/{lib/modprobe.d,src}
cp -dr --no-preserve='ownership' kernel "$PKGDIR"/usr/src/nvidia-$PKGVER
echo 'blacklist nouveau' > "$PKGDIR"/usr/lib/modprobe.d/nvidia.conf

abinfo "NVIDIA Persistenced..."
tar xf nvidia-persistenced-init.tar.bz2

abinfo "Processing and installing OpenCL runtime..."
sed -i 's/__NV_VK_ICD__/libGLX_nvidia.so.0/' nvidia_icd.json.template
install -Dvm644 nvidia.icd "$PKGDIR"/etc/OpenCL/vendors/nvidia.icd
install -Dvm755 "libnvidia-compiler.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-compiler.so.$PKGVER
install -Dvm755 "libnvidia-opencl.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-opencl.so.$PKGVER

abinfo "NVIDIA Xorg driver..."
install -Dvm755 nvidia_drv.so \
    "$PKGDIR"/usr/lib/xorg/modules/drivers/nvidia_drv.so

abinfo "GLX extension modules..."
install -Dvm755 "libglx.so.$PKGVER" \
    "$PKGDIR"/usr/lib/nvidia/xorg/libglx.so.$PKGVER
ln -sv "libglx.so.$PKGVER" \
    "$PKGDIR"/usr/lib/nvidia/xorg/libglx.so.1
ln -s "libglx.so.$PKGVER" \
    "$PKGDIR"/usr/lib/nvidia/xorg/libglx.so
install -Dvm755 "libGLX_nvidia.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libGLX_nvidia.so.$PKGVER

abinfo 'OpenGL libraries (for LibGLVND)...'
install -Dvm755 "libEGL_nvidia.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libEGL_nvidia.so.$PKGVER
install -Dvm755 "libGLESv1_CM_nvidia.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libGLESv1_CM_nvidia.so.$PKGVER
install -Dvm755 "libGLESv2_nvidia.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libGLESv2_nvidia.so.$PKGVER
install -Dvm644 "10_nvidia.json" \
    "$PKGDIR"/usr/share/glvnd/egl_vendor.d/10_nvidia.json

abinfo "NVIDIA OpenGL core libraries..."
install -Dvm755 "libnvidia-glcore.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-glcore.so.$PKGVER
install -Dvm755 "libnvidia-eglcore.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-eglcore.so.$PKGVER
install -Dvm755 "libnvidia-glsi.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-glsi.so.$PKGVER

abinfo "Miscellaneous libraries for multimedia, framebuffer, etc..."
install -Dvm755 "libnvidia-ifr.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-ifr.so.$PKGVER
install -Dvm755 "libnvidia-fbc.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-fbc.so.$PKGVER
install -Dvm755 "libnvidia-encode.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-encode.so.$PKGVER
install -Dvm755 "libnvidia-cfg.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-cfg.so.$PKGVER
install -Dvm755 "libnvidia-ml.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-ml.so.$PKGVER

abinfo "Vulkan ICD data..."
install -Dvm644 "nvidia_icd.json.template" \
    "$PKGDIR"/usr/share/vulkan/icd.d/nvidia_icd.json

abinfo "VDPAU runtime library..."
install -Dvm755 "libvdpau_nvidia.so.$PKGVER" \
    "$PKGDIR"/usr/lib/vdpau/libvdpau_nvidia.so.$PKGVER

abinfo "nvidia-tls libraries..."
install -Dvm755 "libnvidia-tls.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-tls.so.$PKGVER
install -Dvm755 "tls/libnvidia-tls.so.$PKGVER" \
    "$PKGDIR"/usr/lib/tls/libnvidia-tls.so.$PKGVER

abinfo "CUDA interface libraries..."
install -Dvm755 "libcuda.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libcuda.so.$PKGVER
install -Dvm755 "libnvcuvid.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvcuvid.so.$PKGVER

abinfo "PTX JIT Compiler library..."
install -Dvm755 "libnvidia-ptxjitcompiler.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-ptxjitcompiler.so.$PKGVER

abinfo 'Fat (multiarchitecture) binary loader...'
install -Dvm755 "libnvidia-fatbinaryloader.so.$PKGVER" \
    "$PKGDIR"/usr/lib/libnvidia-fatbinaryloader.so.$PKGVER

abinfo "Debug and core dump utility..."
install -Dvm755 nvidia-debugdump \
    "$PKGDIR"/usr/bin/nvidia-debugdump

abinfo "NVIDIA X configurator..."
install -Dvm755 nvidia-xconfig \
    "$PKGDIR"/usr/bin/nvidia-xconfig
install -Dvm644 nvidia-xconfig.1.gz \
    "$PKGDIR"/usr/share/man/man1/nvidia-xconfig.1.gz

abinfo "NVIDIA Bug Reporter..."
install -Dvm755 nvidia-bug-report.sh \
    "$PKGDIR"/usr/bin/nvidia-bug-report

abinfo "NVIDIA hardware status monitor..."
install -Dvm755 nvidia-smi \
    "$PKGDIR"/usr/bin/nvidia-smi
install -Dvm644 nvidia-smi.1.gz \
    "$PKGDIR"/usr/share/man/man1/nvidia-smi.1.gz

abinfo "NVIDIA CUDA Multi-Process Service..."
install -Dvm755 nvidia-cuda-mps-server \
    "$PKGDIR"/usr/bin/nvidia-cuda-mps-server
install -Dvm755 nvidia-cuda-mps-control \
    "$PKGDIR"/usr/bin/nvidia-cuda-mps-control
install -Dvm644 nvidia-cuda-mps-control.1.gz \
    "$PKGDIR"/usr/share/man/man1/nvidia-cuda-mps-control.1.gz

abinfo "nvidia-modprobe... This should be removed if nvidia fixed their uvm module!"
install -Dvm4755 nvidia-modprobe \
    "$PKGDIR"/usr/bin/nvidia-modprobe
install -Dvm644 nvidia-modprobe.1.gz \
    "$PKGDIR"/usr/share/man/man1/nvidia-modprobe.1.gz

abinfo "NVIDIA Persistence Daemon..."
install -Dvm755 nvidia-persistenced \
    "$PKGDIR"/usr/bin/nvidia-persistenced
install -Dvm644 nvidia-persistenced.1.gz \
    "$PKGDIR"/usr/share/man/man1/nvidia-persistenced.1.gz
install -Dvm644 \
    nvidia-persistenced-init/systemd/nvidia-persistenced.service.template \
    "$PKGDIR"/usr/lib/systemd/system/nvidia-persistenced.service
sed -e 's/__USER__/nvidia-persistenced/' \
    -i "$PKGDIR"/usr/lib/systemd/system/nvidia-persistenced.service

abinfo "Application profiles..."
install -Dvm644 nvidia-application-profiles-$PKGVER-rc \
    "$PKGDIR"/usr/share/nvidia/nvidia-application-profiles-$PKGVER-rc
install -Dvm644 nvidia-application-profiles-$PKGVER-key-documentation \
    "$PKGDIR"/usr/share/nvidia/nvidia-application-profiles-$PKGVER-key-documentation

abinfo "NVIDIA Control Panel..."
install -D -m755 nvidia-settings "$PKGDIR"/usr/bin/nvidia-settings
install -D -m644 nvidia-settings.1.gz "$PKGDIR"/usr/share/man/man1/nvidia-settings.1.gz
install -D -m644 nvidia-settings.png "$PKGDIR"/usr/share/pixmaps/nvidia-settings.png
install -D -m755 libnvidia-gtk2.so.$PKGVER "$PKGDIR"/usr/lib/libnvidia-gtk2.so.$PKGVER
install -D -m755 libnvidia-gtk3.so.$PKGVER "$PKGDIR"/usr/lib/libnvidia-gtk3.so.$PKGVER

create_links

abinfo "License and help texts"
for i in README.txt LICENSE NVIDIA_Changelog; do
    install -Dvm644 $i "$PKGDIR"/usr/share/doc/nvidia+390/$i
done

cd "$SRCDIR"

abinfo "Installing optenv32 libraries"
pushd "${SRCDIR}"
source "${SRCDIR}/autobuild/build-optenv32"
popd
