Blame meson.build

Packit Service d3d246
project('glib', 'c', 'cpp',
Packit Service d3d246
  version : '2.56.4',
Packit Service d3d246
  meson_version : '>= 0.44.0',
Packit Service d3d246
  default_options : [
Packit Service d3d246
    'warning_level=1',
Packit Service d3d246
    'c_std=gnu89'
Packit Service d3d246
  ]
Packit Service d3d246
)
Packit Service d3d246
Packit Service d3d246
cc = meson.get_compiler('c')
Packit Service d3d246
cxx = meson.get_compiler('cpp')
Packit Service d3d246
Packit Service d3d246
if cc.get_id() == 'msvc'
Packit Service d3d246
  # Ignore several spurious warnings for things glib does very commonly
Packit Service d3d246
  # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
Packit Service d3d246
  # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
Packit Service d3d246
  # NOTE: Only add warnings here if you are sure they're spurious
Packit Service d3d246
  add_project_arguments('/wd4035', '/wd4715', '/wd4116',
Packit Service d3d246
    '/wd4046', '/wd4068', '/wo4090', '/FImsvc_recommended_pragmas.h',language : 'c')
Packit Service d3d246
  # Disable SAFESEH with MSVC for plugins and libs that use external deps that
Packit Service d3d246
  # are built with MinGW
Packit Service d3d246
  noseh_link_args = ['/SAFESEH:NO']
Packit Service d3d246
else
Packit Service d3d246
  noseh_link_args = []
Packit Service d3d246
  # -mms-bitfields vs -fnative-struct ?
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
host_system = host_machine.system()
Packit Service d3d246
Packit Service d3d246
glib_version = meson.project_version()
Packit Service d3d246
glib_api_version = '2.0'
Packit Service d3d246
version_arr = glib_version.split('.')
Packit Service d3d246
major_version = version_arr[0].to_int()
Packit Service d3d246
minor_version = version_arr[1].to_int()
Packit Service d3d246
micro_version = version_arr[2].to_int()
Packit Service d3d246
Packit Service d3d246
interface_age = minor_version.is_odd() ? 0 : micro_version
Packit Service d3d246
binary_age = 100 * minor_version + micro_version
Packit Service d3d246
Packit Service d3d246
soversion = 0
Packit Service d3d246
# Maintain compatibility with previous libtool versioning
Packit Service d3d246
# current = minor * 100 + micro
Packit Service d3d246
library_version = '@0@.@1@.@2@'.format(soversion, binary_age - interface_age, interface_age)
Packit Service d3d246
Packit Service d3d246
configinc = include_directories('.')
Packit Service d3d246
glibinc = include_directories('glib')
Packit Service d3d246
gobjectinc = include_directories('gobject')
Packit Service d3d246
gmoduleinc = include_directories('gmodule')
Packit Service d3d246
gioinc = include_directories('gio')
Packit Service d3d246
Packit Service d3d246
glib_prefix = get_option('prefix')
Packit Service d3d246
glib_bindir = join_paths(glib_prefix, get_option('bindir'))
Packit Service d3d246
glib_libdir = join_paths(glib_prefix, get_option('libdir'))
Packit Service d3d246
glib_datadir = join_paths(glib_prefix, get_option('datadir'))
Packit Service d3d246
glib_pkgdatadir = join_paths(glib_datadir, 'glib-2.0')
Packit Service d3d246
glib_includedir = join_paths(glib_prefix, get_option('includedir'))
Packit Service d3d246
glib_giomodulesdir = get_option('gio_module_dir')
Packit Service d3d246
if glib_giomodulesdir == ''
Packit Service d3d246
  glib_giomodulesdir = join_paths(glib_libdir, 'gio', 'modules')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
glib_pkgconfigreldir = join_paths(glib_libdir, 'pkgconfig')
Packit Service d3d246
Packit Service d3d246
add_project_arguments('-D_GNU_SOURCE', language: 'c')
Packit Service d3d246
Packit Service d3d246
# Disable strict aliasing;
Packit Service d3d246
# see https://bugzilla.gnome.org/show_bug.cgi?id=791622
Packit Service d3d246
if cc.has_argument('-fno-strict-aliasing')
Packit Service d3d246
  add_project_arguments('-fno-strict-aliasing', language: 'c')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
########################
Packit Service d3d246
# Configuration begins #
Packit Service d3d246
########################
Packit Service d3d246
glib_conf = configuration_data()
Packit Service d3d246
glibconfig_conf = configuration_data()
Packit Service d3d246
Packit Service d3d246
# accumulated list of defines as we check for them, so we can easily
Packit Service d3d246
# use them later in test programs (autoconf does this automatically)
Packit Service d3d246
glib_conf_prefix = ''
Packit Service d3d246
Packit Service d3d246
glib_conf.set('GLIB_VERSION', glib_version)
Packit Service d3d246
glib_conf.set('GLIB_MAJOR_VERSION', major_version)
Packit Service d3d246
glib_conf.set('GLIB_MINOR_VERSION', minor_version)
Packit Service d3d246
glib_conf.set('GLIB_MICRO_VERSION', micro_version)
Packit Service d3d246
glib_conf.set('GLIB_INTERFACE_AGE', interface_age)
Packit Service d3d246
glib_conf.set('GLIB_BINARY_AGE', binary_age)
Packit Service d3d246
glib_conf.set_quoted('GETTEXT_PACKAGE', 'glib20')
Packit Service d3d246
glib_conf.set_quoted('PACKAGE_BUGREPORT', 'http://bugzilla.gnome.org/enter_bug.cgi?product=glib')
Packit Service d3d246
glib_conf.set_quoted('PACKAGE_NAME', 'glib')
Packit Service d3d246
glib_conf.set_quoted('PACKAGE_STRING', 'glib @0@'.format(meson.project_version()))
Packit Service d3d246
glib_conf.set_quoted('PACKAGE_TARNAME', 'glib')
Packit Service d3d246
glib_conf.set_quoted('PACKAGE_URL', '')
Packit Service d3d246
glib_conf.set_quoted('PACKAGE_VERSION', meson.project_version())
Packit Service d3d246
glib_conf.set('ENABLE_NLS', 1)
Packit Service d3d246
Packit Service d3d246
# Variables used in glib-gettextize and pkg-config files
Packit Service d3d246
# These should not contain " quotes around the values
Packit Service d3d246
glib_conf.set('PACKAGE', 'glib')
Packit Service d3d246
glib_conf.set('VERSION', meson.project_version())
Packit Service d3d246
glib_conf.set('prefix', glib_prefix)
Packit Service d3d246
glib_conf.set('exec_prefix', glib_prefix)
Packit Service d3d246
glib_conf.set('libdir', glib_libdir)
Packit Service d3d246
glib_conf.set('includedir', glib_includedir)
Packit Service d3d246
glib_conf.set('datadir', glib_datadir)
Packit Service d3d246
glib_conf.set('datarootdir', glib_datadir)
Packit Service d3d246
Packit Service d3d246
glib_conf.set('_GNU_SOURCE', 1)
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  # Poll doesn't work on devices on Windows
Packit Service d3d246
  glib_conf.set('BROKEN_POLL', true)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Detect and set symbol visibility
Packit Service d3d246
glib_hidden_visibility_args = []
Packit Service d3d246
if get_option('default_library') != 'static'
Packit Service d3d246
  if host_system == 'windows'
Packit Service d3d246
    glib_conf.set('DLL_EXPORT', true)
Packit Service d3d246
    if cc.get_id() == 'msvc'
Packit Service d3d246
      glib_conf.set('_GLIB_EXTERN', '__declspec(dllexport) extern')
Packit Service d3d246
    elif cc.has_argument('-fvisibility=hidden')
Packit Service d3d246
      glib_conf.set('_GLIB_EXTERN', '__attribute__((visibility("default"))) __declspec(dllexport) extern')
Packit Service d3d246
      glib_hidden_visibility_args = ['-fvisibility=hidden']
Packit Service d3d246
    endif
Packit Service d3d246
  elif cc.has_argument('-fvisibility=hidden')
Packit Service d3d246
    glib_conf.set('_GLIB_EXTERN', '__attribute__((visibility("default"))) extern')
Packit Service d3d246
    glib_hidden_visibility_args = ['-fvisibility=hidden']
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows' and get_option('default_library') == 'static'
Packit Service d3d246
    glibconfig_conf.set('GLIB_STATIC_COMPILATION', '1')
Packit Service d3d246
    glibconfig_conf.set('GOBJECT_STATIC_COMPILATION', '1')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# FIXME: what about Cygwin (G_WITH_CYGWIN)
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  glib_os = '''#define G_OS_WIN32
Packit Service d3d246
#define G_PLATFORM_WIN32'''
Packit Service d3d246
else
Packit Service d3d246
  glib_os = '#define G_OS_UNIX'
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('glib_os', glib_os)
Packit Service d3d246
Packit Service d3d246
# We need to know the build type to determine what .lib files we need on Visual Studio
Packit Service d3d246
# for dependencies that don't normally come with pkg-config files for Visual Studio builds
Packit Service d3d246
buildtype = get_option('buildtype')
Packit Service d3d246
Packit Service d3d246
# check for header files
Packit Service d3d246
Packit Service d3d246
headers = [
Packit Service d3d246
  'stdlib.h',
Packit Service d3d246
  'string.h',
Packit Service d3d246
  'strings.h',
Packit Service d3d246
  'memory.h',
Packit Service d3d246
  'alloca.h',
Packit Service d3d246
  'locale.h',
Packit Service d3d246
  'xlocale.h',
Packit Service d3d246
  'float.h',
Packit Service d3d246
  'limits.h',
Packit Service d3d246
  'pwd.h',
Packit Service d3d246
  'grp.h',
Packit Service d3d246
  'poll.h',
Packit Service d3d246
  'termios.h',
Packit Service d3d246
  'sys/param.h',
Packit Service d3d246
  'sys/resource.h',
Packit Service d3d246
  'mach/mach_time.h',
Packit Service d3d246
  'sys/select.h',
Packit Service d3d246
  'stdint.h',
Packit Service d3d246
  'inttypes.h',
Packit Service d3d246
  'sched.h',
Packit Service d3d246
  'malloc.h',
Packit Service d3d246
  'sys/vfs.h',
Packit Service d3d246
  'sys/vmount.h',
Packit Service d3d246
  'sys/statfs.h',
Packit Service d3d246
  'sys/statvfs.h',
Packit Service d3d246
  'sys/filio.h',
Packit Service d3d246
  'mntent.h',
Packit Service d3d246
  'sys/mnttab.h',
Packit Service d3d246
  'sys/vfstab.h',
Packit Service d3d246
  'sys/mntctl.h',
Packit Service d3d246
  'fstab.h',
Packit Service d3d246
  'linux/magic.h',
Packit Service d3d246
  'termios.h',
Packit Service d3d246
  'dirent.h', # MSC does not come with this by default
Packit Service d3d246
  'sys/time.h', # MSC does not come with this by default
Packit Service d3d246
  'sys/times.h',
Packit Service d3d246
  'sys/wait.h',
Packit Service d3d246
  'unistd.h',
Packit Service d3d246
  'values.h',
Packit Service d3d246
  'sys/types.h',
Packit Service d3d246
  'sys/uio.h',
Packit Service d3d246
  'sys/mkdev.h',
Packit Service d3d246
  'sys/mount.h',
Packit Service d3d246
  'sys/sysctl.h',
Packit Service d3d246
  'crt_externs.h',
Packit Service d3d246
  'sys/inotify.h',
Packit Service d3d246
  'sys/event.h',
Packit Service d3d246
  'sys/stat.h',
Packit Service d3d246
]
Packit Service d3d246
Packit Service d3d246
foreach h : headers
Packit Service d3d246
  if cc.has_header(h)
Packit Service d3d246
    define = 'HAVE_' + h.underscorify().to_upper()
Packit Service d3d246
    glib_conf.set(define, 1)
Packit Service d3d246
    glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format(define)
Packit Service d3d246
  endif
Packit Service d3d246
endforeach
Packit Service d3d246
Packit Service d3d246
if cc.has_header('linux/netlink.h')
Packit Service d3d246
  glib_conf.set('HAVE_NETLINK', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if glib_conf.has('HAVE_LOCALE_H')
Packit Service d3d246
  if cc.has_header_symbol('locale.h', 'LC_MESSAGES')
Packit Service d3d246
    glib_conf.set('HAVE_LC_MESSAGES', 1)
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
struct_stat_blkprefix = '''
Packit Service d3d246
#include <sys/types.h>
Packit Service d3d246
#include <sys/stat.h>
Packit Service d3d246
#ifdef HAVE_UNISTD_H
Packit Service d3d246
#include <unistd.h>
Packit Service d3d246
#endif
Packit Service d3d246
#ifdef HAVE_SYS_STATFS_H
Packit Service d3d246
#include <sys/statfs.h>
Packit Service d3d246
#endif
Packit Service d3d246
#ifdef HAVE_SYS_PARAM_H
Packit Service d3d246
#include <sys/param.h>
Packit Service d3d246
#endif
Packit Service d3d246
#ifdef HAVE_SYS_MOUNT_H
Packit Service d3d246
#include <sys/mount.h>
Packit Service d3d246
#endif
Packit Service d3d246
'''
Packit Service d3d246
Packit Service d3d246
struct_members = [
Packit Service d3d246
  [ 'stat', 'st_mtimensec' ],
Packit Service d3d246
  [ 'stat', 'st_mtim.tv_nsec' ],
Packit Service d3d246
  [ 'stat', 'st_atimensec' ],
Packit Service d3d246
  [ 'stat', 'st_atim.tv_nsec' ],
Packit Service d3d246
  [ 'stat', 'st_ctimensec' ],
Packit Service d3d246
  [ 'stat', 'st_ctim.tv_nsec' ],
Packit Service d3d246
  [ 'stat', 'st_birthtime' ],
Packit Service d3d246
  [ 'stat', 'st_birthtimensec' ],
Packit Service d3d246
  [ 'stat', 'st_birthtim' ],
Packit Service d3d246
  [ 'stat', 'st_birthtim.tv_nsec' ],
Packit Service d3d246
  [ 'stat', 'st_blksize', struct_stat_blkprefix ],
Packit Service d3d246
  [ 'stat', 'st_blocks', struct_stat_blkprefix ],
Packit Service d3d246
  [ 'statfs', 'f_fstypename', struct_stat_blkprefix ],
Packit Service d3d246
  [ 'statfs', 'f_bavail', struct_stat_blkprefix ],
Packit Service d3d246
  [ 'dirent', 'd_type', '''#include <sys/types.h>
Packit Service d3d246
                           #include <dirent.h>''' ],
Packit Service d3d246
]
Packit Service d3d246
Packit Service d3d246
foreach m : struct_members
Packit Service d3d246
  header_check_prefix = glib_conf_prefix
Packit Service d3d246
  if m.length() == 3
Packit Service d3d246
    header_check_prefix = header_check_prefix + m[2]
Packit Service d3d246
  else
Packit Service d3d246
    header_check_prefix = header_check_prefix + '#include <sys/stat.h>'
Packit Service d3d246
  endif
Packit Service d3d246
  if cc.has_member('struct ' + m[0], m[1], prefix : header_check_prefix)
Packit Service d3d246
    define = 'HAVE_STRUCT_@0@_@1@'.format(m[0].to_upper(), m[1].underscorify().to_upper())
Packit Service d3d246
    glib_conf.set(define, 1)
Packit Service d3d246
    glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format(define)
Packit Service d3d246
  else
Packit Service d3d246
  endif
Packit Service d3d246
endforeach
Packit Service d3d246
Packit Service d3d246
# Compiler flags
Packit Service d3d246
if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
Packit Service d3d246
  test_c_args = [
Packit Service d3d246
    '-Wall',
Packit Service d3d246
    '-Wduplicated-branches',
Packit Service d3d246
    '-Wstrict-prototypes',
Packit Service d3d246
    '-Werror=declaration-after-statement',
Packit Service d3d246
    '-Werror=format=2',
Packit Service d3d246
    '-Werror=format-security',
Packit Service d3d246
    '-Werror=implicit-function-declaration',
Packit Service d3d246
    '-Werror=init-self',
Packit Service d3d246
    '-Werror=missing-include-dirs',
Packit Service d3d246
    '-Werror=missing-prototypes',
Packit Service d3d246
    '-Werror=pointer-arith',
Packit Service d3d246
  ]
Packit Service d3d246
else
Packit Service d3d246
  test_c_args = []
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
add_project_arguments(cc.get_supported_arguments(test_c_args), language: 'c')
Packit Service d3d246
Packit Service d3d246
# Windows Support (Vista+)
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  glib_conf.set('_WIN32_WINNT', '0x0601')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
functions = [
Packit Service d3d246
  'alloca',
Packit Service d3d246
  'mmap',
Packit Service d3d246
  'posix_memalign',
Packit Service d3d246
  'memalign',
Packit Service d3d246
  'valloc',
Packit Service d3d246
  'fsync',
Packit Service d3d246
  'pipe2',
Packit Service d3d246
  'issetugid',
Packit Service d3d246
  'timegm',
Packit Service d3d246
  'gmtime_r',
Packit Service d3d246
  'strerror_r',
Packit Service d3d246
  'lstat',
Packit Service d3d246
  'strsignal',
Packit Service d3d246
  'vsnprintf',
Packit Service d3d246
  'stpcpy',
Packit Service d3d246
  'poll',
Packit Service d3d246
  'vasprintf',
Packit Service d3d246
  'setenv',
Packit Service d3d246
  'unsetenv',
Packit Service d3d246
  'getc_unlocked',
Packit Service d3d246
  'readlink',
Packit Service d3d246
  'symlink',
Packit Service d3d246
  'fdwalk',
Packit Service d3d246
  'lchmod',
Packit Service d3d246
  'lchown',
Packit Service d3d246
  'fchmod',
Packit Service d3d246
  'fchown',
Packit Service d3d246
  'utimes',
Packit Service d3d246
  'getresuid',
Packit Service d3d246
  'getmntent_r',
Packit Service d3d246
  'setmntent',
Packit Service d3d246
  'endmntent',
Packit Service d3d246
  'hasmntopt',
Packit Service d3d246
  'getfsstat',
Packit Service d3d246
  'getvfsstat',
Packit Service d3d246
  'fallocate',
Packit Service d3d246
  'localtime_r',
Packit Service d3d246
  'gmtime_r',
Packit Service d3d246
  'getpwuid_r',
Packit Service d3d246
  'getgrgid_r',
Packit Service d3d246
  'prlimit',
Packit Service d3d246
  'strnlen',
Packit Service d3d246
  'wcslen',
Packit Service d3d246
  'wcsnlen',
Packit Service d3d246
  'mbrtowc',
Packit Service d3d246
  'wcrtomb',
Packit Service d3d246
  'newlocale',
Packit Service d3d246
  'uselocale',
Packit Service d3d246
  'strtod_l',
Packit Service d3d246
  'strtoll_l',
Packit Service d3d246
  'strtoull_l',
Packit Service d3d246
  'inotify_init1',
Packit Service d3d246
  'kqueue',
Packit Service d3d246
  'kevent',
Packit Service d3d246
  'endservent',
Packit Service d3d246
  'sendmmsg',
Packit Service d3d246
  'recvmmsg',
Packit Service d3d246
  'link',
Packit Service d3d246
]
Packit Service d3d246
Packit Service d3d246
if glib_conf.has('HAVE_SYS_STATVFS_H')
Packit Service d3d246
  functions += ['statvfs']
Packit Service d3d246
else
Packit Service d3d246
  have_func_statvfs = false
Packit Service d3d246
endif
Packit Service d3d246
if glib_conf.has('HAVE_SYS_STATFS_H') or glib_conf.has('HAVE_SYS_MOUNT_H')
Packit Service d3d246
  functions += ['statfs']
Packit Service d3d246
else
Packit Service d3d246
  have_func_statfs = false
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  iphlpapi_dep = cc.find_library('iphlpapi')
Packit Service d3d246
  iphlpapi_funcs = ['if_nametoindex', 'if_indextoname']
Packit Service d3d246
  foreach ifunc : iphlpapi_funcs
Packit Service d3d246
    if cc.has_function(ifunc,
Packit Service d3d246
                       prefix : '#define _WIN32_WINNT 0x0601\n#include <winsock2.h>\n#include <iphlpapi.h>',
Packit Service d3d246
                       dependencies : iphlpapi_dep)
Packit Service d3d246
      idefine = 'HAVE_' + ifunc.underscorify().to_upper()
Packit Service d3d246
      glib_conf.set(idefine, 1)
Packit Service d3d246
      glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format(idefine)
Packit Service d3d246
      set_variable('have_func_' + ifunc, true)
Packit Service d3d246
    else
Packit Service d3d246
      set_variable('have_func_' + ifunc, false)
Packit Service d3d246
    endif
Packit Service d3d246
  endforeach
Packit Service d3d246
else
Packit Service d3d246
  functions += ['if_indextoname', 'if_nametoindex']
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# AIX splice is something else
Packit Service d3d246
if host_system != 'aix'
Packit Service d3d246
  functions += ['splice']
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
foreach f : functions
Packit Service d3d246
  if cc.has_function(f)
Packit Service d3d246
    define = 'HAVE_' + f.underscorify().to_upper()
Packit Service d3d246
    glib_conf.set(define, 1)
Packit Service d3d246
    glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format(define)
Packit Service d3d246
    set_variable('have_func_' + f, true)
Packit Service d3d246
  else
Packit Service d3d246
    set_variable('have_func_' + f, false)
Packit Service d3d246
  endif
Packit Service d3d246
endforeach
Packit Service d3d246
Packit Service d3d246
# Check whether strerror_r returns char *
Packit Service d3d246
if have_func_strerror_r
Packit Service d3d246
  if cc.compiles('''#define _GNU_SOURCE
Packit Service d3d246
                    #include <string.h>
Packit Service d3d246
                    int func (void) {
Packit Service d3d246
                      char error_string[256];
Packit Service d3d246
                      char *ptr = strerror_r (-2, error_string, 256);
Packit Service d3d246
                      char c = *strerror_r (-2, error_string, 256);
Packit Service d3d246
                      return c != 0 && ptr != (void*) 0L;
Packit Service d3d246
                    }
Packit Service d3d246
                 ''',
Packit Service d3d246
                 name : 'strerror_r() returns char *')
Packit Service d3d246
    glib_conf.set('STRERROR_R_CHAR_P', 1,
Packit Service d3d246
                  description: 'Defined if strerror_r returns char *')
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Special-case these functions that have alternative names on Windows/MSVC
Packit Service d3d246
if cc.has_function('snprintf') or cc.has_header_symbol('stdio.h', 'snprintf')
Packit Service d3d246
  glib_conf.set('HAVE_SNPRINTF', 1)
Packit Service d3d246
  glib_conf_prefix = glib_conf_prefix + '#define HAVE_SNPRINTF 1\n'
Packit Service d3d246
elif cc.has_function('_snprintf') or cc.has_header_symbol('stdio.h', '_snprintf')
Packit Service d3d246
  hack_define = '1\n#define snprintf _snprintf'
Packit Service d3d246
  glib_conf.set('HAVE_SNPRINTF', hack_define)
Packit Service d3d246
  glib_conf_prefix = glib_conf_prefix + '#define HAVE_SNPRINTF ' + hack_define
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if cc.has_function('strcasecmp')
Packit Service d3d246
  glib_conf.set('HAVE_STRCASECMP', 1)
Packit Service d3d246
  glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRCASECMP 1\n'
Packit Service d3d246
elif cc.has_function('_stricmp')
Packit Service d3d246
  hack_define = '1\n#define strcasecmp _stricmp'
Packit Service d3d246
  glib_conf.set('HAVE_STRCASECMP', hack_define)
Packit Service d3d246
  glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRCASECMP ' + hack_define
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if cc.has_function('strncasecmp')
Packit Service d3d246
  glib_conf.set('HAVE_STRNCASECMP', 1)
Packit Service d3d246
  glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRNCASECMP 1\n'
Packit Service d3d246
elif cc.has_function('_strnicmp')
Packit Service d3d246
  hack_define = '1\n#define strncasecmp _strnicmp'
Packit Service d3d246
  glib_conf.set('HAVE_STRNCASECMP', hack_define)
Packit Service d3d246
  glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRNCASECMP ' + hack_define
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if cc.has_header_symbol('sys/sysmacros.h', 'major')
Packit Service d3d246
  glib_conf.set('MAJOR_IN_SYSMACROS', 1)
Packit Service d3d246
elif cc.has_header_symbol('sys/mkdev.h', 'major')
Packit Service d3d246
  glib_conf.set('MAJOR_IN_MKDEV', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if cc.has_header_symbol('dlfcn.h', 'RTLD_LAZY')
Packit Service d3d246
  glib_conf.set('HAVE_RTLD_LAZY', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if cc.has_header_symbol('dlfcn.h', 'RTLD_NOW')
Packit Service d3d246
  glib_conf.set('HAVE_RTLD_NOW', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if cc.has_header_symbol('dlfcn.h', 'RTLD_GLOBAL')
Packit Service d3d246
  glib_conf.set('HAVE_RTLD_GLOBAL', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check whether to use statfs or statvfs
Packit Service d3d246
# Some systems have both statfs and statvfs, pick the most "native" for these
Packit Service d3d246
if have_func_statfs and have_func_statvfs
Packit Service d3d246
  # on solaris and irix, statfs doesn't even have the f_bavail field
Packit Service d3d246
  if not glib_conf.has('HAVE_STRUCT_STATFS_F_BAVAIL')
Packit Service d3d246
    have_func_statfs = false
Packit Service d3d246
  else
Packit Service d3d246
    # at least on linux, statfs is the actual syscall
Packit Service d3d246
    have_func_statvfs = false
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
if have_func_statfs
Packit Service d3d246
  glib_conf.set('USE_STATFS', 1)
Packit Service d3d246
  stat_func_to_use = 'statfs'
Packit Service d3d246
elif have_func_statvfs
Packit Service d3d246
  glib_conf.set('USE_STATVFS', 1)
Packit Service d3d246
  stat_func_to_use = 'statvfs'
Packit Service d3d246
else
Packit Service d3d246
  stat_func_to_use = 'neither'
Packit Service d3d246
endif
Packit Service d3d246
message('Checking whether to use statfs or statvfs .. ' + stat_func_to_use)
Packit Service d3d246
Packit Service d3d246
if host_system == 'linux'
Packit Service d3d246
  if cc.has_function('mkostemp',
Packit Service d3d246
                     prefix: '''#define _GNU_SOURCE
Packit Service d3d246
                                #include <stdlib.h>''')
Packit Service d3d246
    glib_conf.set('HAVE_MKOSTEMP', 1)
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
platform_ldflags=[]
Packit Service d3d246
Packit Service d3d246
# Mac OS X Carbon support
Packit Service d3d246
glib_have_carbon = cc.compiles('''#include <Carbon/Carbon.h>
Packit Service d3d246
                                  #include <CoreServices/CoreServices.h>''',
Packit Service d3d246
                               name : 'Mac OS X Carbon support')
Packit Service d3d246
Packit Service d3d246
glib_have_os_x_9_or_later = false
Packit Service d3d246
Packit Service d3d246
if glib_have_carbon
Packit Service d3d246
  glib_conf.set('HAVE_CARBON', true)
Packit Service d3d246
  CARBON_LIBS='-Wl,-framework,Carbon' # FIXME: propagate to .pc files as well
Packit Service d3d246
  platform_ldflags += [CARBON_LIBS]
Packit Service d3d246
  glib_have_os_x_9_or_later = cc.compiles('''#include <AvailabilityMacros.h>
Packit Service d3d246
                                             #if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
Packit Service d3d246
                                             #error Compiling for minimum OS X version before 10.9
Packit Service d3d246
                                             #endif''', name : 'OS X 9 or later')
Packit Service d3d246
else
Packit Service d3d246
  CARBON_LIBS=''
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Mac OS X Cocoa support
Packit Service d3d246
glib_have_cocoa = cc.compiles('''#include <Cocoa/Cocoa.h>
Packit Service d3d246
                                 #ifdef GNUSTEP_BASE_VERSION
Packit Service d3d246
                                 #error "Detected GNUstep, not Cocoa"
Packit Service d3d246
                                 #endif''',
Packit Service d3d246
                              name : 'Mac OS X Cocoa support')
Packit Service d3d246
Packit Service d3d246
if glib_have_cocoa
Packit Service d3d246
  glib_conf.set('HAVE_COCOA', true)
Packit Service d3d246
  COCOA_LIBS='-Wl,-framework,Foundation -Wl,-framework,AppKit' # FIXME: propagate to .pc files as well
Packit Service d3d246
  platform_ldflags += [COCOA_LIBS]
Packit Service d3d246
else
Packit Service d3d246
  COCOA_LIBS=''
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check for futex(2)
Packit Service d3d246
if cc.links('''#include <linux/futex.h>
Packit Service d3d246
               #include <sys/syscall.h>
Packit Service d3d246
               #include <unistd.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 syscall (__NR_futex, NULL, FUTEX_WAKE, FUTEX_WAIT);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'futex(2) system call')
Packit Service d3d246
  glib_conf.set('HAVE_FUTEX', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check for eventfd(2)
Packit Service d3d246
if cc.links('''#include <sys/eventfd.h>
Packit Service d3d246
               #include <unistd.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 eventfd (0, EFD_CLOEXEC);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'eventfd(2) system call')
Packit Service d3d246
  glib_conf.set('HAVE_EVENTFD', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
clock_gettime_test_code = '''
Packit Service d3d246
  #include <time.h>
Packit Service d3d246
  struct timespec t;
Packit Service d3d246
  int main (int argc, char ** argv) {
Packit Service d3d246
    return clock_gettime(CLOCK_REALTIME, &t);
Packit Service d3d246
  }'''
Packit Service d3d246
librt = []
Packit Service d3d246
if cc.links(clock_gettime_test_code, name : 'clock_gettime')
Packit Service d3d246
  glib_conf.set('HAVE_CLOCK_GETTIME', 1)
Packit Service d3d246
elif cc.links(clock_gettime_test_code, args : '-lrt', name : 'clock_gettime in librt')
Packit Service d3d246
  glib_conf.set('HAVE_CLOCK_GETTIME', 1)
Packit Service d3d246
  librt = cc.find_library('rt')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# if statfs() takes 2 arguments (Posix) or 4 (Solaris)
Packit Service d3d246
if have_func_statfs
Packit Service d3d246
  if cc.compiles(glib_conf_prefix + '''
Packit Service d3d246
                 #include <unistd.h>
Packit Service d3d246
                        #ifdef HAVE_SYS_PARAM_H
Packit Service d3d246
                        #include <sys/param.h>
Packit Service d3d246
                        #endif
Packit Service d3d246
                        #ifdef HAVE_SYS_VFS_H
Packit Service d3d246
                        #include <sys/vfs.h>
Packit Service d3d246
                        #endif
Packit Service d3d246
                        #ifdef HAVE_SYS_MOUNT_H
Packit Service d3d246
                        #include <sys/mount.h>
Packit Service d3d246
                        #endif
Packit Service d3d246
                        #ifdef HAVE_SYS_STATFS_H
Packit Service d3d246
                        #include <sys/statfs.h>
Packit Service d3d246
                        #endif
Packit Service d3d246
                        void some_func (void) {
Packit Service d3d246
                          struct statfs st;
Packit Service d3d246
                          statfs("/", &st);
Packit Service d3d246
                        }''', name : 'number of arguments to statfs() (n=2)')
Packit Service d3d246
    glib_conf.set('STATFS_ARGS', 2)
Packit Service d3d246
  elif cc.compiles(glib_conf_prefix + '''
Packit Service d3d246
                   #include <unistd.h>
Packit Service d3d246
                          #ifdef HAVE_SYS_PARAM_H
Packit Service d3d246
                          #include <sys/param.h>
Packit Service d3d246
                          #endif
Packit Service d3d246
                          #ifdef HAVE_SYS_VFS_H
Packit Service d3d246
                          #include <sys/vfs.h>
Packit Service d3d246
                          #endif
Packit Service d3d246
                          #ifdef HAVE_SYS_MOUNT_H
Packit Service d3d246
                          #include <sys/mount.h>
Packit Service d3d246
                          #endif
Packit Service d3d246
                          #ifdef HAVE_SYS_STATFS_H
Packit Service d3d246
                          #include <sys/statfs.h>
Packit Service d3d246
                          #endif
Packit Service d3d246
                          void some_func (void) {
Packit Service d3d246
                            struct statfs st;
Packit Service d3d246
                            statfs("/", &st, sizeof (st), 0);
Packit Service d3d246
                          }''', name : 'number of arguments to statfs() (n=4)')
Packit Service d3d246
    glib_conf.set('STATFS_ARGS', 4)
Packit Service d3d246
  else
Packit Service d3d246
    error('Unable to determine number of arguments to statfs()')
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# open takes O_DIRECTORY as an option
Packit Service d3d246
#AC_MSG_CHECKING([])
Packit Service d3d246
if cc.compiles('''#include <fcntl.h>
Packit Service d3d246
                  #include <sys/types.h>
Packit Service d3d246
                  #include <sys/stat.h>],
Packit Service d3d246
                  void some_func (void) {
Packit Service d3d246
                    open(0, O_DIRECTORY, 0);
Packit Service d3d246
                  }''', name : 'open() option O_DIRECTORY')
Packit Service d3d246
  glib_conf.set('HAVE_OPEN_O_DIRECTORY', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check whether there is a vsnprintf() function with C99 semantics installed.
Packit Service d3d246
# AC_FUNC_VSNPRINTF_C99
Packit Service d3d246
# Check whether there is a snprintf() function with C99 semantics installed.
Packit Service d3d246
# AC_FUNC_SNPRINTF_C99
Packit Service d3d246
Packit Service d3d246
have_good_vsnprintf = false
Packit Service d3d246
have_good_snprintf = false
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  # Unfortunately the mingw and Visual Studio 2015+ implementations of C99-style
Packit Service d3d246
  # snprintf and vsnprintf don't seem to be quite good enough, at least not in
Packit Service d3d246
  # mingw-runtime-3.14.  (Sorry, I don't know exactly what is the problem,
Packit Service d3d246
  # but it is related to floating point formatting and decimal point vs. comma.)
Packit Service d3d246
  # The simple tests in AC_FUNC_VSNPRINTF_C99 and AC_FUNC_SNPRINTF_C99 aren't
Packit Service d3d246
  # rigorous enough to notice, though.
Packit Service d3d246
  glib_conf.set('HAVE_C99_SNPRINTF', false)
Packit Service d3d246
  glib_conf.set('HAVE_C99_VSNPRINTF', false)
Packit Service d3d246
else
Packit Service d3d246
  vsnprintf_c99_test_code = '''
Packit Service d3d246
#include <stdio.h>
Packit Service d3d246
#include <stdarg.h>
Packit Service d3d246
Packit Service d3d246
int
Packit Service d3d246
doit(char * s, ...)
Packit Service d3d246
{
Packit Service d3d246
  char buffer[32];
Packit Service d3d246
  va_list args;
Packit Service d3d246
  int r;
Packit Service d3d246
Packit Service d3d246
  va_start(args, s);
Packit Service d3d246
  r = vsnprintf(buffer, 5, s, args);
Packit Service d3d246
  va_end(args);
Packit Service d3d246
Packit Service d3d246
  if (r != 7)
Packit Service d3d246
    exit(1);
Packit Service d3d246
Packit Service d3d246
  /* AIX 5.1 and Solaris seems to have a half-baked vsnprintf()
Packit Service d3d246
     implementation. The above will return 7 but if you replace
Packit Service d3d246
     the size of the buffer with 0, it borks! */
Packit Service d3d246
  va_start(args, s);
Packit Service d3d246
  r = vsnprintf(buffer, 0, s, args);
Packit Service d3d246
  va_end(args);
Packit Service d3d246
Packit Service d3d246
  if (r != 7)
Packit Service d3d246
    exit(1);
Packit Service d3d246
Packit Service d3d246
  exit(0);
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
int
Packit Service d3d246
main(void)
Packit Service d3d246
{
Packit Service d3d246
  doit("1234567");
Packit Service d3d246
  exit(1);
Packit Service d3d246
}'''
Packit Service d3d246
Packit Service d3d246
  rres = cc.run(vsnprintf_c99_test_code, name : 'C99 vsnprintf')
Packit Service d3d246
  if rres.compiled() and rres.returncode() == 0
Packit Service d3d246
    glib_conf.set('HAVE_C99_VSNPRINTF', 1)
Packit Service d3d246
    have_good_vsnprintf = true
Packit Service d3d246
  endif
Packit Service d3d246
Packit Service d3d246
  snprintf_c99_test_code = '''
Packit Service d3d246
#include <stdio.h>
Packit Service d3d246
#include <stdarg.h>
Packit Service d3d246
Packit Service d3d246
int
Packit Service d3d246
doit()
Packit Service d3d246
{
Packit Service d3d246
  char buffer[32];
Packit Service d3d246
  va_list args;
Packit Service d3d246
  int r;
Packit Service d3d246
Packit Service d3d246
  r = snprintf(buffer, 5, "1234567");
Packit Service d3d246
Packit Service d3d246
  if (r != 7)
Packit Service d3d246
    exit(1);
Packit Service d3d246
Packit Service d3d246
  r = snprintf(buffer, 0, "1234567");
Packit Service d3d246
Packit Service d3d246
  if (r != 7)
Packit Service d3d246
    exit(1);
Packit Service d3d246
Packit Service d3d246
  r = snprintf(NULL, 0, "1234567");
Packit Service d3d246
Packit Service d3d246
  if (r != 7)
Packit Service d3d246
    exit(1);
Packit Service d3d246
Packit Service d3d246
  exit(0);
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
int
Packit Service d3d246
main(void)
Packit Service d3d246
{
Packit Service d3d246
  doit();
Packit Service d3d246
  exit(1);
Packit Service d3d246
}'''
Packit Service d3d246
Packit Service d3d246
  rres = cc.run(snprintf_c99_test_code, name : 'C99 snprintf')
Packit Service d3d246
  if rres.compiled() and rres.returncode() == 0
Packit Service d3d246
    glib_conf.set('HAVE_C99_SNPRINTF', 1)
Packit Service d3d246
    have_good_snprintf = true
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  glib_conf.set_quoted('EXEEXT', '.exe')
Packit Service d3d246
else
Packit Service d3d246
  glib_conf.set('EXEEXT', '')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if have_good_vsnprintf and have_good_snprintf
Packit Service d3d246
  # Our printf is 'good' only if vsnpintf()/snprintf() supports C99 well enough
Packit Service d3d246
  glib_conf.set('HAVE_GOOD_PRINTF', 1) # FIXME: Check for HAVE_UNIX98_PRINTF?
Packit Service d3d246
else
Packit Service d3d246
  glib_conf.set('HAVE_VASPRINTF', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check whether the printf() family supports Unix98 %n$ positional parameters
Packit Service d3d246
# AC_FUNC_PRINTF_UNIX98
Packit Service d3d246
# Nothing uses HAVE_UNIX98_PRINTF
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
# Check for nl_langinfo and CODESET
Packit Service d3d246
# FIXME: Check for HAVE_BIND_TEXTDOMAIN_CODESET
Packit Service d3d246
if cc.links('''#include <langinfo.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 char *codeset = nl_langinfo (CODESET);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'nl_langinfo and CODESET')
Packit Service d3d246
  glib_conf.set('HAVE_LANGINFO_CODESET', 1)
Packit Service d3d246
  glib_conf.set('HAVE_CODESET', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check for nl_langinfo and LC_TIME parts that are needed in gdatetime.c
Packit Service d3d246
if cc.links('''#include <langinfo.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 char *str;
Packit Service d3d246
                 str = nl_langinfo (PM_STR);
Packit Service d3d246
                 str = nl_langinfo (D_T_FMT);
Packit Service d3d246
                 str = nl_langinfo (D_FMT);
Packit Service d3d246
                 str = nl_langinfo (T_FMT);
Packit Service d3d246
                 str = nl_langinfo (T_FMT_AMPM);
Packit Service d3d246
                 str = nl_langinfo (MON_1);
Packit Service d3d246
                 str = nl_langinfo (ABMON_12);
Packit Service d3d246
                 str = nl_langinfo (DAY_1);
Packit Service d3d246
                 str = nl_langinfo (ABDAY_7);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'nl_langinfo (PM_STR)')
Packit Service d3d246
  glib_conf.set('HAVE_LANGINFO_TIME', 1)
Packit Service d3d246
endif
Packit Service d3d246
if cc.links('''#include <langinfo.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 char *str;
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT0_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT1_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT2_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT3_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT4_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT5_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT6_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT7_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT8_MB);
Packit Service d3d246
                 str = nl_langinfo (_NL_CTYPE_OUTDIGIT9_MB);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'nl_langinfo (_NL_CTYPE_OUTDIGITn_MB)')
Packit Service d3d246
  glib_conf.set('HAVE_LANGINFO_OUTDIGIT', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check for nl_langinfo and alternative month names
Packit Service d3d246
if cc.links('''#ifndef _GNU_SOURCE
Packit Service d3d246
              # define _GNU_SOURCE
Packit Service d3d246
              #endif
Packit Service d3d246
              #include <langinfo.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 char *str;
Packit Service d3d246
                 str = nl_langinfo (ALTMON_1);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_2);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_3);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_4);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_5);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_6);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_7);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_8);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_9);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_10);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_11);
