mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-04 23:22:09 +01:00
This reverts commit 252bbcd2078aadc67a49bacd5b2cd4fd348a8dd7. After further discussion in !3511, we’ve decided that there are risks associated with this change, and it’s not the best way of addressing the original problem. The original motivation for the change turned out to be that `-mms-bitfields` was not handled by `windres`, which was receiving it from `pkg-config --cflags glib-2.0` in some projects. However, if `windres` is claiming to accept CFLAGS then it should accept (and ignore) `-mms-bitfields`, since the `-m` family of options are defined in `man gcc`, just like `-I`, `-D`, etc. There is some question that there might still be third party projects which are built with an old enough compiler that `-mms-bitfields` is not the compiler default. For that reason, we should either still continue to specify `-mms-bitfields` in the `.pc` file, or add a test to assert that third party projects are always compiled with `-mms-bitfields` set. But adding a new test for all third-party compilations is risky (if we get it wrong, things will break; and it’s a test which may behave differently on different platforms), so it seems safer to just keep `-mms-bitfields` in `.pc` for now. Once all compilers which we require specify `-mms-bitfields` by default, we can finally drop this flag (without adding a test for third-party compilations). See: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3511
560 lines
14 KiB
Meson
560 lines
14 KiB
Meson
glib_sources = []
|
|
glib_sub_includedir = glib_includedir / 'glib'
|
|
|
|
glibconfig_h = configure_file(input : 'glibconfig.h.in', output : 'glibconfig.h',
|
|
install_dir : join_paths(get_option('libdir'), 'glib-2.0/include'),
|
|
install_tag : 'devel',
|
|
configuration : glibconfig_conf)
|
|
glib_sources += glibconfig_h
|
|
|
|
gversionmacros_h = custom_target(
|
|
input: 'gversionmacros.h.in',
|
|
output: 'gversionmacros.h',
|
|
command: [gen_visibility_macros, meson.project_version(), 'versions-macros', '@INPUT@', '@OUTPUT@'],
|
|
install: true,
|
|
install_dir: glib_sub_includedir,
|
|
# FIXME: Not needed with Meson >= 0.64.0
|
|
install_tag: 'devel',
|
|
)
|
|
|
|
glib_visibility_h = custom_target(
|
|
output: 'glib-visibility.h',
|
|
command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GLIB', '@OUTPUT@'],
|
|
install: true,
|
|
install_dir: glib_sub_includedir,
|
|
# FIXME: Not needed with Meson >= 0.64.0
|
|
install_tag: 'devel',
|
|
)
|
|
|
|
glib_built_headers = [gversionmacros_h, glib_visibility_h]
|
|
glib_sources += glib_built_headers
|
|
glib_c_args_internal = [
|
|
'-DGLIB_COMPILATION',
|
|
]
|
|
|
|
subdir('libcharset')
|
|
|
|
# libsysprof-capture support
|
|
libsysprof_capture_dep = dependency('sysprof-capture-4', version: '>= 3.38.0',
|
|
required: get_option('sysprof'),
|
|
default_options: [
|
|
'examples=false',
|
|
'gtk=false',
|
|
'tests=false',
|
|
'tools=false',
|
|
'libsysprof=false',
|
|
'sysprofd=none',
|
|
'help=false',
|
|
],
|
|
fallback: ['sysprof', 'libsysprof_capture_dep'],
|
|
)
|
|
glib_conf.set('HAVE_SYSPROF', libsysprof_capture_dep.found())
|
|
|
|
if use_system_printf
|
|
gnulib_lib = []
|
|
gnulib_libm_dependency = []
|
|
glib_conf.set ('gl_unused', '')
|
|
glib_conf.set ('gl_extern_inline', '')
|
|
else
|
|
subdir ('gnulib/gl_extern_inline')
|
|
subdir ('gnulib/gl_cv_long_double_equals_double')
|
|
subdir ('gnulib/gl_cv_cc_double_expbit0')
|
|
subdir ('gnulib/gl_cv_func_printf_precision')
|
|
subdir ('gnulib/gl_cv_func_printf_enomem')
|
|
subdir ('gnulib/gl_cv_func_printf_flag_zero')
|
|
subdir ('gnulib/gl_cv_func_printf_flag_leftadjust')
|
|
subdir ('gnulib/gl_cv_func_printf_flag_grouping')
|
|
subdir ('gnulib/gl_cv_func_printf_directive_a')
|
|
subdir ('gnulib/gl_cv_func_printf_directive_f')
|
|
subdir ('gnulib/gl_cv_func_printf_directive_ls')
|
|
subdir ('gnulib/gl_cv_func_printf_long_double')
|
|
subdir ('gnulib/gl_cv_func_printf_infinite')
|
|
subdir ('gnulib/gl_cv_func_printf_infinite_long_double')
|
|
|
|
gl_unused = '''
|
|
/* Define as a marker that can be attached to declarations that might not
|
|
be used. This helps to reduce warnings, such as from
|
|
GCC -Wunused-parameter. */
|
|
#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
|
|
# define _GL_UNUSED __attribute__ ((__unused__))
|
|
#else
|
|
# define _GL_UNUSED
|
|
#endif
|
|
'''
|
|
glib_conf.set ('gl_unused', gl_unused)
|
|
glib_conf.set ('gl_extern_inline', gl_extern_inline)
|
|
|
|
if (gl_cv_long_double_equals_double)
|
|
glib_conf.set ('HAVE_SAME_LONG_DOUBLE_AS_DOUBLE', 1)
|
|
endif
|
|
|
|
if (gl_cv_cc_double_expbit0_word >= 0 and
|
|
gl_cv_cc_double_expbit0_bit >= 0)
|
|
glib_conf.set('DBL_EXPBIT0_WORD', gl_cv_cc_double_expbit0_word)
|
|
glib_conf.set('DBL_EXPBIT0_BIT', gl_cv_cc_double_expbit0_bit)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_precision
|
|
glib_conf.set('NEED_PRINTF_UNBOUNDED_PRECISION', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_enomem
|
|
glib_conf.set('NEED_PRINTF_ENOMEM', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_flag_leftadjust
|
|
glib_conf.set('NEED_PRINTF_FLAG_LEFTADJUST', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_flag_zero
|
|
glib_conf.set('NEED_PRINTF_FLAG_ZERO', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_flag_grouping
|
|
glib_conf.set('NEED_PRINTF_FLAG_GROUPING', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_directive_a
|
|
glib_conf.set('NEED_PRINTF_DIRECTIVE_A', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_directive_f
|
|
glib_conf.set('NEED_PRINTF_DIRECTIVE_F', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_directive_ls
|
|
glib_conf.set('NEED_PRINTF_DIRECTIVE_LS', 1)
|
|
endif
|
|
|
|
if (not gl_cv_func_printf_precision or
|
|
not gl_cv_func_printf_enomem)
|
|
glib_conf.set('NEED_PRINTF_DOUBLE', 1)
|
|
glib_conf.set('NEED_PRINTF_LONG_DOUBLE', 1)
|
|
endif
|
|
|
|
if not gl_cv_func_printf_infinite
|
|
glib_conf.set('NEED_PRINTF_INFINITE_DOUBLE', 1)
|
|
endif
|
|
|
|
if gl_cv_func_printf_long_double and gl_cv_func_printf_infinite_long_double
|
|
glib_conf.set('NEED_PRINTF_INFINITE_LONG_DOUBLE', 1)
|
|
endif
|
|
|
|
subdir('gnulib')
|
|
endif
|
|
|
|
glib_headers = files(
|
|
'glib.h',
|
|
'glib-unix.h',
|
|
'glib-object.h',
|
|
)
|
|
install_headers(glib_headers, install_dir : glib_includedir)
|
|
|
|
if host_system == 'windows'
|
|
install_headers([ 'msvc_recommended_pragmas.h' ], install_dir : glib_includedir)
|
|
endif
|
|
|
|
# Expose as variable to be used by gobject-introspection
|
|
# when it includes GLib as a subproject
|
|
glib_unix_h = files('glib-unix.h')
|
|
|
|
glib_deprecated_headers = files(
|
|
'deprecated/gallocator.h',
|
|
'deprecated/gcache.h',
|
|
'deprecated/gcompletion.h',
|
|
'deprecated/gmain.h',
|
|
'deprecated/grel.h',
|
|
'deprecated/gthread.h',
|
|
)
|
|
install_headers(glib_deprecated_headers,
|
|
install_dir : glib_sub_includedir / 'deprecated')
|
|
|
|
glib_sub_headers = files(
|
|
'glib-autocleanups.h',
|
|
'glib-typeof.h',
|
|
'galloca.h',
|
|
'garray.h',
|
|
'gasyncqueue.h',
|
|
'gatomic.h',
|
|
'gbacktrace.h',
|
|
'gbase64.h',
|
|
'gbitlock.h',
|
|
'gbookmarkfile.h',
|
|
'gbytes.h',
|
|
'gcharset.h',
|
|
'gchecksum.h',
|
|
'gconvert.h',
|
|
'gdataset.h',
|
|
'gdate.h',
|
|
'gdatetime.h',
|
|
'gdir.h',
|
|
'genviron.h',
|
|
'gerror.h',
|
|
'gfileutils.h',
|
|
'ggettext.h',
|
|
'ghash.h',
|
|
'ghmac.h',
|
|
'ghook.h',
|
|
'ghostutils.h',
|
|
'gi18n.h',
|
|
'gi18n-lib.h',
|
|
'giochannel.h',
|
|
'gkeyfile.h',
|
|
'glist.h',
|
|
'gmacros.h',
|
|
'gmain.h',
|
|
'gmappedfile.h',
|
|
'gmarkup.h',
|
|
'gmem.h',
|
|
'gmessages.h',
|
|
'gnode.h',
|
|
'goption.h',
|
|
'gpathbuf.h',
|
|
'gpattern.h',
|
|
'gpoll.h',
|
|
'gprimes.h',
|
|
'gqsort.h',
|
|
'gquark.h',
|
|
'gqueue.h',
|
|
'grand.h',
|
|
'grcbox.h',
|
|
'grefcount.h',
|
|
'grefstring.h',
|
|
'gregex.h',
|
|
'gscanner.h',
|
|
'gsequence.h',
|
|
'gshell.h',
|
|
'gslice.h',
|
|
'gslist.h',
|
|
'gspawn.h',
|
|
'gstdio.h',
|
|
'gstrfuncs.h',
|
|
'gstrvbuilder.h',
|
|
'gtestutils.h',
|
|
'gstring.h',
|
|
'gstringchunk.h',
|
|
'gthread.h',
|
|
'gthreadpool.h',
|
|
'gtimer.h',
|
|
'gtimezone.h',
|
|
'gtrashstack.h',
|
|
'gtree.h',
|
|
'gtypes.h',
|
|
'guuid.h',
|
|
'gunicode.h',
|
|
'guri.h',
|
|
'gutils.h',
|
|
'gvarianttype.h',
|
|
'gvariant.h',
|
|
'gversion.h',
|
|
'gwin32.h',
|
|
'gprintf.h',
|
|
)
|
|
|
|
install_headers(glib_sub_headers, install_dir : glib_sub_includedir)
|
|
|
|
deprecated_sources = files(
|
|
'deprecated/gallocator.c',
|
|
'deprecated/gcache.c',
|
|
'deprecated/gcompletion.c',
|
|
'deprecated/grel.c',
|
|
'deprecated/gthread-deprecated.c'
|
|
)
|
|
|
|
glib_sources += files(
|
|
'garcbox.c',
|
|
'garray.c',
|
|
'gasyncqueue.c',
|
|
'gatomic.c',
|
|
'gbacktrace.c',
|
|
'gbase64.c',
|
|
'gbitlock.c',
|
|
'gbookmarkfile.c',
|
|
'gbytes.c',
|
|
'gcharset.c',
|
|
'gchecksum.c',
|
|
'gconvert.c',
|
|
'gdataset.c',
|
|
'gdate.c',
|
|
'gdatetime.c',
|
|
'gdir.c',
|
|
'genviron.c',
|
|
'gerror.c',
|
|
'gfileutils.c',
|
|
'ggettext.c',
|
|
'ghash.c',
|
|
'ghmac.c',
|
|
'ghook.c',
|
|
'ghostutils.c',
|
|
'giochannel.c',
|
|
'gkeyfile.c',
|
|
'glib-init.c',
|
|
'glib-private.c',
|
|
'glist.c',
|
|
'gmain.c',
|
|
'gmappedfile.c',
|
|
'gmarkup.c',
|
|
'gmem.c',
|
|
'gmessages.c',
|
|
'gnode.c',
|
|
'goption.c',
|
|
'gpathbuf.c',
|
|
'gpattern.c',
|
|
'gpoll.c',
|
|
'gprimes.c',
|
|
'gqsort.c',
|
|
'gquark.c',
|
|
'gqueue.c',
|
|
'grand.c',
|
|
'grcbox.c',
|
|
'grefcount.c',
|
|
'grefstring.c',
|
|
'gregex.c',
|
|
'gscanner.c',
|
|
'gsequence.c',
|
|
'gshell.c',
|
|
'gslice.c',
|
|
'gslist.c',
|
|
'gstdio.c',
|
|
'gstrfuncs.c',
|
|
'gstring.c',
|
|
'gstringchunk.c',
|
|
'gstrvbuilder.c',
|
|
'gtestutils.c',
|
|
'gthread.c',
|
|
'gthreadpool.c',
|
|
'gtimer.c',
|
|
'gtimezone.c',
|
|
'gtrace.c',
|
|
'gtrace-private.h',
|
|
'gtranslit.c',
|
|
'gtrashstack.c',
|
|
'gtree.c',
|
|
'guniprop.c',
|
|
'gutf8.c',
|
|
'gunibreak.c',
|
|
'gunicollate.c',
|
|
'gunidecomp.c',
|
|
'guri.c',
|
|
'guriprivate.h',
|
|
'gutils.c',
|
|
'gutilsprivate.h',
|
|
'guuid.c',
|
|
'gvariant.c',
|
|
'gvariant-core.c',
|
|
'gvariant-parser.c',
|
|
'gvariant-serialiser.c',
|
|
'gvarianttypeinfo.c',
|
|
'gvarianttype.c',
|
|
'gversion.c',
|
|
'gwakeup.c',
|
|
'gprintf.c',
|
|
)
|
|
|
|
platform_deps = []
|
|
|
|
if host_system == 'windows'
|
|
if glib_build_shared
|
|
glib_win_rc = configure_file(
|
|
input: 'glib.rc.in',
|
|
output: 'glib.rc',
|
|
configuration: glibconfig_conf,
|
|
)
|
|
glib_win_res = windows.compile_resources(glib_win_rc)
|
|
glib_sources += [glib_win_res]
|
|
endif
|
|
glib_sources += files('gwin32.c', 'gspawn-win32.c', 'giowin32.c')
|
|
platform_deps = [winsock2, cc.find_library('winmm')]
|
|
if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
|
|
glib_sources += files('dirent/wdirent.c')
|
|
endif
|
|
else
|
|
glib_sources += files('glib-unix.c', 'glib-unixprivate.h', 'gspawn.c', 'giounix.c')
|
|
platform_deps = []
|
|
endif
|
|
|
|
if host_system == 'linux'
|
|
glib_sources += files('gjournal-private.c')
|
|
endif
|
|
|
|
if glib_have_cocoa
|
|
glib_sources += files('gosxutils.m')
|
|
framework_dep = dependency('appleframeworks', modules : ['Foundation', 'CoreFoundation', 'AppKit'])
|
|
platform_deps += [framework_dep]
|
|
endif
|
|
|
|
if glib_have_carbon
|
|
framework_dep = dependency('appleframeworks', modules : 'Carbon')
|
|
platform_deps += [framework_dep]
|
|
endif
|
|
|
|
glib_sources += files('gthread-@0@.c'.format(threads_implementation))
|
|
|
|
if enable_dtrace
|
|
glib_dtrace_obj = dtrace_obj_gen.process('glib_probes.d')
|
|
glib_dtrace_hdr = dtrace_hdr_gen.process('glib_probes.d')
|
|
else
|
|
glib_dtrace_obj = []
|
|
glib_dtrace_hdr = []
|
|
endif
|
|
|
|
pcre2_static_args = []
|
|
|
|
if use_pcre2_static_flag
|
|
pcre2_static_args = ['-DPCRE2_STATIC']
|
|
endif
|
|
|
|
glib_c_args = ['-DG_LOG_DOMAIN="GLib"'] + glib_c_args_internal + pcre2_static_args
|
|
libglib = library('glib-2.0',
|
|
glib_dtrace_obj, glib_dtrace_hdr,
|
|
sources : [deprecated_sources, glib_sources],
|
|
version : library_version,
|
|
soversion : soversion,
|
|
darwin_versions : darwin_versions,
|
|
install : true,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : [noseh_link_args, glib_link_flags, win32_ldflags],
|
|
include_directories : configinc,
|
|
link_with: [charset_lib, gnulib_lib],
|
|
dependencies : [
|
|
gnulib_libm_dependency,
|
|
libiconv,
|
|
libintl_deps,
|
|
libm,
|
|
librt,
|
|
libsysprof_capture_dep,
|
|
pcre2,
|
|
platform_deps,
|
|
thread_dep,
|
|
],
|
|
c_args : glib_c_args,
|
|
objc_args : glib_c_args,
|
|
gnu_symbol_visibility : 'hidden',
|
|
)
|
|
|
|
libglib_dep = declare_dependency(
|
|
link_with : libglib,
|
|
dependencies : libintl_deps,
|
|
sources : glib_built_headers,
|
|
# We sadly need to export configinc here because everyone includes <glib/*.h>
|
|
include_directories : [configinc, glibinc])
|
|
|
|
pkg.generate(libglib,
|
|
libraries : [libintl_deps],
|
|
libraries_private : [win32_ldflags],
|
|
subdirs : ['glib-2.0'],
|
|
extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,
|
|
variables : [
|
|
'bindir=' + '${prefix}' / get_option('bindir'),
|
|
'datadir=' + '${prefix}' / get_option('datadir'),
|
|
'glib_genmarshal=' + '${bindir}' / 'glib-genmarshal',
|
|
'gobject_query=' + '${bindir}' / 'gobject-query',
|
|
'glib_mkenums=' + '${bindir}' / 'glib-mkenums',
|
|
'glib_valgrind_suppressions=' + '${datadir}' /
|
|
valgrind_suppression_file_install_subdir /
|
|
fs.name(valgrind_suppression_file),
|
|
],
|
|
version : glib_version,
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'glib-2.0',
|
|
name : 'GLib',
|
|
description : 'C Utility Library',
|
|
)
|
|
meson.override_dependency('glib-2.0', libglib_dep)
|
|
|
|
# On Windows, glib needs a spawn helper for g_spawn* API
|
|
if host_system == 'windows'
|
|
if host_machine.cpu_family() == 'x86'
|
|
executable('gspawn-win32-helper', 'gspawn-win32-helper.c',
|
|
install : true,
|
|
win_subsystem : 'windows',
|
|
include_directories : configinc,
|
|
dependencies : [libglib_dep])
|
|
executable('gspawn-win32-helper-console', 'gspawn-win32-helper.c',
|
|
install : true,
|
|
c_args : ['-DHELPER_CONSOLE'],
|
|
include_directories : configinc,
|
|
dependencies : [libglib_dep])
|
|
else
|
|
executable('gspawn-win64-helper', 'gspawn-win32-helper.c',
|
|
install : true,
|
|
win_subsystem : 'windows',
|
|
include_directories : configinc,
|
|
dependencies : [libglib_dep])
|
|
executable('gspawn-win64-helper-console', 'gspawn-win32-helper.c',
|
|
install : true,
|
|
c_args : ['-DHELPER_CONSOLE'],
|
|
include_directories : configinc,
|
|
dependencies : [libglib_dep])
|
|
endif
|
|
else
|
|
gtester = executable('gtester', 'gtester.c',
|
|
install : true,
|
|
install_tag : 'bin-devel',
|
|
c_args : ['-UG_DISABLE_ASSERT'],
|
|
include_directories : configinc,
|
|
dependencies : [libglib_dep])
|
|
|
|
# Provide tools for others when we're a subproject and they use the Meson GNOME module
|
|
meson.override_find_program('gtester', gtester)
|
|
endif
|
|
|
|
report_conf = configuration_data()
|
|
report_conf.set('GLIB_VERSION', glib_version)
|
|
report_conf.set('PYTHON', python_name)
|
|
configure_file(
|
|
input: 'gtester-report.in',
|
|
output: 'gtester-report',
|
|
install_dir: get_option('bindir'),
|
|
install_tag : 'bin-devel',
|
|
configuration: report_conf,
|
|
install_mode: 'rwxr-xr-x'
|
|
)
|
|
|
|
install_data('glib_gdb.py',
|
|
install_dir : glib_pkgdatadir / 'gdb',
|
|
install_tag : 'devel',
|
|
)
|
|
|
|
# This is needed to make gdb find glib_gdb.py
|
|
env = environment()
|
|
env.prepend('PYTHONPATH', meson.current_source_dir())
|
|
meson.add_devenv(env)
|
|
|
|
gdb_conf = configuration_data()
|
|
gdb_conf.set('datadir', glib_datadir)
|
|
# This is also used in gobject/meson.build
|
|
if host_system != 'windows'
|
|
gdb_install = true
|
|
else
|
|
# FIXME: Cannot install on Windows because the path will contain a drive
|
|
# letter and colons are not allowed in paths.
|
|
gdb_install = false
|
|
endif
|
|
|
|
# XXX: We add a leading './' because glib_libdir is an absolute path and we
|
|
# need it to be a relative path so that join_paths appends it to the end.
|
|
gdb_install_dir = join_paths(glib_datadir, 'gdb', 'auto-load', './' + glib_libdir)
|
|
|
|
configure_file(
|
|
input: 'libglib-gdb.py.in',
|
|
output: 'libglib-2.0.so.@0@-gdb.py'.format(library_version),
|
|
configuration: gdb_conf,
|
|
install_dir: gdb_install_dir,
|
|
install_tag: 'devel',
|
|
install: gdb_install,
|
|
)
|
|
|
|
if enable_systemtap
|
|
glib_stp = configure_file(input : 'glib.stp.in',
|
|
output : '@0@.stp'.format(libglib.full_path().split('/').get(-1)),
|
|
configuration : stp_cdata,
|
|
install_dir : tapset_install_dir,
|
|
install_tag : 'systemtap',
|
|
)
|
|
endif
|
|
|
|
if build_tests
|
|
subdir('tests')
|
|
endif
|