mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-22 18:55:42 +00:00
revise iconv detection:
- check libiconv with a linkage test with iconv.h included - check libc iconv with a linkage test with iconv.h included and LIBICONV_PLUG defined (in case libiconv header is in include path) - add new configuration option to prefer iconv from libiconv, if available, over the libc version, defaults to disabled: SDL_LIBICONV for cmake, --enable-libiconv for autotools. - change FreeBSD specific LIBICONV_PLUG define in SDL_iconv.c to configuration result.
This commit is contained in:
parent
4940b5dbc2
commit
17e62abb6d
|
@ -421,6 +421,7 @@ dep_option(SDL_DIRECTFB_SHARED "Dynamically load directfb support" ON "SDL_D
|
|||
set_option(SDL_DUMMYVIDEO "Use dummy video driver" ON)
|
||||
dep_option(SDL_IBUS "Enable IBus support" ON ${UNIX_SYS} OFF)
|
||||
set_option(SDL_SYSTEM_ICONV "Use iconv() from system-installed libraries" ON)
|
||||
set_option(SDL_LIBICONV "Prefer iconv() from libiconv, if available, over libc version" OFF)
|
||||
set_option(SDL_OPENGL "Include OpenGL support" ON)
|
||||
set_option(SDL_OPENGLES "Include OpenGL ES support" ON)
|
||||
set_option(SDL_PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_ENABLED_BY_DEFAULT})
|
||||
|
@ -1123,16 +1124,31 @@ if(SDL_LIBC)
|
|||
endif()
|
||||
|
||||
if(SDL_SYSTEM_ICONV)
|
||||
check_library_exists(iconv iconv_open "" HAVE_LIBICONV)
|
||||
if(HAVE_LIBICONV)
|
||||
list(APPEND EXTRA_LIBS iconv)
|
||||
check_c_source_compiles("
|
||||
#define LIBICONV_PLUG 1 /* in case libiconv header is in include path */
|
||||
#include <stddef.h>
|
||||
#include <iconv.h>
|
||||
int main(int argc, char **argv) {
|
||||
return iconv_open(NULL,NULL);
|
||||
}" ICONV_IN_LIBC)
|
||||
|
||||
cmake_push_check_state()
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES iconv)
|
||||
check_c_source_compiles("
|
||||
#include <stddef.h>
|
||||
#include <iconv.h>
|
||||
int main(int argc, char **argv) {
|
||||
return iconv_open(NULL,NULL);
|
||||
}" ICONV_IN_LIBICONV)
|
||||
cmake_pop_check_state()
|
||||
|
||||
if(ICONV_IN_LIBC OR ICONV_IN_LIBICONV)
|
||||
set(HAVE_ICONV 1)
|
||||
set(HAVE_SYSTEM_ICONV TRUE)
|
||||
else()
|
||||
check_library_exists(c iconv_open "" HAVE_BUILTIN_ICONV)
|
||||
if(HAVE_BUILTIN_ICONV)
|
||||
set(HAVE_ICONV 1)
|
||||
set(HAVE_SYSTEM_ICONV TRUE)
|
||||
if(ICONV_IN_LIBICONV AND (SDL_LIBICONV OR (NOT ICONV_IN_LIBC)))
|
||||
set(SDL_USE_LIBICONV 1)
|
||||
set(HAVE_LIBICONV TRUE)
|
||||
list(APPEND EXTRA_LIBS iconv)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
|
105
configure
vendored
105
configure
vendored
|
@ -845,6 +845,7 @@ enable_assertions
|
|||
enable_dependency_tracking
|
||||
enable_libc
|
||||
enable_system_iconv
|
||||
enable_libiconv
|
||||
enable_gcc_atomics
|
||||
enable_atomic
|
||||
enable_audio
|
||||
|
@ -1642,6 +1643,8 @@ Optional Features:
|
|||
--enable-libc Use the system C library [default=yes]
|
||||
--enable-system-iconv Use iconv() from system-installed libraries
|
||||
[default=yes]
|
||||
--enable-libiconv Prefer iconv() from libiconv, if available, over
|
||||
libc version [default=no]
|
||||
--enable-gcc-atomics Use gcc builtin atomics [default=yes]
|
||||
--enable-atomic Enable the atomic operations subsystem [default=yes]
|
||||
--enable-audio Enable the audio subsystem [default=yes]
|
||||
|
@ -18828,6 +18831,14 @@ else $as_nop
|
|||
enable_system_iconv=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-libiconv was given.
|
||||
if test ${enable_libiconv+y}
|
||||
then :
|
||||
enableval=$enable_libiconv;
|
||||
else $as_nop
|
||||
enable_libiconv=no
|
||||
fi
|
||||
|
||||
|
||||
if test x$enable_libc = xyes; then
|
||||
|
||||
|
@ -20043,53 +20054,92 @@ fi
|
|||
|
||||
|
||||
if test x$enable_system_iconv = xyes; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv_open in -liconv" >&5
|
||||
printf %s "checking for iconv_open in -liconv... " >&6; }
|
||||
if test ${ac_cv_lib_iconv_iconv_open+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-liconv $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv in libc" >&5
|
||||
printf %s "checking for iconv in libc... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char iconv_open ();
|
||||
#define LIBICONV_PLUG 1 /* in case libiconv header is in include path */
|
||||
#include <stddef.h>
|
||||
#include <iconv.h>
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return iconv_open ();
|
||||
|
||||
iconv_open(NULL,NULL);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"
|
||||
then :
|
||||
ac_cv_lib_iconv_iconv_open=yes
|
||||
have_libc_iconv=yes
|
||||
else $as_nop
|
||||
ac_cv_lib_iconv_iconv_open=no
|
||||
have_libc_iconv=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_iconv_open" >&5
|
||||
printf "%s\n" "$ac_cv_lib_iconv_iconv_open" >&6; }
|
||||
if test "x$ac_cv_lib_iconv_iconv_open" = xyes
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_libc_iconv" >&5
|
||||
printf "%s\n" "$have_libc_iconv" >&6; }
|
||||
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv in libiconv" >&5
|
||||
printf %s "checking for iconv in libiconv... " >&6; }
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$LIBS -liconv"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <iconv.h>
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
|
||||
iconv_open(NULL,NULL);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"
|
||||
then :
|
||||
LIBS="$LIBS -liconv"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"
|
||||
have_libiconv=yes
|
||||
else $as_nop
|
||||
have_libiconv=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS="$save_LIBS"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_libiconv" >&5
|
||||
printf "%s\n" "$have_libiconv" >&6; }
|
||||
|
||||
ac_fn_c_check_func "$LINENO" "iconv" "ac_cv_func_iconv"
|
||||
if test "x$ac_cv_func_iconv" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
|
||||
if test x$have_libc_iconv = xyes || test x$have_libiconv = xyes; then
|
||||
|
||||
fi
|
||||
printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
|
||||
|
||||
|
||||
if test x$have_libiconv = xyes; then
|
||||
if test x$have_libc_iconv != xyes; then
|
||||
use_libiconv=yes
|
||||
elif test x$enable_libiconv = xyes; then
|
||||
use_libiconv=yes
|
||||
fi
|
||||
fi
|
||||
if test x$use_libiconv = xyes; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: -- Using iconv() from libiconv" >&5
|
||||
printf "%s\n" "-- Using iconv() from libiconv" >&6; }
|
||||
|
||||
printf "%s\n" "#define SDL_USE_LIBICONV 1" >>confdefs.h
|
||||
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: -- Using iconv() from libc" >&5
|
||||
printf "%s\n" "-- Using iconv() from libc" >&6; }
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include <signal.h>
|
||||
|
@ -27629,6 +27679,7 @@ if test "x$ac_cv_header_xinput_h" = xyes
|
|||
then :
|
||||
have_xinput=yes
|
||||
fi
|
||||
|
||||
if test x$have_xinput = xyes; then
|
||||
|
||||
printf "%s\n" "#define HAVE_XINPUT_H 1" >>confdefs.h
|
||||
|
|
48
configure.ac
48
configure.ac
|
@ -319,10 +319,14 @@ AC_ARG_ENABLE(libc,
|
|||
[AS_HELP_STRING([--enable-libc], [Use the system C library [default=yes]])],
|
||||
, enable_libc=yes)
|
||||
|
||||
dnl See whether we are allowed to use libiconv
|
||||
dnl See whether we are allowed to use system iconv
|
||||
AC_ARG_ENABLE(system-iconv,
|
||||
[AS_HELP_STRING([--enable-system-iconv], [Use iconv() from system-installed libraries [default=yes]])],
|
||||
, enable_system_iconv=yes)
|
||||
dnl See whether we prefer libiconv over libc
|
||||
AC_ARG_ENABLE(libiconv,
|
||||
[AS_HELP_STRING([--enable-libiconv], [Prefer iconv() from libiconv, if available, over libc version [default=no]])],
|
||||
, enable_libiconv=no)
|
||||
|
||||
if test x$enable_libc = xyes; then
|
||||
AC_DEFINE(HAVE_LIBC, 1, [ ])
|
||||
|
@ -355,8 +359,46 @@ dnl Checks for library functions.
|
|||
AC_CHECK_FUNCS(acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf copysign copysignf cos cosf exp expf fabs fabsf floor floorf trunc truncf fmod fmodf log logf log10 log10f lround lroundf pow powf round roundf scalbn scalbnf sin sinf sqrt sqrtf tan tanf)
|
||||
|
||||
if test x$enable_system_iconv = xyes; then
|
||||
AC_CHECK_LIB(iconv, iconv_open, [LIBS="$LIBS -liconv"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"])
|
||||
AC_CHECK_FUNCS(iconv)
|
||||
AC_MSG_CHECKING(for iconv in libc)
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#define LIBICONV_PLUG 1 /* in case libiconv header is in include path */
|
||||
#include <stddef.h>
|
||||
#include <iconv.h>
|
||||
]],[[
|
||||
iconv_open(NULL,NULL);
|
||||
]])], [have_libc_iconv=yes],[have_libc_iconv=no])
|
||||
AC_MSG_RESULT($have_libc_iconv)
|
||||
|
||||
AC_MSG_CHECKING(for iconv in libiconv)
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$LIBS -liconv"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <stddef.h>
|
||||
#include <iconv.h>
|
||||
]],[[
|
||||
iconv_open(NULL,NULL);
|
||||
]])], [have_libiconv=yes],[have_libiconv=no])
|
||||
LIBS="$save_LIBS"
|
||||
AC_MSG_RESULT($have_libiconv)
|
||||
|
||||
if test x$have_libc_iconv = xyes || test x$have_libiconv = xyes; then
|
||||
AC_DEFINE(HAVE_ICONV,1,[ ])
|
||||
|
||||
if test x$have_libiconv = xyes; then
|
||||
if test x$have_libc_iconv != xyes; then
|
||||
use_libiconv=yes
|
||||
elif test x$enable_libiconv = xyes; then
|
||||
use_libiconv=yes
|
||||
fi
|
||||
fi
|
||||
if test x$use_libiconv = xyes; then
|
||||
AC_MSG_RESULT([-- Using iconv() from libiconv])
|
||||
AC_DEFINE(SDL_USE_LIBICONV,1,[ ])
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"
|
||||
else
|
||||
AC_MSG_RESULT([-- Using iconv() from libc])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_CHECK_MEMBER(struct sigaction.sa_sigaction,[AC_DEFINE([HAVE_SA_SIGACTION], 1, [ ])], ,[#include <signal.h>])
|
||||
|
|
|
@ -200,6 +200,7 @@
|
|||
#cmakedefine HAVE_GETPAGESIZE 1
|
||||
#cmakedefine HAVE_MPROTECT 1
|
||||
#cmakedefine HAVE_ICONV 1
|
||||
#cmakedefine SDL_USE_LIBICONV 1
|
||||
#cmakedefine HAVE_PTHREAD_SETNAME_NP 1
|
||||
#cmakedefine HAVE_PTHREAD_SET_NAME_NP 1
|
||||
#cmakedefine HAVE_SEM_TIMEDWAIT 1
|
||||
|
@ -240,7 +241,7 @@
|
|||
|
||||
#cmakedefine HAVE_LIBUDEV_H 1
|
||||
#cmakedefine HAVE_LIBSAMPLERATE_H 1
|
||||
#cmakedefine HAVE_LIBDECOR_H 1
|
||||
#cmakedefine HAVE_LIBDECOR_H 1
|
||||
|
||||
#cmakedefine HAVE_D3D_H @HAVE_D3D_H@
|
||||
#cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@
|
||||
|
@ -524,7 +525,7 @@
|
|||
#cmakedefine SDL_ARM_NEON_BLITTERS @SDL_ARM_NEON_BLITTERS@
|
||||
|
||||
/* Whether SDL_DYNAMIC_API needs dlopen */
|
||||
#cmakedefine DYNAPI_NEEDS_DLOPEN @DYNAPI_NEEDS_DLOPEN@
|
||||
#cmakedefine DYNAPI_NEEDS_DLOPEN @DYNAPI_NEEDS_DLOPEN@
|
||||
|
||||
/* Enable dynamic libsamplerate support */
|
||||
#cmakedefine SDL_LIBSAMPLERATE_DYNAMIC @SDL_LIBSAMPLERATE_DYNAMIC@
|
||||
|
|
|
@ -204,6 +204,7 @@
|
|||
#undef HAVE_GETPAGESIZE
|
||||
#undef HAVE_MPROTECT
|
||||
#undef HAVE_ICONV
|
||||
#undef SDL_USE_LIBICONV
|
||||
#undef HAVE_PTHREAD_SETNAME_NP
|
||||
#undef HAVE_PTHREAD_SET_NAME_NP
|
||||
#undef HAVE_SEM_TIMEDWAIT
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "SDL_endian.h"
|
||||
|
||||
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
|
||||
#ifdef __FreeBSD__
|
||||
#ifndef SDL_USE_LIBICONV
|
||||
/* Define LIBICONV_PLUG to use iconv from the base instead of ports and avoid linker errors. */
|
||||
#define LIBICONV_PLUG 1
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue