| printf_sources = [ |
| 'asnprintf.c', |
| 'printf-args.c', |
| 'printf-parse.c', |
| 'vasnprintf.c', |
| 'printf.c', |
| 'printf-extension.c', |
| ] |
| |
| 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'] |
| |
| if cc.has_argument('-Wno-format-nonliteral') |
| printf_args += ['-Wno-format-nonliteral'] |
| endif |
| |
| # 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 <inttypes.h> exists, |
| # doesn't clash with <sys/types.h>, and declares uintmax_t. |
| # jm_AC_HEADER_INTTYPES_H |
| if cc.compiles('''#include <sys/types.h> |
| #include <inttypes.h> |
| 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 <stdint.h> exists, |
| # doesn't clash with <sys/types.h>, and declares uintmax_t. |
| # jm_AC_HEADER_STDINT_H |
| if cc.compiles('''#include <sys/types.h> |
| #include <stdint.h> |
| 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 <stdint.h> or <inttypes.h>. |
| # 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, |
| include_directories : [configinc], |
| c_args : printf_args, |
| install : false, |
| pic: true, |
| dependencies : [glib_dep]) |