1 glibconfig_h = configure_file(input : 'glibconfig.h.in', output : 'glibconfig.h',
2 install_dir : join_paths(get_option('libdir'), 'glib-2.0/include'),
4 configuration : glibconfig_conf)
8 # libsysprof-capture support
9 libsysprof_capture_dep = dependency('sysprof-capture-4', version: '>= 3.38.0',
10 required: get_option('sysprof'),
20 fallback: ['sysprof', 'libsysprof_capture_dep'],
22 glib_conf.set('HAVE_SYSPROF', libsysprof_capture_dep.found())
26 gnulib_libm_dependency = []
27 glib_conf.set ('gl_unused', '')
28 glib_conf.set ('gl_extern_inline', '')
30 subdir ('gnulib/gl_extern_inline')
31 subdir ('gnulib/gl_cv_long_double_equals_double')
32 subdir ('gnulib/gl_cv_cc_double_expbit0')
33 subdir ('gnulib/gl_cv_func_printf_precision')
34 subdir ('gnulib/gl_cv_func_printf_enomem')
35 subdir ('gnulib/gl_cv_func_printf_flag_zero')
36 subdir ('gnulib/gl_cv_func_printf_flag_leftadjust')
37 subdir ('gnulib/gl_cv_func_printf_flag_grouping')
38 subdir ('gnulib/gl_cv_func_printf_directive_a')
39 subdir ('gnulib/gl_cv_func_printf_directive_f')
40 subdir ('gnulib/gl_cv_func_printf_directive_ls')
41 subdir ('gnulib/gl_cv_func_printf_long_double')
42 subdir ('gnulib/gl_cv_func_printf_infinite')
43 subdir ('gnulib/gl_cv_func_printf_infinite_long_double')
46 /* Define as a marker that can be attached to declarations that might not
47 be used. This helps to reduce warnings, such as from
48 GCC -Wunused-parameter. */
49 #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
50 # define _GL_UNUSED __attribute__ ((__unused__))
55 glib_conf.set ('gl_unused', gl_unused)
56 glib_conf.set ('gl_extern_inline', gl_extern_inline)
58 if (gl_cv_long_double_equals_double)
59 glib_conf.set ('HAVE_SAME_LONG_DOUBLE_AS_DOUBLE', 1)
62 if (gl_cv_cc_double_expbit0_word >= 0 and
63 gl_cv_cc_double_expbit0_bit >= 0)
64 glib_conf.set('DBL_EXPBIT0_WORD', gl_cv_cc_double_expbit0_word)
65 glib_conf.set('DBL_EXPBIT0_BIT', gl_cv_cc_double_expbit0_bit)
68 if not gl_cv_func_printf_precision
69 glib_conf.set('NEED_PRINTF_UNBOUNDED_PRECISION', 1)
72 if not gl_cv_func_printf_enomem
73 glib_conf.set('NEED_PRINTF_ENOMEM', 1)
76 if not gl_cv_func_printf_flag_leftadjust
77 glib_conf.set('NEED_PRINTF_FLAG_LEFTADJUST', 1)
80 if not gl_cv_func_printf_flag_zero
81 glib_conf.set('NEED_PRINTF_FLAG_ZERO', 1)
84 if not gl_cv_func_printf_flag_grouping
85 glib_conf.set('NEED_PRINTF_FLAG_GROUPING', 1)
88 if not gl_cv_func_printf_directive_a
89 glib_conf.set('NEED_PRINTF_DIRECTIVE_A', 1)
92 if not gl_cv_func_printf_directive_f
93 glib_conf.set('NEED_PRINTF_DIRECTIVE_F', 1)
96 if not gl_cv_func_printf_directive_ls
97 glib_conf.set('NEED_PRINTF_DIRECTIVE_LS', 1)
100 if (not gl_cv_func_printf_precision or
101 not gl_cv_func_printf_enomem)
102 glib_conf.set('NEED_PRINTF_DOUBLE', 1)
103 glib_conf.set('NEED_PRINTF_LONG_DOUBLE', 1)
106 if not gl_cv_func_printf_infinite
107 glib_conf.set('NEED_PRINTF_INFINITE_DOUBLE', 1)
110 if gl_cv_func_printf_long_double and gl_cv_func_printf_infinite_long_double
111 glib_conf.set('NEED_PRINTF_INFINITE_LONG_DOUBLE', 1)
117 glib_headers = files(
122 install_headers(glib_headers, subdir : 'glib-2.0')
124 # Expose as variable to be used by gobject-introspection
125 # when it includes GLib as a subproject
126 glib_unix_h = files('glib-unix.h')
128 glib_deprecated_headers = files(
129 'deprecated/gallocator.h',
130 'deprecated/gcache.h',
131 'deprecated/gcompletion.h',
132 'deprecated/gmain.h',
134 'deprecated/gthread.h',
136 install_headers(glib_deprecated_headers, subdir : 'glib-2.0/glib/deprecated')
138 glib_sub_headers = files(
139 'glib-autocleanups.h',
219 install_headers(glib_sub_headers, subdir : 'glib-2.0/glib')
221 deprecated_sources = files(
222 'deprecated/gallocator.c',
223 'deprecated/gcache.c',
224 'deprecated/gcompletion.c',
226 'deprecated/gthread-deprecated.c'
229 glib_sources = files(
310 'gvariant-serialiser.c',
311 'gvarianttypeinfo.c',
320 if host_system == 'windows'
321 if get_option('default_library') == 'shared'
322 glib_win_rc = configure_file(
325 configuration: glibconfig_conf,
327 glib_win_res = windows.compile_resources(glib_win_rc)
328 glib_sources += [glib_win_res]
330 glib_sources += files('gwin32.c', 'gspawn-win32.c', 'giowin32.c')
331 platform_deps = [winsock2, cc.find_library('winmm')]
332 if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
333 glib_sources += files('dirent/wdirent.c')
336 glib_sources += files('glib-unix.c', 'gspawn.c', 'giounix.c')
340 if host_system == 'linux'
341 glib_sources += files('gjournal-private.c')
345 glib_sources += files('gosxutils.m')
346 framework_dep = dependency('appleframeworks', modules : ['Foundation', 'CoreFoundation', 'AppKit'])
347 platform_deps += [framework_dep]
351 framework_dep = dependency('appleframeworks', modules : 'Carbon')
352 platform_deps += [framework_dep]
355 glib_sources += files('gthread-@0@.c'.format(threads_implementation))
358 glib_dtrace_obj = dtrace_obj_gen.process('glib_probes.d')
359 glib_dtrace_hdr = dtrace_hdr_gen.process('glib_probes.d')
365 pcre2_static_args = []
367 if use_pcre2_static_flag
368 pcre2_static_args = ['-DPCRE2_STATIC']
371 glib_c_args = ['-DG_LOG_DOMAIN="GLib"', '-DGLIB_COMPILATION'] + pcre2_static_args + glib_hidden_visibility_args
372 libglib = library('glib-2.0',
373 glib_dtrace_obj, glib_dtrace_hdr,
374 sources : [deprecated_sources, glib_sources],
375 version : library_version,
376 soversion : soversion,
377 darwin_versions : darwin_versions,
379 # intl.lib is not compatible with SAFESEH
380 link_args : [noseh_link_args, glib_link_flags, win32_ldflags],
381 include_directories : configinc,
382 link_with: [charset_lib, gnulib_lib],
383 dependencies : [pcre2, thread_dep, librt] + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep],
384 c_args : glib_c_args,
385 objc_args : glib_c_args,
388 libglib_dep = declare_dependency(
390 dependencies : libintl_deps,
391 # We sadly need to export configinc here because everyone includes <glib/*.h>
392 include_directories : [configinc, glibinc])
394 pkg.generate(libglib,
395 libraries : [libintl_deps],
396 libraries_private : [win32_ldflags],
397 subdirs : ['glib-2.0'],
398 extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,
399 variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
400 'glib_genmarshal=' + join_paths('${bindir}', 'glib-genmarshal'),
401 'gobject_query=' + join_paths('${bindir}', 'gobject-query'),
402 'glib_mkenums=' + join_paths('${bindir}', 'glib-mkenums')],
403 version : glib_version,
404 install_dir : glib_pkgconfigreldir,
405 filebase : 'glib-2.0',
407 description : 'C Utility Library',
409 meson.override_dependency('glib-2.0', libglib_dep)
411 # On Windows, glib needs a spawn helper for g_spawn* API
412 if host_system == 'windows'
413 if host_machine.cpu_family() == 'x86'
414 executable('gspawn-win32-helper', 'gspawn-win32-helper.c',
416 win_subsystem : 'windows',
417 include_directories : configinc,
418 dependencies : [libglib_dep])
419 executable('gspawn-win32-helper-console', 'gspawn-win32-helper.c',
421 c_args : ['-DHELPER_CONSOLE'],
422 include_directories : configinc,
423 dependencies : [libglib_dep])
425 executable('gspawn-win64-helper', 'gspawn-win32-helper.c',
427 win_subsystem : 'windows',
428 include_directories : configinc,
429 dependencies : [libglib_dep])
430 executable('gspawn-win64-helper-console', 'gspawn-win32-helper.c',
432 c_args : ['-DHELPER_CONSOLE'],
433 include_directories : configinc,
434 dependencies : [libglib_dep])
437 gtester = executable('gtester', 'gtester.c',
439 install_tag : 'bin-devel',
440 c_args : ['-UG_DISABLE_ASSERT'],
441 include_directories : configinc,
442 dependencies : [libglib_dep])
445 report_conf = configuration_data()
446 report_conf.set('GLIB_VERSION', glib_version)
447 report_conf.set('PYTHON', python_name)
449 input: 'gtester-report.in',
450 output: 'gtester-report',
451 install_dir: get_option('bindir'),
452 install_tag : 'bin-devel',
453 configuration: report_conf,
454 install_mode: 'rwxr-xr-x'
457 install_data('glib_gdb.py',
458 install_dir : glib_pkgdatadir / 'gdb',
459 install_tag : 'devel',
462 # This is needed to make gdb find glib_gdb.py
464 env.prepend('PYTHONPATH', meson.current_source_dir())
465 meson.add_devenv(env)
467 gdb_conf = configuration_data()
468 gdb_conf.set('datadir', glib_datadir)
469 # This is also used in gobject/meson.build
470 if host_system != 'windows'
473 # FIXME: Cannot install on Windows because the path will contain a drive
474 # letter and colons are not allowed in paths.
478 # XXX: We add a leading './' because glib_libdir is an absolute path and we
479 # need it to be a relative path so that join_paths appends it to the end.
480 gdb_install_dir = join_paths(glib_datadir, 'gdb', 'auto-load', './' + glib_libdir)
483 input: 'libglib-gdb.py.in',
484 output: 'libglib-2.0.so.@0@-gdb.py'.format(library_version),
485 configuration: gdb_conf,
486 install_dir: gdb_install_dir,
487 install_tag: 'devel',
488 install: gdb_install,
492 glib_stp = configure_file(input : 'glib.stp.in',
493 output : '@0@.stp'.format(libglib.full_path().split('/').get(-1)),
494 configuration : stp_cdata,
495 install_dir : tapset_install_dir,
496 install_tag : 'systemtap',