1 glibconfig_h = configure_file(input : 'glibconfig.h.in', output : 'glibconfig.h',
2 install_dir : join_paths(get_option('libdir'), 'glib-2.0/include'),
3 configuration : glibconfig_conf)
7 # libsysprof-capture support
8 libsysprof_capture_dep = dependency('sysprof-capture-4', version: '>= 3.38.0',
9 required: get_option('sysprof'),
11 'enable_examples=false',
19 fallback: ['sysprof', 'libsysprof_capture_dep'],
21 glib_conf.set('HAVE_SYSPROF', libsysprof_capture_dep.found())
25 gnulib_libm_dependency = []
26 glib_conf.set ('gl_unused', '')
27 glib_conf.set ('gl_extern_inline', '')
29 subdir ('gnulib/gl_extern_inline')
30 subdir ('gnulib/gl_cv_long_double_equals_double')
31 subdir ('gnulib/gl_cv_cc_double_expbit0')
32 subdir ('gnulib/gl_cv_func_printf_precision')
33 subdir ('gnulib/gl_cv_func_printf_enomem')
34 subdir ('gnulib/gl_cv_func_printf_flag_zero')
35 subdir ('gnulib/gl_cv_func_printf_flag_leftadjust')
36 subdir ('gnulib/gl_cv_func_printf_flag_grouping')
37 subdir ('gnulib/gl_cv_func_printf_directive_a')
38 subdir ('gnulib/gl_cv_func_printf_directive_f')
39 subdir ('gnulib/gl_cv_func_printf_directive_ls')
40 subdir ('gnulib/gl_cv_func_printf_long_double')
41 subdir ('gnulib/gl_cv_func_printf_infinite')
42 subdir ('gnulib/gl_cv_func_printf_infinite_long_double')
45 /* Define as a marker that can be attached to declarations that might not
46 be used. This helps to reduce warnings, such as from
47 GCC -Wunused-parameter. */
48 #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
49 # define _GL_UNUSED __attribute__ ((__unused__))
54 glib_conf.set ('gl_unused', gl_unused)
55 glib_conf.set ('gl_extern_inline', gl_extern_inline)
57 if (gl_cv_long_double_equals_double)
58 glib_conf.set ('HAVE_SAME_LONG_DOUBLE_AS_DOUBLE', 1)
61 if (gl_cv_cc_double_expbit0_word >= 0 and
62 gl_cv_cc_double_expbit0_bit >= 0)
63 glib_conf.set('DBL_EXPBIT0_WORD', gl_cv_cc_double_expbit0_word)
64 glib_conf.set('DBL_EXPBIT0_BIT', gl_cv_cc_double_expbit0_bit)
67 if not gl_cv_func_printf_precision
68 glib_conf.set('NEED_PRINTF_UNBOUNDED_PRECISION', 1)
71 if not gl_cv_func_printf_enomem
72 glib_conf.set('NEED_PRINTF_ENOMEM', 1)
75 if not gl_cv_func_printf_flag_leftadjust
76 glib_conf.set('NEED_PRINTF_FLAG_LEFTADJUST', 1)
79 if not gl_cv_func_printf_flag_zero
80 glib_conf.set('NEED_PRINTF_FLAG_ZERO', 1)
83 if not gl_cv_func_printf_flag_grouping
84 glib_conf.set('NEED_PRINTF_FLAG_GROUPING', 1)
87 if not gl_cv_func_printf_directive_a
88 glib_conf.set('NEED_PRINTF_DIRECTIVE_A', 1)
91 if not gl_cv_func_printf_directive_f
92 glib_conf.set('NEED_PRINTF_DIRECTIVE_F', 1)
95 if not gl_cv_func_printf_directive_ls
96 glib_conf.set('NEED_PRINTF_DIRECTIVE_LS', 1)
99 if (not gl_cv_func_printf_precision or
100 not gl_cv_func_printf_enomem)
101 glib_conf.set('NEED_PRINTF_DOUBLE', 1)
102 glib_conf.set('NEED_PRINTF_LONG_DOUBLE', 1)
105 if not gl_cv_func_printf_infinite
106 glib_conf.set('NEED_PRINTF_INFINITE_DOUBLE', 1)
109 if gl_cv_func_printf_long_double and gl_cv_func_printf_infinite_long_double
110 glib_conf.set('NEED_PRINTF_INFINITE_LONG_DOUBLE', 1)
116 glib_headers = files(
121 install_headers(glib_headers, subdir : 'glib-2.0')
123 # Expose as variable to be used by gobject-introspection
124 # when it includes GLib as a subproject
125 glib_unix_h = files('glib-unix.h')
127 glib_deprecated_headers = files(
128 'deprecated/gallocator.h',
129 'deprecated/gcache.h',
130 'deprecated/gcompletion.h',
131 'deprecated/gmain.h',
133 'deprecated/gthread.h',
135 install_headers(glib_deprecated_headers, subdir : 'glib-2.0/glib/deprecated')
137 glib_sub_headers = files(
138 'glib-autocleanups.h',
218 install_headers(glib_sub_headers, subdir : 'glib-2.0/glib')
220 deprecated_sources = files(
221 'deprecated/gallocator.c',
222 'deprecated/gcache.c',
223 'deprecated/gcompletion.c',
225 'deprecated/gthread-deprecated.c'
228 glib_sources = files(
309 'gvariant-serialiser.c',
310 'gvarianttypeinfo.c',
319 if host_system == 'windows'
320 if get_option('default_library') == 'shared'
321 glib_win_rc = configure_file(
324 configuration: glibconfig_conf,
326 glib_win_res = windows.compile_resources(glib_win_rc)
327 glib_sources += [glib_win_res]
329 glib_sources += files('gwin32.c', 'gspawn-win32.c', 'giowin32.c')
330 platform_deps = [winsock2, cc.find_library('winmm')]
331 if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
332 glib_sources += files('dirent/wdirent.c')
335 glib_sources += files('glib-unix.c', 'gspawn.c', 'giounix.c')
340 glib_sources += files('gosxutils.m')
341 framework_dep = dependency('appleframeworks', modules : ['Foundation', 'CoreFoundation', 'AppKit'])
342 platform_deps += [framework_dep]
346 framework_dep = dependency('appleframeworks', modules : 'Carbon')
347 platform_deps += [framework_dep]
350 glib_sources += files('gthread-@0@.c'.format(threads_implementation))
353 glib_dtrace_obj = dtrace_obj_gen.process('glib_probes.d')
354 glib_dtrace_hdr = dtrace_hdr_gen.process('glib_probes.d')
360 pcre_static_args = []
362 if use_pcre_static_flag
363 pcre_static_args = ['-DPCRE_STATIC']
366 glib_c_args = ['-DG_LOG_DOMAIN="GLib"', '-DGLIB_COMPILATION'] + pcre_static_args + glib_hidden_visibility_args
367 libglib = library('glib-2.0',
368 glib_dtrace_obj, glib_dtrace_hdr,
369 sources : [deprecated_sources, glib_sources],
370 version : library_version,
371 soversion : soversion,
372 darwin_versions : darwin_versions,
374 # intl.lib is not compatible with SAFESEH
375 link_args : [noseh_link_args, glib_link_flags, win32_ldflags],
376 include_directories : configinc,
377 link_with: [charset_lib, gnulib_lib],
378 dependencies : [pcre, thread_dep, librt] + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep],
379 c_args : glib_c_args,
380 objc_args : glib_c_args,
383 libglib_dep = declare_dependency(
385 dependencies : libintl_deps,
386 # We sadly need to export configinc here because everyone includes <glib/*.h>
387 include_directories : [configinc, glibinc])
389 pkg.generate(libglib,
390 libraries : [libintl_deps],
391 libraries_private : [win32_ldflags],
392 subdirs : ['glib-2.0'],
393 extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,
394 variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
395 'glib_genmarshal=' + join_paths('${bindir}', 'glib-genmarshal'),
396 'gobject_query=' + join_paths('${bindir}', 'gobject-query'),
397 'glib_mkenums=' + join_paths('${bindir}', 'glib-mkenums')],
398 version : glib_version,
399 install_dir : glib_pkgconfigreldir,
400 filebase : 'glib-2.0',
402 description : 'C Utility Library',
405 if meson.version().version_compare('>=0.54.0')
406 meson.override_dependency('glib-2.0', libglib_dep)
409 # On Windows, glib needs a spawn helper for g_spawn* API
410 if host_system == 'windows'
411 if host_machine.cpu_family() == 'x86'
412 executable('gspawn-win32-helper', 'gspawn-win32-helper.c',
415 include_directories : configinc,
416 dependencies : [libglib_dep])
417 executable('gspawn-win32-helper-console', 'gspawn-win32-helper.c',
419 c_args : ['-DHELPER_CONSOLE'],
420 include_directories : configinc,
421 dependencies : [libglib_dep])
423 executable('gspawn-win64-helper', 'gspawn-win32-helper.c',
426 include_directories : configinc,
427 dependencies : [libglib_dep])
428 executable('gspawn-win64-helper-console', 'gspawn-win32-helper.c',
430 c_args : ['-DHELPER_CONSOLE'],
431 include_directories : configinc,
432 dependencies : [libglib_dep])
435 gtester = executable('gtester', 'gtester.c',
437 c_args : ['-UG_DISABLE_ASSERT'],
438 include_directories : configinc,
439 dependencies : [libglib_dep])
442 report_conf = configuration_data()
443 report_conf.set('GLIB_VERSION', glib_version)
444 report_conf.set('PYTHON', python_name)
446 input: 'gtester-report.in',
447 output: 'gtester-report',
448 install_dir: get_option('bindir'),
449 configuration: report_conf,
450 install_mode: 'rwxr-xr-x'
453 install_data('glib_gdb.py', install_dir : join_paths(glib_pkgdatadir, 'gdb'))
455 # This is needed to make gdb find glib_gdb.py
456 if meson.version().version_compare('>=0.58')
458 env.prepend('PYTHONPATH', meson.current_source_dir())
459 meson.add_devenv(env)
462 gdb_conf = configuration_data()
463 gdb_conf.set('datadir', glib_datadir)
464 # This is also used in gobject/meson.build
465 if host_system != 'windows'
468 # FIXME: Cannot install on Windows because the path will contain a drive
469 # letter and colons are not allowed in paths.
473 # XXX: We add a leading './' because glib_libdir is an absolute path and we
474 # need it to be a relative path so that join_paths appends it to the end.
475 gdb_install_dir = join_paths(glib_datadir, 'gdb', 'auto-load', './' + glib_libdir)
478 input: 'libglib-gdb.py.in',
479 output: 'libglib-2.0.so.@0@-gdb.py'.format(library_version),
480 configuration: gdb_conf,
481 install_dir: gdb_install_dir,
482 install: gdb_install,
486 glib_stp = configure_file(input : 'glib.stp.in',
487 output : '@0@.stp'.format(libglib.full_path().split('/').get(-1)),
488 configuration : stp_cdata,
489 install_dir : tapset_install_dir,