#! /bin/sh # # Quick hack to output the necessary QA_* ignores in the ebuild for a specific nvidia-drivers release # ## ## What release to check? (we only support >=2xx.xx) NV_VER_LINUX="256.29" NV_VER_FBSD="256.25" ## Package names X86_NV_DIR="NVIDIA-Linux-x86-${NV_VER_LINUX}" AMD64_NV_DIR="NVIDIA-Linux-x86_64-${NV_VER_LINUX}" X86_FBSD_NV_DIR="NVIDIA-FreeBSD-x86-${NV_VER_FBSD}" NV_LINUX_PKG_EXT=".run" NV_FBSD_PKG_EXT=".tar.gz" X86_NV_PACKAGE="${X86_NV_DIR}${NV_LINUX_PKG_EXT}" AMD64_NV_PACKAGE="${AMD64_NV_DIR}${NV_LINUX_PKG_EXT}" X86_FBSD_NV_PACKAGE="${X86_FBSD_NV_DIR}${NV_FBSD_PKG_EXT}" ## Portage distfiles PORTAGE_DISTDIR="/usr/portage/distfiles" ## Unpack mkdir -p "./${NV_VER_LINUX}" cd "./${NV_VER_LINUX}" [[ -f "./${X86_NV_PACKAGE}" ]] || cp "${PORTAGE_DISTDIR}/${X86_NV_PACKAGE}" "./${X86_NV_PACKAGE}" [[ -f "./${AMD64_NV_PACKAGE}" ]] || cp "${PORTAGE_DISTDIR}/${AMD64_NV_PACKAGE}" "./${AMD64_NV_PACKAGE}" [[ -f "./${X86_FBSD_NV_PACKAGE}" ]] || cp "${PORTAGE_DISTDIR}/${X86_FBSD_NV_PACKAGE}" "./${X86_FBSD_NV_PACKAGE}" chmod -cR a+x "./${X86_NV_PACKAGE}" "./${AMD64_NV_PACKAGE}" [[ -d "./${X86_NV_DIR}" ]] || ./${X86_NV_PACKAGE} -x [[ -d "./${AMD64_NV_DIR}" ]] || ./${AMD64_NV_PACKAGE} -x [[ -d "./${X86_FBSD_NV_DIR}" ]] || tar -xzf ./${X86_FBSD_NV_PACKAGE} ## x86 & amd64 (everything) ## Store QA_ infos for arch in X86 AMD64 ; do [[ "${arch}" == "X86" ]] && cd "./${X86_NV_DIR}" || cd "./${AMD64_NV_DIR}" # TEXTRELS arch_TEXTRELS="$( scanelf -qyRF '%t %p' ./ | gawk '{print $2}' )" # EXECSTACK arch_EXECSTACK="$( scanelf -qyRAF '%e %p' ./ | grep -P '(^[RWX]{3} )([RWX!\-]{3} )([RWX!\-]{3} )(.*?$)' | gawk '{print $4}' )" # WX_LOAD arch_WX_LOAD="$( scanelf -qyRAF '%e %p' ./ | grep -P '(^[RWX!\-]{3} )([RWX!\-]{3} )([RWX]{3} )(.*?$)' | gawk '{print $4}' )" # DT_HASH arch_DT_HASH="$( scanelf -qyRF '%k %p' -k .hash ./ | sed -e "s:\.hash ::" )" # SONAME arch_SONAME="$( scanelf -ByF '%S %p' *.so* | gawk '$2 == "" { print }' | sed -e "s:^[[:space:]]::" )" cd .. ## Parse QA_ infos for qa_type in TEXTRELS EXECSTACK WX_LOAD DT_HASH SONAME ; do # lowercase arch name [[ "${arch}" == "X86" ]] && arch_low="x86" || arch_low="amd64" # arch_qa_type expanded var name arch_qa_type="arch_${qa_type}" # multilib support [[ "${arch}" == "X86" ]] && libdir="lib" || libdir="lib64" QA_type_arch="QA_${qa_type}_${arch_low}=\"" for file in ${!arch_qa_type} ; do # Skip binaries we don't install [[ "${file}" == "nvidia-settings" ]] || [[ "${file}" == "nvidia-installer" ]] || [[ "${file}" == "mkprecompiled" ]] || [[ "${file}" == "tls_test" ]] || [[ "${file}" == "tls_test_dso.so" ]] || [[ "${file}" == "libnvidia-wfb.so.${NV_VER_LINUX}" ]] || [[ "${file}" == "libvdpau_trace.so.${NV_VER_LINUX}" ]] || [[ "${file}" == "libvdpau.so.${NV_VER_LINUX}" ]] && continue # Skip one of the -tls lib [[ "${file}" == "libnvidia-tls.so.${NV_VER_LINUX}" ]] && continue # Then we have some special cases # nvidia-tls if [[ "${file}" == "tls/libnvidia-tls.so.${NV_VER_LINUX}" ]] ; then QA_type_arch="${QA_type_arch}usr/${libdir}/opengl/nvidia/lib/libnvidia-tls.so.${NV_VER_LINUX}\n\t" continue fi # GL, nvidia-glcore if [[ "${file}" == "libnvidia-glcore.so.${NV_VER_LINUX}" ]] || [[ "${file}" == "libGL.so.${NV_VER_LINUX}" ]] ; then QA_type_arch="${QA_type_arch}usr/${libdir}/opengl/nvidia/lib/${file}\n\t" continue fi # glx if [[ "${file}" == "libglx.so.${NV_VER_LINUX}" ]] ; then QA_type_arch="${QA_type_arch}usr/${libdir}/opengl/nvidia/extensions/${file}\n\t" continue fi # nvidia_drv.so if [[ "${file}" == "nvidia_drv.so" ]] ; then QA_type_arch="${QA_type_arch}usr/${libdir}/xorg/modules/drivers/${file}\n\t" continue fi # nvidia-xconfig, nvidia-smi if [[ "${file}" == "nvidia-xconfig" ]] || [[ "${file}" == "nvidia-smi" ]] ; then QA_type_arch="${QA_type_arch}usr/bin/${file}\n\t" continue fi # 32bits libs # Skip binaries we don't install [[ "${file}" == "32/libvdpau_trace.so.${NV_VER_LINUX}" ]] || [[ "${file}" == "32/libvdpau.so.${NV_VER_LINUX}" ]] && continue # Skip one of the -tls lib [[ "${file}" == "32/libnvidia-tls.so.${NV_VER_LINUX}" ]] && continue # Then we have some special cases # nvidia-tls if [[ "${file}" == "32/tls/libnvidia-tls.so.${NV_VER_LINUX}" ]] ; then QA_type_arch="${QA_type_arch}usr/lib32/opengl/nvidia/lib/libnvidia-tls.so.${NV_VER_LINUX}\n\t" continue fi # GL, nvidia-glcore if [[ "${file}" == "32/libnvidia-glcore.so.${NV_VER_LINUX}" ]] || [[ "${file}" == "32/libGL.so.${NV_VER_LINUX}" ]] ; then QA_type_arch="${QA_type_arch}usr/lib32/opengl/nvidia/lib/${file/32\/}\n\t" continue fi # Handle the rest (32b) if [[ "${file}" == 32/* ]] ; then QA_type_arch="${QA_type_arch}usr/lib32/${file/32\/}\n\t" continue fi # Handle the rest QA_type_arch="${QA_type_arch}usr/${libdir}/${file}\n\t" done # Close the quotes echo -e "${QA_type_arch}\"" echo "" done done ## FBSD (We only care about TEXTRELs) ## Store QA_ infos cd "./${X86_FBSD_NV_DIR}" # TEXTRELS FBSD_TEXTRELS="$( scanelf -qyRF '%t %p' ./obj/ | gawk '{print $2}' )" cd .. ## Parse QA_ infos QA_TEXTRELS_x86_fbsd="QA_TEXTRELS_x86_fbsd=\"boot/modules/nvidia.ko\n\t" for file in ${FBSD_TEXTRELS} ; do # Skip binaries we don't install [[ "${file}" == "libvdpau_trace.so.1" ]] || [[ "${file}" == "libvdpau.so.1" ]] && continue # We have some special cases # nvidia-tls, GL, nvidia-glcore if [[ "${file}" == "libnvidia-tls.so.1" ]] || [[ "${file}" == "libnvidia-glcore.so.1" ]] || [[ "${file}" == "libGL.so.1" ]] ; then QA_TEXTRELS_x86_fbsd="${QA_TEXTRELS_x86_fbsd}usr/lib/opengl/nvidia/lib/${file}\n\t" continue fi # glx if [[ "${file}" == "libglx.so.1" ]] ; then QA_TEXTRELS_x86_fbsd="${QA_TEXTRELS_x86_fbsd}usr/lib/opengl/nvidia/extensions/${file}\n\t" continue fi # nvidia_drv.so if [[ "${file}" == "nvidia_drv.so" ]] ; then QA_TEXTRELS_x86_fbsd="${QA_TEXTRELS_x86_fbsd}usr/lib/xorg/modules/drivers/${file}\n\t" continue fi # Handle the rest QA_TEXTRELS_x86_fbsd="${QA_TEXTRELS_x86_fbsd}usr/lib/${file}\n\t" done # Close the quotes echo -e "${QA_TEXTRELS_x86_fbsd}\"" echo ""