Packit Service d3d246
                 str = nl_langinfo (ALTMON_12);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'nl_langinfo (ALTMON_n)')
Packit Service d3d246
  glib_conf.set('HAVE_LANGINFO_ALTMON', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check for nl_langinfo and abbreviated alternative month names
Packit Service d3d246
if cc.links('''#ifndef _GNU_SOURCE
Packit Service d3d246
              # define _GNU_SOURCE
Packit Service d3d246
              #endif
Packit Service d3d246
              #include <langinfo.h>
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 char *str;
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_1);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_2);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_3);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_4);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_5);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_6);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_7);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_8);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_9);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_10);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_11);
Packit Service d3d246
                 str = nl_langinfo (_NL_ALTMON_12);
Packit Service d3d246
                 return 0;
Packit Service d3d246
               }''', name : 'nl_langinfo (_NL_ALTMON_n)')
Packit Service d3d246
  glib_conf.set('HAVE_LANGINFO_ABALTMON', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check if C compiler supports the 'signed' keyword
Packit Service d3d246
if not cc.compiles('''signed char x;''', name : 'signed')
Packit Service d3d246
  glib_conf.set('signed', '/* NOOP */')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check if the ptrdiff_t type exists
Packit Service d3d246
if cc.has_header_symbol('stddef.h', 'ptrdiff_t')
Packit Service d3d246
  glib_conf.set('HAVE_PTRDIFF_T', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check for sig_atomic_t type
Packit Service d3d246
if cc.links('''#include <signal.h>
Packit Service d3d246
               #include <sys/types.h>
Packit Service d3d246
               sig_atomic_t val = 42;
Packit Service d3d246
               int main (int argc, char ** argv) {
Packit Service d3d246
                 return val == 42 ? 0 : 1;
Packit Service d3d246
               }''', name : 'sig_atomic_t')
Packit Service d3d246
  glib_conf.set('HAVE_SIG_ATOMIC_T', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Check if 'long long' works and what format can be used to print it
Packit Service d3d246
# jm_AC_TYPE_LONG_LONG
Packit Service d3d246
# Nothing uses HAVE_LONG_LONG_FORMAT and HAVE_INT64_AND_I64
Packit Service d3d246
if cc.compiles('''long long ll = 1LL;
Packit Service d3d246
                  int i = 63;
Packit Service d3d246
                  int some_func (void) {
Packit Service d3d246
                    long long llmax = (long long) -1;
Packit Service d3d246
                    return ll << i | ll >> i | llmax / ll | llmax % ll;
Packit Service d3d246
                  }''', name : 'long long')
Packit Service d3d246
  glib_conf.set('HAVE_LONG_LONG', 1)
Packit Service d3d246
  have_long_long = true
Packit Service d3d246
else
Packit Service d3d246
  have_long_long = false
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Test whether the compiler supports the 'long double' type.
Packit Service d3d246
if cc.compiles('''/* The Stardent Vistra knows sizeof(long double), but does not support it.  */
Packit Service d3d246
                  long double foo = 0.0;
Packit Service d3d246
                  /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
Packit Service d3d246
                  int array [2*(sizeof(long double) >= sizeof(double)) - 1];''',
Packit Service d3d246
               name : 'long double')
Packit Service d3d246
  glib_conf.set('HAVE_LONG_DOUBLE', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
#dnl Test whether <stddef.h> has the 'wchar_t' type.
Packit Service d3d246
if cc.has_header_symbol('stddef.h', 'wchar_t')
Packit Service d3d246
  glib_conf.set('HAVE_WCHAR_T', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Test whether <wchar.h> has the 'wint_t' type.
Packit Service d3d246
if cc.has_header_symbol('wchar.h', 'wint_t')
Packit Service d3d246
  glib_conf.set('HAVE_WINT_T', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
found_uintmax_t = false
Packit Service d3d246
Packit Service d3d246
# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
Packit Service d3d246
# doesn't clash with <sys/types.h>, and declares uintmax_t.
Packit Service d3d246
# jm_AC_HEADER_INTTYPES_H
Packit Service d3d246
if cc.compiles('''#include <sys/types.h>
Packit Service d3d246
                  #include <inttypes.h>
Packit Service d3d246
                  void some_func (void) {
Packit Service d3d246
                    uintmax_t i = (uintmax_t) -1;
Packit Service d3d246
                  }''', name : 'uintmax_t in inttypes.h')
Packit Service d3d246
  glib_conf.set('HAVE_INTTYPES_H_WITH_UINTMAX', 1)
Packit Service d3d246
  found_uintmax_t = true
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
Packit Service d3d246
# doesn't clash with <sys/types.h>, and declares uintmax_t.
Packit Service d3d246
# jm_AC_HEADER_STDINT_H
Packit Service d3d246
if cc.compiles('''#include <sys/types.h>
Packit Service d3d246
                  #include <stdint.h>
Packit Service d3d246
                  void some_func (void) {
Packit Service d3d246
                    uintmax_t i = (uintmax_t) -1;
Packit Service d3d246
                  }''', name : 'uintmax_t in stdint.h')
Packit Service d3d246
  glib_conf.set('HAVE_STDINT_H_WITH_UINTMAX', 1)
Packit Service d3d246
  found_uintmax_t = true
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Define intmax_t to 'long' or 'long long'
Packit Service d3d246
# if it is not already defined in <stdint.h> or <inttypes.h>.
Packit Service d3d246
# For simplicity, we assume that a header file defines 'intmax_t' if and
Packit Service d3d246
# only if it defines 'uintmax_t'.
Packit Service d3d246
if found_uintmax_t
Packit Service d3d246
  glib_conf.set('HAVE_INTMAX_T', 1)
Packit Service d3d246
elif have_long_long
Packit Service d3d246
  glib_conf.set('intmax_t', 'long long')
Packit Service d3d246
else
Packit Service d3d246
  glib_conf.set('intmax_t', 'long')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
char_size = cc.sizeof('char')
Packit Service d3d246
short_size = cc.sizeof('short')
Packit Service d3d246
int_size = cc.sizeof('int')
Packit Service d3d246
voidp_size = cc.sizeof('void*')
Packit Service d3d246
long_size = cc.sizeof('long')
Packit Service d3d246
if have_long_long
Packit Service d3d246
  long_long_size = cc.sizeof('long long')
Packit Service d3d246
else
Packit Service d3d246
  long_long_size = 0
Packit Service d3d246
endif
Packit Service d3d246
sizet_size = cc.sizeof('size_t')
Packit Service d3d246
if cc.get_id() == 'msvc'
Packit Service d3d246
  ssizet_size = cc.sizeof('SSIZE_T', prefix : '#include <BaseTsd.h>')
Packit Service d3d246
else
Packit Service d3d246
  ssizet_size = cc.sizeof('ssize_t')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# On Windows, MSVC supports both ll and I64 as format specifiers for 64-bit
Packit Service d3d246
# integers, but some versions (at least 4.7.x) of MinGW only support I64.
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  int64_m = 'I64'
Packit Service d3d246
else
Packit Service d3d246
  int64_m = 'll'
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
char_align = cc.alignment('char')
Packit Service d3d246
short_align = cc.alignment('short')
Packit Service d3d246
int_align = cc.alignment('int')
Packit Service d3d246
voidp_align = cc.alignment('void*')
Packit Service d3d246
long_align = cc.alignment('long')
Packit Service d3d246
long_long_align = cc.alignment('long long')
Packit Service d3d246
# NOTE: We don't check for size of __int64 because long long is guaranteed to
Packit Service d3d246
# be 64-bit in C99, and it is available on all supported compilers
Packit Service d3d246
sizet_align = cc.alignment('size_t')
Packit Service d3d246
Packit Service d3d246
glib_conf.set('ALIGNOF_UNSIGNED_LONG', long_align)
Packit Service d3d246
Packit Service d3d246
glib_conf.set('SIZEOF_CHAR', char_size)
Packit Service d3d246
glib_conf.set('SIZEOF_INT', int_size)
Packit Service d3d246
glib_conf.set('SIZEOF_SHORT', short_size)
Packit Service d3d246
glib_conf.set('SIZEOF_LONG', long_size)
Packit Service d3d246
glib_conf.set('SIZEOF_LONG_LONG', long_long_size)
Packit Service d3d246
glib_conf.set('SIZEOF_SIZE_T', sizet_size)
Packit Service d3d246
glib_conf.set('SIZEOF_SSIZE_T', ssizet_size)
Packit Service d3d246
glib_conf.set('SIZEOF_VOID_P', voidp_size)
Packit Service d3d246
Packit Service d3d246
if short_size == 2
Packit Service d3d246
  gint16 = 'short'
Packit Service d3d246
  gint16_modifier='h'
Packit Service d3d246
  gint16_format='hi'
Packit Service d3d246
  guint16_format='hu'
Packit Service d3d246
elif int_size == 2
Packit Service d3d246
  gint16 = 'int'
Packit Service d3d246
  gint16_modifier=''
Packit Service d3d246
  gint16_format='i'
Packit Service d3d246
  guint16_format='u'
Packit Service d3d246
else
Packit Service d3d246
  error('Compiler provides no native 16-bit integer type')
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('gint16', gint16)
Packit Service d3d246
glibconfig_conf.set_quoted('gint16_modifier', gint16_modifier)
Packit Service d3d246
glibconfig_conf.set_quoted('gint16_format', gint16_format)
Packit Service d3d246
glibconfig_conf.set_quoted('guint16_format', guint16_format)
Packit Service d3d246
Packit Service d3d246
if short_size == 4
Packit Service d3d246
  gint32 = 'short'
Packit Service d3d246
  gint32_modifier='h'
Packit Service d3d246
  gint32_format='hi'
Packit Service d3d246
  guint32_format='hu'
Packit Service d3d246
  guint32_align = short_align
Packit Service d3d246
elif int_size == 4
Packit Service d3d246
  gint32 = 'int'
Packit Service d3d246
  gint32_modifier=''
Packit Service d3d246
  gint32_format='i'
Packit Service d3d246
  guint32_format='u'
Packit Service d3d246
  guint32_align = int_align
Packit Service d3d246
elif long_size == 4
Packit Service d3d246
  gint32 = 'long'
Packit Service d3d246
  gint32_modifier='l'
Packit Service d3d246
  gint32_format='li'
Packit Service d3d246
  guint32_format='lu'
Packit Service d3d246
  guint32_align = long_align
Packit Service d3d246
else
Packit Service d3d246
  error('Compiler provides no native 32-bit integer type')
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('gint32', gint32)
Packit Service d3d246
glibconfig_conf.set_quoted('gint32_modifier', gint32_modifier)
Packit Service d3d246
glibconfig_conf.set_quoted('gint32_format', gint32_format)
Packit Service d3d246
glibconfig_conf.set_quoted('guint32_format', guint32_format)
Packit Service d3d246
glib_conf.set('ALIGNOF_GUINT32', guint32_align)
Packit Service d3d246
Packit Service d3d246
if int_size == 8
Packit Service d3d246
  gint64 = 'int'
Packit Service d3d246
  gint64_modifier=''
Packit Service d3d246
  gint64_format='i'
Packit Service d3d246
  guint64_format='u'
Packit Service d3d246
  glib_extension=''
Packit Service d3d246
  gint64_constant='(val)'
Packit Service d3d246
  guint64_constant='(val)'
Packit Service d3d246
  guint64_align = int_align
Packit Service d3d246
elif long_size == 8
Packit Service d3d246
  gint64 = 'long'
Packit Service d3d246
  glib_extension=''
Packit Service d3d246
  gint64_modifier='l'
Packit Service d3d246
  gint64_format='li'
Packit Service d3d246
  guint64_format='lu'
Packit Service d3d246
  gint64_constant='(val##L)'
Packit Service d3d246
  guint64_constant='(val##UL)'
Packit Service d3d246
  guint64_align = long_align
Packit Service d3d246
elif long_long_size == 8
Packit Service d3d246
  gint64 = 'long long'
Packit Service d3d246
  glib_extension='G_GNUC_EXTENSION '
Packit Service d3d246
  gint64_modifier=int64_m
Packit Service d3d246
  gint64_format=int64_m + 'i'
Packit Service d3d246
  guint64_format=int64_m + 'u'
Packit Service d3d246
  gint64_constant='(G_GNUC_EXTENSION (val##LL))'
Packit Service d3d246
  guint64_constant='(G_GNUC_EXTENSION (val##ULL))'
Packit Service d3d246
  guint64_align = long_long_align
Packit Service d3d246
else
Packit Service d3d246
  error('Compiler provides no native 64-bit integer type')
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('glib_extension', glib_extension)
Packit Service d3d246
glibconfig_conf.set('gint64', gint64)
Packit Service d3d246
glibconfig_conf.set_quoted('gint64_modifier', gint64_modifier)
Packit Service d3d246
glibconfig_conf.set_quoted('gint64_format', gint64_format)
Packit Service d3d246
glibconfig_conf.set_quoted('guint64_format', guint64_format)
Packit Service d3d246
glibconfig_conf.set('gint64_constant', gint64_constant)
Packit Service d3d246
glibconfig_conf.set('guint64_constant', guint64_constant)
Packit Service d3d246
glib_conf.set('ALIGNOF_GUINT64', guint64_align)
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  glibconfig_conf.set('g_pid_type', 'void*')
Packit Service d3d246
  glibconfig_conf.set_quoted('g_pid_format', 'p')
Packit Service d3d246
  if host_machine.cpu_family() == 'x86_64'
Packit Service d3d246
    glibconfig_conf.set_quoted('g_pollfd_format', '%#I64x')
Packit Service d3d246
  else
Packit Service d3d246
    glibconfig_conf.set_quoted('g_pollfd_format', '%#x')
Packit Service d3d246
  endif
Packit Service d3d246
  glibconfig_conf.set('g_dir_separator', '\\\\')
Packit Service d3d246
  glibconfig_conf.set('g_searchpath_separator', ';')
Packit Service d3d246
else
Packit Service d3d246
  glibconfig_conf.set('g_pid_type', 'int')
Packit Service d3d246
  glibconfig_conf.set_quoted('g_pid_format', 'i')
Packit Service d3d246
  glibconfig_conf.set_quoted('g_pollfd_format', '%d')
Packit Service d3d246
  glibconfig_conf.set('g_dir_separator', '/')
Packit Service d3d246
  glibconfig_conf.set('g_searchpath_separator', ':')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if sizet_size == short_size
Packit Service d3d246
  glibconfig_conf.set('glib_size_type_define', 'short')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_modifier', 'h')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_modifier', 'h')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_format', 'hu')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_format', 'hi')
Packit Service d3d246
  glibconfig_conf.set('glib_msize_type', 'SHRT')
Packit Service d3d246
elif sizet_size == int_size
Packit Service d3d246
  glibconfig_conf.set('glib_size_type_define', 'int')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_modifier', '')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_modifier', '')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_format', 'u')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_format', 'i')
Packit Service d3d246
  glibconfig_conf.set('glib_msize_type', 'INT')
Packit Service d3d246
elif sizet_size == long_size
Packit Service d3d246
  glibconfig_conf.set('glib_size_type_define', 'long')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_modifier', 'l')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_modifier', 'l')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_format', 'lu')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_format', 'li')
Packit Service d3d246
  glibconfig_conf.set('glib_msize_type', 'LONG')
Packit Service d3d246
elif sizet_size == long_long_size
Packit Service d3d246
  glibconfig_conf.set('glib_size_type_define', 'long long')
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_modifier', int64_m)
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_modifier', int64_m)
Packit Service d3d246
  glibconfig_conf.set_quoted('gsize_format', int64_m + 'u')
Packit Service d3d246
  glibconfig_conf.set_quoted('gssize_format', int64_m + 'i')
Packit Service d3d246
  glibconfig_conf.set('glib_msize_type', 'INT64')
Packit Service d3d246
else
Packit Service d3d246
  error('Could not determine size of size_t.')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if voidp_size == int_size
Packit Service d3d246
  glibconfig_conf.set('glib_intptr_type_define', 'int')
Packit Service d3d246
  glibconfig_conf.set_quoted('gintptr_modifier', '')
Packit Service d3d246
  glibconfig_conf.set_quoted('gintptr_format', 'i')
Packit Service d3d246
  glibconfig_conf.set_quoted('guintptr_format', 'u')
Packit Service d3d246
  glibconfig_conf.set('glib_gpi_cast', '(gint)')
Packit Service d3d246
  glibconfig_conf.set('glib_gpui_cast', '(guint)')
Packit Service d3d246
elif voidp_size == long_size
Packit Service d3d246
  glibconfig_conf.set('glib_intptr_type_define', 'long')
Packit Service d3d246
  glibconfig_conf.set_quoted('gintptr_modifier', 'l')
Packit Service d3d246
  glibconfig_conf.set_quoted('gintptr_format', 'li')
Packit Service d3d246
  glibconfig_conf.set_quoted('guintptr_format', 'lu')
Packit Service d3d246
  glibconfig_conf.set('glib_gpi_cast', '(glong)')
Packit Service d3d246
  glibconfig_conf.set('glib_gpui_cast', '(gulong)')
Packit Service d3d246
elif voidp_size == long_long_size
Packit Service d3d246
  glibconfig_conf.set('glib_intptr_type_define', 'long long')
Packit Service d3d246
  glibconfig_conf.set_quoted('gintptr_modifier', int64_m)
Packit Service d3d246
  glibconfig_conf.set_quoted('gintptr_format', int64_m + 'i')
Packit Service d3d246
  glibconfig_conf.set_quoted('guintptr_format', int64_m + 'u')
Packit Service d3d246
  glibconfig_conf.set('glib_gpi_cast', '(gint64)')
Packit Service d3d246
  glibconfig_conf.set('glib_gpui_cast', '(guint64)')
Packit Service d3d246
else
Packit Service d3d246
  error('Could not determine size of void *')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if long_size != 8 and long_long_size != 8 and int_size != 8
Packit Service d3d246
  error('GLib requires a 64-bit type. You might want to consider using the GNU C compiler.')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
glibconfig_conf.set('gintbits', int_size * 8)
Packit Service d3d246
glibconfig_conf.set('glongbits', long_size * 8)
Packit Service d3d246
glibconfig_conf.set('gsizebits', sizet_size * 8)
Packit Service d3d246
glibconfig_conf.set('gssizebits', ssizet_size * 8)
Packit Service d3d246
Packit Service d3d246
# FIXME: maybe meson should tell us the libsuffix?
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  g_module_suffix = 'dll'
Packit Service d3d246
elif host_system == 'darwin'
Packit Service d3d246
  g_module_suffix = 'dylib'
Packit Service d3d246
else
Packit Service d3d246
  g_module_suffix = 'so'
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('g_module_suffix', g_module_suffix)
Packit Service d3d246
Packit Service d3d246
glibconfig_conf.set('GLIB_MAJOR_VERSION', major_version)
Packit Service d3d246
glibconfig_conf.set('GLIB_MINOR_VERSION', minor_version)
Packit Service d3d246
glibconfig_conf.set('GLIB_MICRO_VERSION', micro_version)
Packit Service d3d246
glibconfig_conf.set('GLIB_VERSION', glib_version)
Packit Service d3d246
Packit Service d3d246
glibconfig_conf.set('glib_void_p', voidp_size)
Packit Service d3d246
glibconfig_conf.set('glib_long', long_size)
Packit Service d3d246
glibconfig_conf.set('glib_size_t', sizet_size)
Packit Service d3d246
glibconfig_conf.set('glib_ssize_t', ssizet_size)
Packit Service d3d246
if host_machine.endian() == 'big'
Packit Service d3d246
  glibconfig_conf.set('g_byte_order', 'G_BIG_ENDIAN')
Packit Service d3d246
  glibconfig_conf.set('g_bs_native', 'BE')
Packit Service d3d246
  glibconfig_conf.set('g_bs_alien', 'LE')
Packit Service d3d246
else
Packit Service d3d246
  glibconfig_conf.set('g_byte_order', 'G_LITTLE_ENDIAN')
Packit Service d3d246
  glibconfig_conf.set('g_bs_native', 'LE')
Packit Service d3d246
  glibconfig_conf.set('g_bs_alien', 'BE')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# === va_copy checks ===
Packit Service d3d246
# we currently check for all three va_copy possibilities, so we get
Packit Service d3d246
# all results in config.log for bug reports.
Packit Service d3d246
Packit Service d3d246
va_copy_func = ''
Packit Service d3d246
foreach try_func : [ '__va_copy', 'va_copy' ]
Packit Service d3d246
  if cc.compiles('''#include <stdarg.h>
Packit Service d3d246
                    #include <stdlib.h>
Packit Service d3d246
                    #ifdef _MSC_VER
Packit Service d3d246
                    # include "msvc_recommended_pragmas.h"
Packit Service d3d246
                    #endif
Packit Service d3d246
                    void f (int i, ...) {
Packit Service d3d246
                    va_list args1, args2;
Packit Service d3d246
                    va_start (args1, i);
Packit Service d3d246
                    @0@ (args2, args1);
Packit Service d3d246
                    if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
Packit Service d3d246
                      exit (1);
Packit Service d3d246
                    va_end (args1); va_end (args2);
Packit Service d3d246
                    }
Packit Service d3d246
                    int main() {
Packit Service d3d246
                      f (0, 42);
Packit Service d3d246
                      return 0;
Packit Service d3d246
                    }'''.format(try_func),
Packit Service d3d246
                    name : try_func + ' check')
Packit Service d3d246
    va_copy_func = try_func
Packit Service d3d246
  endif
Packit Service d3d246
endforeach
Packit Service d3d246
if va_copy_func != ''
Packit Service d3d246
  glib_conf.set('G_VA_COPY', va_copy_func)
Packit Service d3d246
  glib_vacopy = '#define G_VA_COPY ' + va_copy_func
Packit Service d3d246
else
Packit Service d3d246
  glib_vacopy = '/* #undef G_VA_COPY */'
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
va_list_val_copy_prog = '''
Packit Service d3d246
  #include <stdarg.h>
Packit Service d3d246
  #include <stdlib.h>
Packit Service d3d246
  void f (int i, ...) {
Packit Service d3d246
    va_list args1, args2;
Packit Service d3d246
    va_start (args1, i);
Packit Service d3d246
    args2 = args1;
Packit Service d3d246
    if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
Packit Service d3d246
      exit (1);
Packit Service d3d246
    va_end (args1); va_end (args2);
Packit Service d3d246
  }
Packit Service d3d246
  int main() {
Packit Service d3d246
    f (0, 42);
Packit Service d3d246
    return 0;
Packit Service d3d246
  }'''
Packit Service d3d246
Packit Service d3d246
# We do this in two steps so if compilation fails already it looks less alarming
Packit Service d3d246
glib_va_val_copy = false
Packit Service d3d246
if cc.compiles(va_list_val_copy_prog, name : 'va_lists can be copied as values')
Packit Service d3d246
  # FIXME: what to do when cross-compiling?
Packit Service d3d246
  if cc.run(va_list_val_copy_prog, name : 'va_lists can be copied as values').returncode() == 0
Packit Service d3d246
    glib_va_val_copy = true
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
if not glib_va_val_copy
Packit Service d3d246
  glib_va_val_copy = false
Packit Service d3d246
  glib_vacopy = glib_vacopy + '\n#define G_VA_COPY_AS_ARRAY 1'
Packit Service d3d246
  glib_conf.set('G_VA_COPY_AS_ARRAY', 1)
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('glib_vacopy', glib_vacopy)
Packit Service d3d246
Packit Service d3d246
# check for flavours of varargs macros
Packit Service d3d246
g_have_iso_c_varargs = cc.compiles('''
Packit Service d3d246
  void some_func (void) {
Packit Service d3d246
    int a(int p1, int p2, int p3);
Packit Service d3d246
    #define call_a(...) a(1,__VA_ARGS__)
Packit Service d3d246
    call_a(2,3);
Packit Service d3d246
  }''', name : 'ISO C99 varargs macros in C')
Packit Service d3d246
Packit Service d3d246
if g_have_iso_c_varargs
Packit Service d3d246
  glibconfig_conf.set('g_have_iso_c_varargs', '''
Packit Service d3d246
#ifndef __cplusplus
Packit Service d3d246
# define G_HAVE_ISO_VARARGS 1
Packit Service d3d246
#endif''')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
g_have_iso_cxx_varargs = cxx.compiles('''
Packit Service d3d246
  void some_func (void) {
Packit Service d3d246
    int a(int p1, int p2, int p3);
Packit Service d3d246
    #define call_a(...) a(1,__VA_ARGS__)
Packit Service d3d246
    call_a(2,3);
Packit Service d3d246
  }''', name : 'ISO C99 varargs macros in C++')
Packit Service d3d246
Packit Service d3d246
if g_have_iso_cxx_varargs
Packit Service d3d246
  glibconfig_conf.set('g_have_iso_cxx_varargs', '''
Packit Service d3d246
#ifdef __cplusplus
Packit Service d3d246
# define G_HAVE_ISO_VARARGS 1
Packit Service d3d246
#endif''')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
g_have_gnuc_varargs = cc.compiles('''
Packit Service d3d246
  void some_func (void) {
Packit Service d3d246
    int a(int p1, int p2, int p3);
Packit Service d3d246
    #define call_a(params...) a(1,params)
Packit Service d3d246
    call_a(2,3);
Packit Service d3d246
  }''', name : 'GNUC varargs macros')
Packit Service d3d246
Packit Service d3d246
if cc.has_header('alloca.h')
Packit Service d3d246
  glibconfig_conf.set('GLIB_HAVE_ALLOCA_H', true)
Packit Service d3d246
endif
Packit Service d3d246
has_syspoll = cc.has_header('sys/poll.h')
Packit Service d3d246
has_systypes = cc.has_header('sys/types.h')
Packit Service d3d246
if has_syspoll
Packit Service d3d246
  glibconfig_conf.set('GLIB_HAVE_SYS_POLL_H', true)
Packit Service d3d246
endif
Packit Service d3d246
has_winsock2 = cc.has_header('winsock2.h')
Packit Service d3d246
Packit Service d3d246
if has_syspoll and has_systypes
Packit Service d3d246
  templ = '''#include<sys/poll.h>
Packit Service d3d246
#include<sys/types.h>
Packit Service d3d246
#include<stdio.h>
Packit Service d3d246
int main(int argc, char **argv) {
Packit Service d3d246
  printf("%d\n", (int)@0@);
Packit Service d3d246
  return 0;
Packit Service d3d246
}'''
Packit Service d3d246
elif has_winsock2
Packit Service d3d246
  templ = '''#define _WIN32_WINNT 0x0600
Packit Service d3d246
#include <stdio.h>
Packit Service d3d246
#include <winsock2.h>
Packit Service d3d246
int main(int argc, char **argv) {
Packit Service d3d246
  printf("%d\n", (int)@0@);
Packit Service d3d246
  return 0;
Packit Service d3d246
}'''
Packit Service d3d246
else
Packit Service d3d246
  # FIXME?
Packit Service d3d246
  error('FIX POLL* defines')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
value_POLLIN = cc.run(templ.format('POLLIN'), name : 'POLLIN value').stdout().strip()
Packit Service d3d246
value_POLLOUT = cc.run(templ.format('POLLOUT'), name : 'POLLOUT value').stdout().strip()
Packit Service d3d246
value_POLLPRI = cc.run(templ.format('POLLPRI'), name : 'POLLPRI value').stdout().strip()
Packit Service d3d246
value_POLLERR = cc.run(templ.format('POLLERR'), name : 'POLLERR value').stdout().strip()
Packit Service d3d246
value_POLLHUP = cc.run(templ.format('POLLHUP'), name : 'POLLHUP value').stdout().strip()
Packit Service d3d246
value_POLLNVAL = cc.run(templ.format('POLLNVAL'), name : 'POLLNVAL value').stdout().strip()
Packit Service d3d246
Packit Service d3d246
glibconfig_conf.set('g_pollin', value_POLLIN)
Packit Service d3d246
glibconfig_conf.set('g_pollout', value_POLLOUT)
Packit Service d3d246
glibconfig_conf.set('g_pollpri', value_POLLPRI)
Packit Service d3d246
glibconfig_conf.set('g_pollerr', value_POLLERR)
Packit Service d3d246
glibconfig_conf.set('g_pollhup', value_POLLHUP)
Packit Service d3d246
glibconfig_conf.set('g_pollnval', value_POLLNVAL)
Packit Service d3d246
Packit Service d3d246
# Internet address families
Packit Service d3d246
# FIXME: what about Cygwin (G_WITH_CYGWIN)
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  glib_inet_includes= '''
Packit Service d3d246
#include <winsock2.h>
Packit Service d3d246
'''
Packit Service d3d246
else
Packit Service d3d246
  glib_inet_includes='''
Packit Service d3d246
#include <sys/types.h>
Packit Service d3d246
#include <sys/socket.h>
Packit Service d3d246
'''
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
net_defines = [
Packit Service d3d246
  [ 'AF_UNIX', 'g_af_unix' ],
Packit Service d3d246
  [ 'AF_INET', 'g_af_inet' ],
Packit Service d3d246
  [ 'AF_INET6', 'g_af_inet6' ],
Packit Service d3d246
  [ 'MSG_OOB', 'g_msg_oob' ],
Packit Service d3d246
  [ 'MSG_PEEK', 'g_msg_peek' ],
Packit Service d3d246
  [ 'MSG_DONTROUTE', 'g_msg_dontroute' ],
Packit Service d3d246
]
Packit Service d3d246
foreach d : net_defines
Packit Service d3d246
  templ = '''@0@
Packit Service d3d246
#include <stdio.h>
Packit Service d3d246
int main(int argc, char **argv) {
Packit Service d3d246
  printf("%d\n", (int)@1@);
Packit Service d3d246
  return 0;
Packit Service d3d246
}'''
Packit Service d3d246
  # FIXME: fix for cross-compilation
Packit Service d3d246
  if not meson.has_exe_wrapper()
Packit Service d3d246
    error('Fix sys define detection for cross build')
Packit Service d3d246
  endif
Packit Service d3d246
  val = cc.run(templ.format(glib_inet_includes, d[0]), name : d[0] + ' value').stdout().strip()
Packit Service d3d246
  glibconfig_conf.set(d[1], val)
Packit Service d3d246
endforeach
Packit Service d3d246
Packit Service d3d246
glibconfig_conf.set('GLIB_USING_SYSTEM_PRINTF', true) # FIXME!
Packit Service d3d246
Packit Service d3d246
# We need a more robust approach here...
Packit Service d3d246
host_cpu_family = host_machine.cpu_family()
Packit Service d3d246
if host_cpu_family == 'x86' or host_cpu_family == 'x86_64' or host_cpu_family == 's390' or host_cpu_family == 's390x' or host_cpu_family.startswith('arm') or host_cpu_family.startswith('crisv32') or host_cpu_family.startswith('etrax')
Packit Service d3d246
  glib_memory_barrier_needed = false
Packit Service d3d246
elif host_cpu_family.startswith('sparc') or host_cpu_family.startswith('alpha') or host_cpu_family.startswith('powerpc') or host_cpu_family == 'ia64'
Packit Service d3d246
  glib_memory_barrier_needed = true
Packit Service d3d246
else
Packit Service d3d246
  warning('Unknown host cpu: ' + host_cpu_family)
Packit Service d3d246
  glib_memory_barrier_needed = true
Packit Service d3d246
endif
Packit Service d3d246
glibconfig_conf.set('G_ATOMIC_OP_MEMORY_BARRIER_NEEDED', glib_memory_barrier_needed)
Packit Service d3d246
Packit Service d3d246
# Note that the atomic ops are only available with GCC on x86 when
Packit Service d3d246
# using -march=i486 or higher.  If we detect that the atomic ops are
Packit Service d3d246
# not available but would be available given the right flags, we want
Packit Service d3d246
# to abort and advise the user to fix their CFLAGS.  It's better to do
Packit Service d3d246
# that then to silently fall back on emulated atomic ops just because
Packit Service d3d246
# the user had the wrong build environment.
Packit Service d3d246
atomictest = '''void func() {
Packit Service d3d246
  volatile int atomic = 2;
Packit Service d3d246
  __sync_bool_compare_and_swap (&atomic, 2, 3);
Packit Service d3d246
}
Packit Service d3d246
'''
Packit Service d3d246
if cc.compiles(atomictest)
Packit Service d3d246
  glibconfig_conf.set('G_ATOMIC_LOCK_FREE', true)
Packit Service d3d246
else
Packit Service d3d246
  if host_machine.cpu_family() == 'x86' and cc.compiles(atomictest, args : '-march=i486')
Packit Service d3d246
    error('GLib must be built with -march=i486 or later.')
Packit Service d3d246
  endif
Packit Service d3d246
  glibconfig_conf.set('G_ATOMIC_LOCK_FREE', false)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# === Threads ===
Packit Service d3d246
Packit Service d3d246
# Let meson figure out all this business and whether -pthread or whatnot is needed
Packit Service d3d246
# FIXME: probably needs more tweaking in meson for things like -D_REENTRANT etc.
Packit Service d3d246
thread_dep = dependency('threads')
Packit Service d3d246
Packit Service d3d246
# Determination of thread implementation
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  glibconfig_conf.set('g_threads_impl_def', 'WIN32')
Packit Service d3d246
  glib_conf.set('THREADS_WIN32', 1)
Packit Service d3d246
else
Packit Service d3d246
  pthread_prefix = '''
Packit Service d3d246
      #ifndef _GNU_SOURCE
Packit Service d3d246
      # define _GNU_SOURCE
Packit Service d3d246
      #endif
Packit Service d3d246
      #include <pthread.h>'''
Packit Service d3d246
  glibconfig_conf.set('g_threads_impl_def', 'POSIX')
Packit Service d3d246
  glib_conf.set('THREADS_POSIX', 1)
Packit Service d3d246
  if cc.has_header_symbol('pthread.h', 'pthread_attr_setstacksize')
Packit Service d3d246
    glib_conf.set('HAVE_PTHREAD_ATTR_SETSTACKSIZE', 1)
Packit Service d3d246
  endif
Packit Service d3d246
  if cc.has_header_symbol('pthread.h', 'pthread_condattr_setclock')
Packit Service d3d246
    glib_conf.set('HAVE_PTHREAD_CONDATTR_SETCLOCK', 1)
Packit Service d3d246
  endif
Packit Service d3d246
  if cc.has_header_symbol('pthread.h', 'pthread_cond_timedwait_relative_np')
Packit Service d3d246
    glib_conf.set('HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP', 1)
Packit Service d3d246
  endif
Packit Service d3d246
  if cc.has_header_symbol('pthread.h', 'pthread_getname_np', prefix : pthread_prefix)
Packit Service d3d246
    glib_conf.set('HAVE_PTHREAD_GETNAME_NP', 1)
Packit Service d3d246
  endif
Packit Service d3d246
  # Assume that pthread_setname_np is available in some form; same as configure
Packit Service d3d246
  if cc.links(pthread_prefix + '''
Packit Service d3d246
              int main() {
Packit Service d3d246
                pthread_setname_np("example");
Packit Service d3d246
              }''',
Packit Service d3d246
              name : 'pthread_setname_np(const char*)',
Packit Service d3d246
              dependencies : thread_dep)
Packit Service d3d246
    # macOS and iOS
Packit Service d3d246
    glib_conf.set('HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID', 1)
Packit Service d3d246
  elif cc.links(pthread_prefix + '''
Packit Service d3d246
                int main() {
Packit Service d3d246
                  pthread_setname_np(pthread_self(), "example");
Packit Service d3d246
                }''',
Packit Service d3d246
                name : 'pthread_setname_np(pthread_t, const char*)',
Packit Service d3d246
                dependencies : thread_dep)
Packit Service d3d246
    # Linux, Solaris, etc.
Packit Service d3d246
    glib_conf.set('HAVE_PTHREAD_SETNAME_NP_WITH_TID', 1)
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# FIXME: how to do this when cross-compiling?
Packit Service d3d246
# FIXME: we should make it print the result and always return 0, so that
Packit Service d3d246
# the output in meson shows up as green
Packit Service d3d246
stack_grows_check_prog = '''
Packit Service d3d246
  volatile int *a = 0, *b = 0;
Packit Service d3d246
  void f (int i) {
Packit Service d3d246
    volatile int x = 5;
Packit Service d3d246
    if (i == 0)
Packit Service d3d246
      b = &x;
Packit Service d3d246
    else
Packit Service d3d246
      f (i - 1);
Packit Service d3d246
  }
Packit Service d3d246
  int main () {
Packit Service d3d246
    volatile int y = 7;
Packit Service d3d246
    a = &y;
Packit Service d3d246
    f (100);
Packit Service d3d246
    return b > a ? 0 : 1;
Packit Service d3d246
  }'''
Packit Service d3d246
stack_grows_run_result = cc.run(stack_grows_check_prog, name : 'stack grows check')
Packit Service d3d246
if stack_grows_run_result.compiled() and stack_grows_run_result.returncode() == 0
Packit Service d3d246
  glibconfig_conf.set('G_HAVE_GROWING_STACK', 1)
Packit Service d3d246
else
Packit Service d3d246
  glibconfig_conf.set('G_HAVE_GROWING_STACK', 0)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Tests for iconv
Packit Service d3d246
#
Packit Service d3d246
# USE_LIBICONV_GNU: Using GNU libiconv
Packit Service d3d246
# USE_LIBICONV_NATIVE: Using a native impl of iconv in a separate library
Packit Service d3d246
#
Packit Service d3d246
# We should never use the MinGW C library's iconv. On Windows we use the
Packit Service d3d246
# GNU implementation that ships with MinGW.
Packit Service d3d246
Packit Service d3d246
# On Windows, just always use the built-in implementation
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  libiconv = []
Packit Service d3d246
  glib_conf.set('USE_LIBICONV_NATIVE', true)
Packit Service d3d246
else
Packit Service d3d246
  found_iconv = false
Packit Service d3d246
  iconv_opt = get_option('iconv')
Packit Service d3d246
  if iconv_opt == 'libc'
Packit Service d3d246
    if cc.has_function('iconv_open')
Packit Service d3d246
      libiconv = []
Packit Service d3d246
      found_iconv = true
Packit Service d3d246
    endif
Packit Service d3d246
  elif iconv_opt == 'gnu'
Packit Service d3d246
    if cc.has_header_symbol('iconv.h', 'libiconv_open')
Packit Service d3d246
      glib_conf.set('USE_LIBICONV_GNU', true)
Packit Service d3d246
      libiconv = [cc.find_library('iconv')]
Packit Service d3d246
      found_iconv = true
Packit Service d3d246
    endif
Packit Service d3d246
  elif iconv_opt == 'native'
Packit Service d3d246
    if cc.has_header_symbol('iconv.h', 'iconv_open')
Packit Service d3d246
      glib_conf.set('USE_LIBICONV_NATIVE', true)
Packit Service d3d246
      libiconv = [cc.find_library('iconv')]
Packit Service d3d246
      found_iconv = true
Packit Service d3d246
    endif
Packit Service d3d246
  endif
Packit Service d3d246
Packit Service d3d246
  if not found_iconv
Packit Service d3d246
    error('No iconv() implementation found in C library or libiconv')
Packit Service d3d246
  endif
Packit Service d3d246
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if get_option('internal_pcre')
Packit Service d3d246
  pcre = []
Packit Service d3d246
  use_system_pcre = false
Packit Service d3d246
else
Packit Service d3d246
  pcre = dependency('libpcre', required : false) # Should check for Unicode support, too. FIXME
Packit Service d3d246
  if not pcre.found()
Packit Service d3d246
    if cc.get_id() == 'msvc'
Packit Service d3d246
    # MSVC: Search for the PCRE library by the configuration, which corresponds
Packit Service d3d246
    # to the output of CMake builds of PCRE.  Note that debugoptimized
Packit Service d3d246
    # is really a Release build with .PDB files.
Packit Service d3d246
      if buildtype == 'debug'
Packit Service d3d246
        pcre = cc.find_library('pcred', required : false)
Packit Service d3d246
      else
Packit Service d3d246
        pcre = cc.find_library('pcre', required : false)
Packit Service d3d246
      endif
Packit Service d3d246
    endif
Packit Service d3d246
  endif
Packit Service d3d246
  use_system_pcre = pcre.found()
Packit Service d3d246
endif
Packit Service d3d246
glib_conf.set('USE_SYSTEM_PCRE', use_system_pcre)
Packit Service d3d246
Packit Service d3d246
use_pcre_static_flag = false
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  if not use_system_pcre
Packit Service d3d246
    use_pcre_static_flag = true
Packit Service d3d246
  else
Packit Service d3d246
    pcre_static = cc.links('''#define PCRE_STATIC
Packit Service d3d246
                              #include <pcre.h>
Packit Service d3d246
                              int main() {
Packit Service d3d246
                                void *p = NULL;
Packit Service d3d246
                                pcre_free(p);
Packit Service d3d246
                                return 0;
Packit Service d3d246
                              }''',
Packit Service d3d246
                           dependencies: pcre,
Packit Service d3d246
                           name : 'Windows system PCRE is a static build')
Packit Service d3d246
    if pcre_static
Packit Service d3d246
      use_pcre_static_flag = true
Packit Service d3d246
    endif
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
libm = cc.find_library('m', required : false)
Packit Service d3d246
libffi_dep = dependency('libffi', version : '>= 3.0.0', fallback : ['libffi', 'ffi_dep'])
Packit Service d3d246
zlib_libname = '-lz'
Packit Service d3d246
if cc.get_id() != 'msvc'
Packit Service d3d246
  libz_dep = dependency('zlib', fallback : ['zlib', 'zlib_dep'])
Packit Service d3d246
else
Packit Service d3d246
  # MSVC: Don't use the bundled ZLib sources until we are sure that we can't
Packit Service d3d246
  # find the ZLib .lib
Packit Service d3d246
  libz_dep = dependency('zlib', required : false)
Packit Service d3d246
Packit Service d3d246
  # MSVC: Search for the ZLib .lib, which corresponds to the results of
Packit Service d3d246
  # of using ZLib's win32/makefile.msc.
Packit Service d3d246
  if not libz_dep.found()
Packit Service d3d246
    libz_dep = cc.find_library('zlib1', required : false)
Packit Service d3d246
    if libz_dep.found()
Packit Service d3d246
      zlib_libname = '-lzlib1'
Packit Service d3d246
    else
Packit Service d3d246
      libz_dep = cc.find_library('zlib', required : false)
Packit Service d3d246
      if libz_dep.found()
Packit Service d3d246
        zlib_libname = '-lzlib'
Packit Service d3d246
      else
Packit Service d3d246
        libz_dep = subproject('zlib').get_variable('zlib_dep')
Packit Service d3d246
      endif
Packit Service d3d246
    endif
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# Only used on non-glibc targets
Packit Service d3d246
libintl = cc.find_library('intl', required : false)
Packit Service d3d246
if host_system == 'windows' and not libintl.found()
Packit Service d3d246
  # Used only when the gettext library is not available (MSVC, not MinGW)
Packit Service d3d246
  libintl = subproject('proxy-libintl').get_variable('intl_dep')
Packit Service d3d246
  glib_conf.set('HAVE_DCGETTEXT', 1)
Packit Service d3d246
else
Packit Service d3d246
  glib_conf.set('HAVE_DCGETTEXT', cc.has_header_symbol('libintl.h', 'dcgettext'))
Packit Service d3d246
endif
Packit Service d3d246
# We require gettext to always be present
Packit Service d3d246
glib_conf.set('HAVE_GETTEXT', 1)
Packit Service d3d246
glib_conf.set_quoted('GLIB_LOCALE_DIR', join_paths(glib_datadir, 'locale'))
Packit Service d3d246
# xgettext is optional (on Windows for instance)
Packit Service d3d246
xgettext = find_program('xgettext', required : false)
Packit Service d3d246
Packit Service d3d246
# libmount is only used by gio, but we need to fetch the libs to generate the
Packit Service d3d246
# pkg-config file below
Packit Service d3d246
libmount_dep = []
Packit Service d3d246
if host_system == 'linux' and get_option('libmount')
Packit Service d3d246
  libmount_dep = [dependency('mount', version : '>=2.23', required : true)]
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  winsock2 = cc.find_library('ws2_32')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
selinux_dep = []
Packit Service d3d246
if host_system == 'linux' and get_option('selinux')
Packit Service d3d246
  selinux_dep = [dependency('libselinux')]
Packit Service d3d246
  glib_conf.set('SELINUX_LIBS', '-lselinux')
Packit Service d3d246
  glib_conf.set('HAVE_SELINUX', 1)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
xattr_dep = []
Packit Service d3d246
if host_system != 'windows' and get_option('xattr')
Packit Service d3d246
  # either glibc or libattr can provide xattr support
Packit Service d3d246
  # for both of them, we check for getxattr being in
Packit Service d3d246
  # the library and a valid xattr header.
Packit Service d3d246
Packit Service d3d246
  # try glibc
Packit Service d3d246
  if cc.has_function('getxattr') and cc.has_header('sys/xattr.h')
Packit Service d3d246
    glib_conf.set('HAVE_SYS_XATTR_H', 1)
Packit Service d3d246
    glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format('HAVE_SYS_XATTR_H')
Packit Service d3d246
  #failure. try libattr
Packit Service d3d246
  elif cc.has_header_symbol('attr/xattr.h', 'getxattr')
Packit Service d3d246
    glib_conf.set('HAVE_ATTR_XATTR_H', 1)
Packit Service d3d246
    glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format('HAVE_ATTR_XATTR_H')
Packit Service d3d246
    xattr_dep = [cc.find_library('xattr')]
Packit Service d3d246
  else
Packit Service d3d246
    error('No getxattr implementation found in C library or libxattr')
Packit Service d3d246
  endif
Packit Service d3d246
Packit Service d3d246
  glib_conf.set('HAVE_XATTR', 1)
Packit Service d3d246
  if cc.compiles(glib_conf_prefix + '''
Packit Service d3d246
                 #include <stdio.h>
Packit Service d3d246
                 #ifdef HAVE_SYS_TYPES_H
Packit Service d3d246
                 #include <sys/types.h>
Packit Service d3d246
                 #endif
Packit Service d3d246
                 #ifdef HAVE_SYS_XATTR_H
Packit Service d3d246
                 #include <sys/xattr.h>
Packit Service d3d246
                 #elif HAVE_ATTR_XATTR_H
Packit Service d3d246
                 #include <attr/xattr.h>
Packit Service d3d246
                 #endif
Packit Service d3d246
Packit Service d3d246
                 int main (void) {
Packit Service d3d246
                   ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);
Packit Service d3d246
                 }''',
Packit Service d3d246
                 name : 'XATTR_NOFOLLOW')
Packit Service d3d246
    glib_conf.set('HAVE_XATTR_NOFOLLOW', 1)
Packit Service d3d246
  endif
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
python = import('python3').find_python()
Packit Service d3d246
Packit Service d3d246
# Determine which user environment-dependent files that we want to install
Packit Service d3d246
have_bash = find_program('bash', required : false).found() # For completion scripts
Packit Service d3d246
have_m4 = find_program('m4', required : false).found() # For m4 macros
Packit Service d3d246
have_sh = find_program('sh', required : false).found() # For glib-gettextize
Packit Service d3d246
Packit Service d3d246
# FIXME: defines in config.h that are not actually used anywhere
Packit Service d3d246
# (we add them for now to minimise the diff)
Packit Service d3d246
glib_conf.set('HAVE_DLFCN_H', 1)
Packit Service d3d246
glib_conf.set('__EXTENSIONS__', 1)
Packit Service d3d246
glib_conf.set('STDC_HEADERS', 1)
Packit Service d3d246
# THREADS_NONE
Packit Service d3d246
glib_conf.set('SIZEOF___INT64', 8)
Packit Service d3d246
Packit Service d3d246
# Various substs needed for our pkg-config files
Packit Service d3d246
# FIXME: Derive these from the dependency() objects (Meson support needed)
Packit Service d3d246
glib_conf.set('ZLIB_LIBS', zlib_libname)
Packit Service d3d246
glib_conf.set('LIBFFI_LIBS', '-lffi')
Packit Service d3d246
if libintl.found()
Packit Service d3d246
  glib_conf.set('INTLLIBS', '-lintl')
Packit Service d3d246
endif
Packit Service d3d246
if libiconv.length() != 0
Packit Service d3d246
  glib_conf.set('ICONV_LIBS', '-liconv')
Packit Service d3d246
endif
Packit Service d3d246
if use_system_pcre
Packit Service d3d246
  glib_conf.set('PCRE_LIBS', '-lpcre')
Packit Service d3d246
endif
Packit Service d3d246
if libmount_dep.length() != 0
Packit Service d3d246
  glib_conf.set('LIBMOUNT_LIBS', '-lmount')
Packit Service d3d246
  glib_conf.set('HAVE_LIBMOUNT', 1)
Packit Service d3d246
endif
Packit Service d3d246
glib_conf.set('GIO_MODULE_DIR', glib_giomodulesdir)
Packit Service d3d246
# FIXME: Missing:
Packit Service d3d246
# @G_MODULE_LIBS@ @COCOA_LIBS@ @CARBON_LIBS@ @G_LIBS_EXTRA@
Packit Service d3d246
# @PCRE_REQUIRES@ @GLIB_EXTRA_CFLAGS@ @G_THREAD_CFLAGS@
Packit Service d3d246
Packit Service d3d246
# Tracing: dtrace
Packit Service d3d246
want_dtrace = get_option('dtrace')
Packit Service d3d246
enable_dtrace = false
Packit Service d3d246
Packit Service d3d246
# Since dtrace support is opt-in we just error out if it was requested but
Packit Service d3d246
# is not available. We don't bother with autodetection yet.
Packit Service d3d246
if want_dtrace
Packit Service d3d246
  if glib_have_carbon
Packit Service d3d246
    error('GLib dtrace support not yet compatible with macOS dtrace')
Packit Service d3d246
  endif
Packit Service d3d246
  dtrace = find_program('dtrace', required : true) # error out if not found
Packit Service d3d246
  if not cc.has_header('sys/sdt.h')
Packit Service d3d246
    error('dtrace support needs sys/sdt.h header')
Packit Service d3d246
  endif
Packit Service d3d246
  # FIXME: autotools build also passes -fPIC -DPIC but is it needed in this case?
Packit Service d3d246
  dtrace_obj_gen = generator(dtrace,
Packit Service d3d246
    output : '@BASENAME@.o',
Packit Service d3d246
    arguments : ['-G', '-s', '@INPUT@', '-o', '@OUTPUT@'])
Packit Service d3d246
  # FIXME: $(SED) -e "s,define STAP_HAS_SEMAPHORES 1,undef STAP_HAS_SEMAPHORES,"
Packit Service d3d246
  #               -e "s,define _SDT_HAS_SEMAPHORES 1,undef _SDT_HAS_SEMAPHORES,"
Packit Service d3d246
  dtrace_hdr_gen = generator(dtrace,
Packit Service d3d246
    output : '@BASENAME@.h',
Packit Service d3d246
    arguments : ['-h', '-s', '@INPUT@', '-o', '@OUTPUT@'])
Packit Service d3d246
  glib_conf.set('HAVE_DTRACE', 1)
Packit Service d3d246
  enable_dtrace = true
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
# systemtap
Packit Service d3d246
want_systemtap = get_option('systemtap')
Packit Service d3d246
enable_systemtap = false
Packit Service d3d246
Packit Service d3d246
if want_systemtap and enable_dtrace
Packit Service d3d246
  tapset_install_dir = get_option('tapset_install_dir')
Packit Service d3d246
  if tapset_install_dir == ''
Packit Service d3d246
    tapset_install_dir = join_paths(get_option('datadir'), 'systemtap/tapset', host_machine.cpu_family())
Packit Service d3d246
  endif
Packit Service d3d246
  stp_cdata = configuration_data()
Packit Service d3d246
  stp_cdata.set('ABS_GLIB_RUNTIME_LIBDIR', glib_libdir)
Packit Service d3d246
  stp_cdata.set('LT_CURRENT', minor_version * 100)
Packit Service d3d246
  stp_cdata.set('LT_REVISION', micro_version)
Packit Service d3d246
  enable_systemtap = true
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
windows = import('windows')
Packit Service d3d246
subdir('glib')
Packit Service d3d246
subdir('gobject')
Packit Service d3d246
subdir('gthread')
Packit Service d3d246
subdir('gmodule')
Packit Service d3d246
subdir('gio')
Packit Service d3d246
if xgettext.found()
Packit Service d3d246
  subdir('po')
Packit Service d3d246
endif
Packit Service d3d246
subdir('tests')
Packit Service d3d246
Packit Service d3d246
# Configure and install pkg-config files
Packit Service d3d246
pc_files = [
Packit Service d3d246
  'gobject-2.0.pc',
Packit Service d3d246
  'glib-2.0.pc',
Packit Service d3d246
  'gthread-2.0.pc',
Packit Service d3d246
  'gmodule-2.0.pc',
Packit Service d3d246
  'gmodule-export-2.0.pc',
Packit Service d3d246
  'gmodule-no-export-2.0.pc',
Packit Service d3d246
  'gio-2.0.pc',
Packit Service d3d246
]
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  pc_files += ['gio-windows-2.0.pc']
Packit Service d3d246
else
Packit Service d3d246
  pc_files += ['gio-unix-2.0.pc']
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
foreach pc : pc_files
Packit Service d3d246
  configure_file(input : pc + '.in',
Packit Service d3d246
    install : true,
Packit Service d3d246
    install_dir : glib_pkgconfigreldir,
Packit Service d3d246
    output : pc,
Packit Service d3d246
    configuration : glib_conf)
Packit Service d3d246
endforeach
Packit Service d3d246
Packit Service d3d246
# NOTE: We skip glib-zip.in because the filenames it assumes don't match ours
Packit Service d3d246
Packit Service d3d246
# Install glib-gettextize executable, if a UNIX-style shell is found
Packit Service d3d246
if have_sh
Packit Service d3d246
  configure_file(input : 'glib-gettextize.in',
Packit Service d3d246
    install : true,
Packit Service d3d246
    install_dir : 'bin',
Packit Service d3d246
    output : 'glib-gettextize',
Packit Service d3d246
    configuration : glib_conf)
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if have_m4
Packit Service d3d246
  # Install m4 macros that other projects use
Packit Service d3d246
  install_data('m4macros/glib-2.0.m4', 'm4macros/glib-gettext.m4', 'm4macros/gsettings.m4',
Packit Service d3d246
    install_dir : join_paths(get_option('datadir'), 'aclocal'))
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if host_system != 'windows'
Packit Service d3d246
  # Install Valgrind suppression file (except on Windows,
Packit Service d3d246
  # as Valgrind is currently not supported on Windows)
Packit Service d3d246
  install_data('glib.supp',
Packit Service d3d246
    install_dir : join_paths(get_option('datadir'), 'glib-2.0', 'valgrind'))
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
configure_file(input : 'config.h.meson',
Packit Service d3d246
  output : 'config.h',
Packit Service d3d246
  configuration : glib_conf)
Packit Service d3d246
Packit Service d3d246
if host_system == 'windows'
Packit Service d3d246
  install_headers([ 'msvc_recommended_pragmas.h' ], subdir : 'glib-2.0')
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
if get_option('man')
Packit Service d3d246
  xsltproc = find_program('xsltproc', required : true)
Packit Service d3d246
  xsltproc_command = [
Packit Service d3d246
    xsltproc,
Packit Service d3d246
    '--nonet',
Packit Service d3d246
    '--stringparam', 'man.output.quietly', '1',
Packit Service d3d246
    '--stringparam', 'funcsynopsis.style', 'ansi',
Packit Service d3d246
    '--stringparam', 'man.th.extra1.suppress', '1',
Packit Service d3d246
    '--stringparam', 'man.authors.section.enabled', '0',
Packit Service d3d246
    '--stringparam', 'man.copyright.section.enabled', '0',
Packit Service d3d246
    '-o', '@OUTPUT@',
Packit Service d3d246
    'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
Packit Service d3d246
    '@INPUT@',
Packit Service d3d246
  ]
Packit Service d3d246
  man1_dir = get_option('mandir') + '/man1'
Packit Service d3d246
endif
Packit Service d3d246
Packit Service d3d246
gnome = import('gnome')
Packit Service d3d246
subdir('docs/reference/glib')
Packit Service d3d246
subdir('docs/reference/gobject')
Packit Service d3d246
subdir('docs/reference/gio')