Files
2024-10-30 03:27:58 -04:00

137 lines
4.8 KiB
Bash

#!/bin/sh
# Copyright (c) 2019, NVIDIA CORPORATION.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and/or associated documentation files (the
# "Materials"), to deal in the Materials without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Materials, and to
# permit persons to whom the Materials are furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# unaltered in all copies or substantial portions of the Materials.
# Any additions, deletions, or changes to the original source files
# must be clearly indicated in accompanying documentation.
#
# If only executable code is distributed, then the accompanying
# documentation must state that "this software is based in part on the
# work of the Khronos Group."
#
# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
##############################################################################
#
# check-libglvnd-install.sh
#
# This script checks for an existing libglvnd installation. A driver installer
# can use this to determine whether or not it needs to install its own copies
# of the libraries.
#
# The script will exit with one of these values:
# 0 -- The libglvnd libraries are installed and working.
# 1 -- No libglvnd libraries are installed.
# 2 -- There's a combination of libglvnd and non-libglvnd libraries installed.
# 3 -- Some internal error occurred.
#
##############################################################################
# Exit codes.
RESULT_INSTALLED=0
RESULT_NOT_INSTALLED=1
RESULT_PARTIAL=2
RESULT_ERROR=3
TEST_EXIT_CODE_SUCCESS=0
TEST_EXIT_CODE_NON_LIBGLVND=1
TEST_EXIT_CODE_VERSION_MISMATCH=2
TEST_EXIT_CODE_NO_LIBRARY=3
TEST_EXIT_CODE_INTERNAL_ERROR=4
BASEDIR=`readlink -f $0`
BASEDIR=`dirname $BASEDIR`
BINDIR=$BASEDIR
HELPER_PROGRAM=glvnd_check
__EGL_VENDOR_LIBRARY_FILENAMES=$BASEDIR/egl_dummy_vendor.json
__GLX_VENDOR_LIBRARY_NAME=installcheck
export __GLX_VENDOR_LIBRARY_NAME
export __EGL_VENDOR_LIBRARY_FILENAMES
if [ ! -e $__EGL_VENDOR_LIBRARY_FILENAMES ] ; then
echo Missing test file: $__EGL_VENDOR_LIBRARY_FILENAMES
exit $RESULT_ERROR
fi
MISSING_LIBRARIES=
INVALID_LIBRARIES=
LIBGLVND_LIBRARIES=
NON_LIBGLVND_LIBRARIES=
check_libglvnd_winsys()
{
result=`LD_LIBRARY_PATH="${BINDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" "$BINDIR/$HELPER_PROGRAM" $1 $2`
code=$?
case $code in
$TEST_EXIT_CODE_SUCCESS) LIBGLVND_LIBRARIES="$2 $LIBGLVND_LIBRARIES" ;;
$TEST_EXIT_CODE_NON_LIBGLVND) NON_LIBGLVND_LIBRARIES="$2 $NON_LIBGLVND_LIBRARIES" ;;
$TEST_EXIT_CODE_NO_LIBRARY) MISSING_LIBRARIES="$2 $MISSING_LIBRARIES" ;;
$TEST_EXIT_CODE_VERSION_MISMATCH) INVALID_LIBRARIES="$2 $INVALID_LIBRARIES" ;;
*)
echo Internal error:
echo "$result"
exit $RESULT_ERROR
esac
return $code
}
# Check the GLX libraries.
check_libglvnd_winsys glx libGL.so.1
check_libglvnd_winsys glx libGLX.so.0
# Check EGL and the entrypoint libraries. Note that checking the entrypoint
# libraries requires a libglvnd-based version of libEGL.so.1.
check_libglvnd_winsys egl libEGL.so.1
if [ "$?" -eq $TEST_EXIT_CODE_SUCCESS ] ; then
check_libglvnd_winsys gl libOpenGL.so.0
check_libglvnd_winsys gl libGLESv1_CM.so.1
check_libglvnd_winsys gl libGLESv2.so.2
fi
echo Found libglvnd libraries: $LIBGLVND_LIBRARIES
echo Found non-libglvnd libraries: $NON_LIBGLVND_LIBRARIES
echo Missing libraries: $MISSING_LIBRARIES
if [ -n "$INVALID_LIBRARIES" ] ; then
echo Found invalid or unsupported versions of libraries: $INVALID_LIBRARIES
exit $RESULT_NOT_INSTALLED
fi
if [ -n "$LIBGLVND_LIBRARIES" ] ; then
if [ -z "$NON_LIBGLVND_LIBRARIES" ] ; then
# Some disros may split the libglvnd libraries into separate packages,
# in which case it's possible that only some of them are installed.
# As long as we found at least one libglvnd library, and we didn't find
# any non-libglvnd versions, that's enough.
echo libglvnd appears to be installed.
exit $RESULT_INSTALLED
else
# There's a combination of libglvnd and non-libglvnd libraries
# installed.
exit $RESULT_PARTIAL
fi
fi
# No libglvnd libraries are installed. Either the libraries are not present at
# all, or they're all non-libglvnd versions.
exit $RESULT_NOT_INSTALLED