diff --git a/gst/printf/meson.build b/gst/printf/meson.build index 8e4122aff9..2a867a60e8 100644 --- a/gst/printf/meson.build +++ b/gst/printf/meson.build @@ -7,14 +7,69 @@ printf_sources = [ 'printf-extension.c', ] -printf_args = gst_c_args + [ -# '-UHAVE_LONG_DOUBLE', -# '-UHAVE_LONG_LONG_FORMAT', -# ' -UHAVE_WCHAR_T', -# '-UHAVE_WCSLEN', -# '-UHAVE_WINT_T', - '-DSTATIC=G_GNUC_INTERNAL', -] +printf_args = gst_c_args + ['-DSTATIC=G_GNUC_INTERNAL'] + +# Don't have a need for that and it's not portable so just ignore for now +printf_args += ['-UHAVE_LONG_DOUBLE'] + +# Just use internal emulation for printing long longs for now +printf_args += ['-UHAVE_LONG_LONG_FORMAT'] + +# Don't need any of this widechar stuff, so just disable it for now +printf_args += ['-UHAVE_WCHAR_T', '-UHAVE_WCSLEN', '-UHAVE_WINT_T'] + +# Check if 'long long' works and what format can be used to print it +# jm_AC_TYPE_LONG_LONG +if cc.compiles('''long long ll = 1LL; + int i = 63; + int some_func (void) { + long long llmax = (long long) -1; + return ll << i | ll >> i | llmax / ll | llmax % ll; + }''', name : 'long long') + printf_args += ['-DHAVE_LONG_LONG'] + have_long_long = true +else + have_long_long = false +endif + +# The following uintmax_t/intmax_t checks are also in glib +found_uintmax_t = false + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. +# jm_AC_HEADER_INTTYPES_H +if cc.compiles('''#include + #include + uintmax_t i = (uintmax_t) -1; + ''', name : 'uintmax_t in inttypes.h') + printf_args += ['-DHAVE_INTTYPES_H_WITH_UINTMAX'] + found_uintmax_t = true +endif + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. +# jm_AC_HEADER_STDINT_H +if cc.compiles('''#include + #include + uintmax_t i = (uintmax_t) -1; + ''', name : 'uintmax_t in stdint.h') + printf_args += ['-DHAVE_STDINT_H_WITH_UINTMAX'] + found_uintmax_t = true +endif + + +# Define intmax_t to 'long' or 'long long' +# if it is not already defined in or . +# For simplicity, we assume that a header file defines 'intmax_t' +# if and only if it defines 'uintmax_t'. +printf_args += ['-DHAVE_INTMAX_T'] +if not found_uintmax_t + if have_long_long + printf_args += ['-Dintmax_t=long long'] + else + printf_args += ['-Dintmax_t=long'] + endif +endif printf_lib = static_library('gstprintf', printf_sources,