2 glib_sub_includedir = glib_includedir / 'glib'
4 glibconfig_h = configure_file(input : 'glibconfig.h.in', output : 'glibconfig.h',
5 install_dir : join_paths(get_option('libdir'), 'glib-2.0/include'),
7 configuration : glibconfig_conf)
8 glib_sources += glibconfig_h
10 gversionmacros_h = custom_target(
11 input: 'gversionmacros.h.in',
12 output: 'gversionmacros.h',
13 command: [gen_visibility_macros, meson.project_version(), 'versions-macros', '@INPUT@', '@OUTPUT@'],
15 install_dir: glib_sub_includedir,
16 # FIXME: Not needed with Meson >= 0.64.0
20 glib_visibility_h = custom_target(
21 output: 'glib-visibility.h',
22 command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GLIB', '@OUTPUT@'],
24 install_dir: glib_sub_includedir,
25 # FIXME: Not needed with Meson >= 0.64.0
29 glib_built_headers = [gversionmacros_h, glib_visibility_h]
30 glib_sources += glib_built_headers
31 glib_c_args_internal = [
37 # libsysprof-capture support
38 libsysprof_capture_dep = dependency('sysprof-capture-4', version: '>= 3.38.0',
39 required: get_option('sysprof'),
49 fallback: ['sysprof', 'libsysprof_capture_dep'],
51 glib_conf.set('HAVE_SYSPROF', libsysprof_capture_dep.found())
55 gnulib_libm_dependency = []
56 glib_conf.set ('gl_unused', '')
57 glib_conf.set ('gl_extern_inline', '')
59 subdir ('gnulib/gl_extern_inline')
60 subdir ('gnulib/gl_cv_long_double_equals_double')
61 subdir ('gnulib/gl_cv_cc_double_expbit0')
62 subdir ('gnulib/gl_cv_func_printf_precision')
63 subdir ('gnulib/gl_cv_func_printf_enomem')
64 subdir ('gnulib/gl_cv_func_printf_flag_zero')
65 subdir ('gnulib/gl_cv_func_printf_flag_leftadjust')
66 subdir ('gnulib/gl_cv_func_printf_flag_grouping')
67 subdir ('gnulib/gl_cv_func_printf_directive_a')
68 subdir ('gnulib/gl_cv_func_printf_directive_f')
69 subdir ('gnulib/gl_cv_func_printf_directive_ls')
70 subdir ('gnulib/gl_cv_func_printf_long_double')
71 subdir ('gnulib/gl_cv_func_printf_infinite')
72 subdir ('gnulib/gl_cv_func_printf_infinite_long_double')
75 /* Define as a marker that can be attached to declarations that might not
76 be used. This helps to reduce warnings, such as from
77 GCC -Wunused-parameter. */
78 #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
79 # define _GL_UNUSED __attribute__ ((__unused__))
84 glib_conf.set ('gl_unused', gl_unused)
85 glib_conf.set ('gl_extern_inline', gl_extern_inline)
87 if (gl_cv_long_double_equals_double)
88 glib_conf.set ('HAVE_SAME_LONG_DOUBLE_AS_DOUBLE', 1)
91 if (gl_cv_cc_double_expbit0_word >= 0 and
92 gl_cv_cc_double_expbit0_bit >= 0)
93 glib_conf.set('DBL_EXPBIT0_WORD', gl_cv_cc_double_expbit0_word)
94 glib_conf.set('DBL_EXPBIT0_BIT', gl_cv_cc_double_expbit0_bit)
97 if not gl_cv_func_printf_precision
98 glib_conf.set('NEED_PRINTF_UNBOUNDED_PRECISION', 1)
101 if not gl_cv_func_printf_enomem
102 glib_conf.set('NEED_PRINTF_ENOMEM', 1)
105 if not gl_cv_func_printf_flag_leftadjust
106 glib_conf.set('NEED_PRINTF_FLAG_LEFTADJUST', 1)
109 if not gl_cv_func_printf_flag_zero
110 glib_conf.set('NEED_PRINTF_FLAG_ZERO', 1)
113 if not gl_cv_func_printf_flag_grouping
114 glib_conf.set('NEED_PRINTF_FLAG_GROUPING', 1)
117 if not gl_cv_func_printf_directive_a
118 glib_conf.set('NEED_PRINTF_DIRECTIVE_A', 1)
121 if not gl_cv_func_printf_directive_f
122 glib_conf.set('NEED_PRINTF_DIRECTIVE_F', 1)
125 if not gl_cv_func_printf_directive_ls
126 glib_conf.set('NEED_PRINTF_DIRECTIVE_LS', 1)
129 if (not gl_cv_func_printf_precision or
130 not gl_cv_func_printf_enomem)
131 glib_conf.set('NEED_PRINTF_DOUBLE', 1)
132 glib_conf.set('NEED_PRINTF_LONG_DOUBLE', 1)
135 if not gl_cv_func_printf_infinite
136 glib_conf.set('NEED_PRINTF_INFINITE_DOUBLE', 1)
139 if gl_cv_func_printf_long_double and gl_cv_func_printf_infinite_long_double
140 glib_conf.set('NEED_PRINTF_INFINITE_LONG_DOUBLE', 1)
146 glib_headers = files(
151 install_headers(glib_headers, install_dir : glib_includedir)
153 if host_system == 'windows'
154 install_headers([ 'msvc_recommended_pragmas.h' ], install_dir : glib_includedir)
157 # Expose as variable to be used by gobject-introspection
158 # when it includes GLib as a subproject
159 glib_unix_h = files('glib-unix.h')
161 glib_deprecated_headers = files(
162 'deprecated/gallocator.h',
163 'deprecated/gcache.h',
164 'deprecated/gcompletion.h',
165 'deprecated/gmain.h',
167 'deprecated/gthread.h',
169 install_headers(glib_deprecated_headers,
170 install_dir : glib_sub_includedir / 'deprecated')
172 glib_sub_headers = files(
173 'glib-autocleanups.h',
254 install_headers(glib_sub_headers, install_dir : glib_sub_includedir)
256 deprecated_sources = files(
257 'deprecated/gallocator.c',
258 'deprecated/gcache.c',
259 'deprecated/gcompletion.c',
261 'deprecated/gthread-deprecated.c'
264 glib_sources += files(
346 'gvariant-serialiser.c',
347 'gvarianttypeinfo.c',
356 if host_system == 'windows'
358 glib_win_rc = configure_file(
361 configuration: glibconfig_conf,
363 glib_win_res = windows.compile_resources(glib_win_rc)
364 glib_sources += [glib_win_res]
366 glib_sources += files('gwin32.c', 'gspawn-win32.c', 'giowin32.c')
367 platform_deps = [winsock2, cc.find_library('winmm')]
368 if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
369 glib_sources += files('dirent/wdirent.c')
372 glib_sources += files('glib-unix.c', 'glib-unixprivate.h', 'gspawn.c', 'giounix.c')
376 if host_system == 'linux'
377 glib_sources += files('gjournal-private.c')
381 glib_sources += files('gosxutils.m')
382 framework_dep = dependency('appleframeworks', modules : ['Foundation', 'CoreFoundation', 'AppKit'])
383 platform_deps += [framework_dep]
387 framework_dep = dependency('appleframeworks', modules : 'Carbon')
388 platform_deps += [framework_dep]
391 glib_sources += files('gthread-@0@.c'.format(threads_implementation))
394 glib_dtrace_obj = dtrace_obj_gen.process('glib_probes.d')
395 glib_dtrace_hdr = dtrace_hdr_gen.process('glib_probes.d')
401 pcre2_static_args = []
403 if use_pcre2_static_flag
404 pcre2_static_args = ['-DPCRE2_STATIC']
407 glib_c_args = ['-DG_LOG_DOMAIN="GLib"'] + glib_c_args_internal + pcre2_static_args
408 libglib = library('glib-2.0',
409 glib_dtrace_obj, glib_dtrace_hdr,
410 sources : [deprecated_sources, glib_sources],
411 version : library_version,
412 soversion : soversion,
413 darwin_versions : darwin_versions,
415 # intl.lib is not compatible with SAFESEH
416 link_args : [noseh_link_args, glib_link_flags, win32_ldflags],
417 include_directories : configinc,
418 link_with: [charset_lib, gnulib_lib],
420 gnulib_libm_dependency,
425 libsysprof_capture_dep,
430 c_args : glib_c_args,
431 objc_args : glib_c_args,
432 gnu_symbol_visibility : 'hidden',
435 libglib_dep = declare_dependency(
437 dependencies : libintl_deps,
438 sources : glib_built_headers,
439 # We sadly need to export configinc here because everyone includes <glib/*.h>
440 include_directories : [configinc, glibinc])
442 pkg.generate(libglib,
443 libraries : [libintl_deps],
444 libraries_private : [win32_ldflags],
445 subdirs : ['glib-2.0'],
446 extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,
448 'bindir=' + '${prefix}' / get_option('bindir'),
449 'datadir=' + '${prefix}' / get_option('datadir'),
450 'glib_genmarshal=' + '${bindir}' / 'glib-genmarshal',
451 'gobject_query=' + '${bindir}' / 'gobject-query',
452 'glib_mkenums=' + '${bindir}' / 'glib-mkenums',
453 'glib_valgrind_suppressions=' + '${datadir}' /
454 valgrind_suppression_file_install_subdir /
455 fs.name(valgrind_suppression_file),
457 version : glib_version,
458 install_dir : glib_pkgconfigreldir,
459 filebase : 'glib-2.0',
461 description : 'C Utility Library',
463 meson.override_dependency('glib-2.0', libglib_dep)
465 # On Windows, glib needs a spawn helper for g_spawn* API
466 if host_system == 'windows'
467 if host_machine.cpu_family() == 'x86'
468 executable('gspawn-win32-helper', 'gspawn-win32-helper.c',
470 win_subsystem : 'windows',
471 include_directories : configinc,
472 dependencies : [libglib_dep])
473 executable('gspawn-win32-helper-console', 'gspawn-win32-helper.c',
475 c_args : ['-DHELPER_CONSOLE'],
476 include_directories : configinc,
477 dependencies : [libglib_dep])
479 executable('gspawn-win64-helper', 'gspawn-win32-helper.c',
481 win_subsystem : 'windows',
482 include_directories : configinc,
483 dependencies : [libglib_dep])
484 executable('gspawn-win64-helper-console', 'gspawn-win32-helper.c',
486 c_args : ['-DHELPER_CONSOLE'],
487 include_directories : configinc,
488 dependencies : [libglib_dep])
491 gtester = executable('gtester', 'gtester.c',
493 install_tag : 'bin-devel',
494 c_args : ['-UG_DISABLE_ASSERT'],
495 include_directories : configinc,
496 dependencies : [libglib_dep])
498 # Provide tools for others when we're a subproject and they use the Meson GNOME module
499 meson.override_find_program('gtester', gtester)
502 report_conf = configuration_data()
503 report_conf.set('GLIB_VERSION', glib_version)
504 report_conf.set('PYTHON', python_name)
506 input: 'gtester-report.in',
507 output: 'gtester-report',
508 install_dir: get_option('bindir'),
509 install_tag : 'bin-devel',
510 configuration: report_conf,
511 install_mode: 'rwxr-xr-x'
514 install_data('glib_gdb.py',
515 install_dir : glib_pkgdatadir / 'gdb',
516 install_tag : 'devel',
519 # This is needed to make gdb find glib_gdb.py
521 env.prepend('PYTHONPATH', meson.current_source_dir())
522 meson.add_devenv(env)
524 gdb_conf = configuration_data()
525 gdb_conf.set('datadir', glib_datadir)
526 # This is also used in gobject/meson.build
527 if host_system != 'windows'
530 # FIXME: Cannot install on Windows because the path will contain a drive
531 # letter and colons are not allowed in paths.
535 # XXX: We add a leading './' because glib_libdir is an absolute path and we
536 # need it to be a relative path so that join_paths appends it to the end.
537 gdb_install_dir = join_paths(glib_datadir, 'gdb', 'auto-load', './' + glib_libdir)
540 input: 'libglib-gdb.py.in',
541 output: 'libglib-2.0.so.@0@-gdb.py'.format(library_version),
542 configuration: gdb_conf,
543 install_dir: gdb_install_dir,
544 install_tag: 'devel',
545 install: gdb_install,
549 glib_stp = configure_file(input : 'glib.stp.in',
550 output : '@0@.stp'.format(libglib.full_path().split('/').get(-1)),
551 configuration : stp_cdata,
552 install_dir : tapset_install_dir,
553 install_tag : 'systemtap',