Sort libraries by version and pick the shortest symlink (thanks @jpalus!)

Fixes https://github.com/libsdl-org/SDL_image/issues/289
This commit is contained in:
Sam Lantinga 2022-07-12 13:00:43 -07:00
parent b321eae51a
commit c92ddddde6
2 changed files with 58 additions and 18 deletions

61
configure vendored
View File

@ -13073,6 +13073,53 @@ LT_REVISION=$SDL_INTERFACE_AGE
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_AWK+y}
then :
printf %s "(cached) " >&6
else $as_nop
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
case $as_dir in #(((
'') as_dir=./ ;;
*/) ;;
*) as_dir=$as_dir/ ;;
esac
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_AWK="$ac_prog"
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
printf "%s\n" "$AWK" >&6; }
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi
test -n "$AWK" && break
done
ac_ext=c ac_ext=c
ac_cpp='$CPP $CPPFLAGS' ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@ -17849,6 +17896,10 @@ printf "%s\n" "no" >&6; }
fi fi
fi fi
if test -z "$AWK" ; then
as_fn_error $? "*** awk not found, aborting" "$LINENO" 5
fi
# Check whether --enable-largefile was given. # Check whether --enable-largefile was given.
if test ${enable_largefile+y} if test ${enable_largefile+y}
then : then :
@ -18178,15 +18229,7 @@ find_lib()
host_lib_path="/usr/$base_libdir /usr/local/$base_libdir" host_lib_path="/usr/$base_libdir /usr/local/$base_libdir"
fi fi
for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do
lib=`ls -- $path/$1 2>/dev/null | sed -e '/\.so\..*\./d' -e 's,.*/,,' | sort | tail -1` lib=`ls -- $path/$1 2>/dev/null | sed 's,.*/,,' | sort -V -r | $AWK 'BEGIN{FS="."}{ print NF, $0 }' | sort -n -s | sed 's,[0-9]* ,,' | head -1`
if test x$lib != x; then
echo $lib
return
fi
done
# Try again, this time allowing more than one version digit after the .so
for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do
lib=`ls -- $path/$1 2>/dev/null | sed -e 's,.*/,,' | sort | tail -1`
if test x$lib != x; then if test x$lib != x; then
echo $lib echo $lib
return return

View File

@ -58,6 +58,7 @@ dnl Detect the canonical build and host environments
dnl AC_CANONICAL_HOST dnl AC_CANONICAL_HOST
dnl Check for tools dnl Check for tools
AC_PROG_AWK
AC_PROG_CC AC_PROG_CC
AC_PROG_CXX AC_PROG_CXX
AC_PROG_EGREP AC_PROG_EGREP
@ -65,6 +66,10 @@ AC_PROG_INSTALL
AC_PROG_MAKE_SET AC_PROG_MAKE_SET
PKG_PROG_PKG_CONFIG PKG_PROG_PKG_CONFIG
if [ test -z "$AWK" ]; then
AC_MSG_ERROR([*** awk not found, aborting])
fi
dnl 64-bit file offsets if possible unless --disable-largefile is specified dnl 64-bit file offsets if possible unless --disable-largefile is specified
AC_SYS_LARGEFILE AC_SYS_LARGEFILE
@ -181,15 +186,7 @@ find_lib()
host_lib_path="/usr/$base_libdir /usr/local/$base_libdir" host_lib_path="/usr/$base_libdir /usr/local/$base_libdir"
fi fi
for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do
lib=[`ls -- $path/$1 2>/dev/null | sed -e '/\.so\..*\./d' -e 's,.*/,,' | sort | tail -1`] lib=[`ls -- $path/$1 2>/dev/null | sed 's,.*/,,' | sort -V -r | $AWK 'BEGIN{FS="."}{ print NF, $0 }' | sort -n -s | sed 's,[0-9]* ,,' | head -1`]
if test x$lib != x; then
echo $lib
return
fi
done
# Try again, this time allowing more than one version digit after the .so
for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do
lib=[`ls -- $path/$1 2>/dev/null | sed -e 's,.*/,,' | sort | tail -1`]
if test x$lib != x; then if test x$lib != x; then
echo $lib echo $lib
return return