[vlc-devel] [PATCH] configure: Improve the detection of POSIX locale features
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Thu Feb 22 10:44:18 CET 2018
Hi,
On Thu, Feb 22, 2018, at 9:51 AM, Kamil Rytarowski wrote:
> Split the detection of the POSIX locale support from a single check
> of uselocale() to multiple ones.
>
> Newly added autotools checks:
> - <locale.h> header available,
> - locale_t type available,
> - newlocale() function available,
> - freelocale() function available,
> - setlocale() function available.
setlocale is already checked for, isn't it?
>
> While there don't blindly define for systems without uselocale()
> in the vlc_fixups.h header:
> - LC_ALL_MASK
> - LC_NUMERIC_MASK
> - LC_MESSAGES_MASK
> - LC_GLOBAL_LOCALE
>
> This corrects NetBSD build failres where all the features are
> available, with the exception of missing uselocale().
>
> While there, don't include <locale.h> in file.c just for systems
> with uselocale().
> ---
> configure.ac | 10 +++++++++-
> include/vlc_fixups.h | 31 +++++++++++++++++++++++++++++--
> src/config/file.c | 2 +-
> 3 files changed, 39 insertions(+), 4 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 5bf2a0366e..dfb8a08273 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -590,7 +590,7 @@ dnl Check for system libs needed
> need_libc=false
>
> dnl Check for usual libc functions
> -AC_CHECK_FUNCS([accept4 daemon fcntl flock fstatvfs fork getenv
> getpwuid_r isatty lstat memalign mkostemp mmap open_memstream openat
> pipe2 pread posix_fadvise posix_madvise posix_memalign setlocale stricmp
> strnicmp strptime uselocale])
> +AC_CHECK_FUNCS([accept4 daemon fcntl flock fstatvfs fork getenv
> getpwuid_r isatty lstat memalign mkostemp mmap open_memstream openat
> pipe2 pread posix_fadvise posix_madvise posix_memalign setlocale stricmp
> strnicmp strptime uselocale freelocale newlocale])
> AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir ffsll
> flockfile fsync getdelim getpid lldiv memrchr nrand48 poll recvmsg
> rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup
> strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind
> timegm timespec_get strverscmp pathconf])
> AC_REPLACE_FUNCS([gettimeofday])
> AC_CHECK_FUNC(fdatasync,,
> @@ -852,6 +852,14 @@ AC_CHECK_HEADERS([features.h getopt.h linux/dccp.h
> linux/magic.h mntent.h sys/ev
> dnl MacOS
> AC_CHECK_HEADERS([xlocale.h])
>
> +dnl POSIX
> +AC_CHECK_HEADERS([locale.h])
> +
> +dnl locale_t in locale.h
> +AC_CHECK_TYPE([locale_t],
> + AC_DEFINE([HAVE_LOCALE_T], [1], [locale_t available]),,
> + [#include <locale.h>])
> +
> dnl LP64 and LLP64 architectures had better define ssize_t by
> themselves...
> AH_TEMPLATE(ssize_t, [Define to `int' if <stddef.h> does not define.])
> dnl ` (fix VIM syntax highlight
> AC_CHECK_TYPE(ssize_t,, [
> diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h
> index f1bcd06ce9..b498743dcc 100644
> --- a/include/vlc_fixups.h
> +++ b/include/vlc_fixups.h
> @@ -316,24 +316,51 @@ void *aligned_alloc(size_t, size_t);
>
> #if defined(__native_client__) && defined(__cplusplus)
> # define HAVE_USELOCALE
> +# define HAVE_FREELOCALE
> +# define HAVE_NEWLOCALE
This is likely to be true, but unless it's tested I'd be in favor of leaving it out for now
> #endif
>
> /* locale.h */
> -#ifndef HAVE_USELOCALE
> +#ifdef HAVE_LOCALE_H
> +#include <locale.h>
> +#endif
> +
> +#ifndef LC_ALL_MASK
> #define LC_ALL_MASK 0
> +#endif
> +
> +#ifndef LC_NUMERIC_MASK
> #define LC_NUMERIC_MASK 0
> +#endif
> +
> +#ifndef LC_MESSAGES_MASK
> #define LC_MESSAGES_MASK 0
> -#define LC_GLOBAL_LOCALE ((locale_t)(uintptr_t)1)
> +#endif
> +
> +#ifndef HAVE_LOCALE_T
> typedef void *locale_t;
> +#endif
> +
> +#ifndef LC_GLOBAL_LOCALE
> +#define LC_GLOBAL_LOCALE ((locale_t)(uintptr_t)1)
> +#endif
> +
> +#ifndef HAVE_USELOCALE
> static inline locale_t uselocale(locale_t loc)
> {
> (void)loc;
> return NULL;
> }
> +#endif
> +
> +#ifndef HAVE_FREELOCALE
> static inline void freelocale(locale_t loc)
> {
> (void)loc;
> }
> +#endif
> +
> +#ifndef HAVE_NEWLOCALE
> static inline locale_t newlocale(int mask, const char * locale, locale_t base)
> {
> (void)mask; (void)locale; (void)base;
> diff --git a/src/config/file.c b/src/config/file.c
> index 6270a6bc9d..16b9d55377 100644
> --- a/src/config/file.c
> +++ b/src/config/file.c
> @@ -32,7 +32,7 @@
> #include <sys/stat.h>
> #ifdef __APPLE__
> # include <xlocale.h>
> -#elif defined(HAVE_USELOCALE)
> +#elif defined(HAVE_LOCALE_H)
> #include <locale.h>
> #endif
> #include <unistd.h>
> --
> 2.16.1
>
I'd split this in 2 patches:
- one to add freelocale/newlocale detection
- One to check locale.h
Thanks,
--
Hugo Beauzée-Luyssen
hugo at beauzee.fr
More information about the vlc-devel
mailing list