summaryrefslogtreecommitdiff
path: root/glib/meson.build
blob: 4feee0fd8e408133026cc4226444a05f33902147 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# glib

# Input: install_prefix, install_libdir, install_datadir, install_includedir,
#        glibmm_pcname, giomm_pcname, glibmm_api_version, glibmm_requires,
#        giomm_requires, build_deprecated_api, install_pkgconfigdir,
#        is_os_cocoa, cpp_compiler, glibmm_major_version, glibmm_minor_version,
#        glibmm_micro_version, msvc14x_toolset_ver
# Output: pkg_conf_data, install_glibmmconfigdir, glibmmconfig_h

pkg_conf_data = configuration_data()
pkg_conf_data.set('prefix', install_prefix)
pkg_conf_data.set('exec_prefix', '${prefix}')
pkg_conf_data.set('libdir', '${exec_prefix}' / install_libdir)
pkg_conf_data.set('datarootdir', '${prefix}' / install_datadir)
pkg_conf_data.set('datadir', '${datarootdir}')
pkg_conf_data.set('includedir', '${prefix}' / install_includedir)
pkg_conf_data.set('PACKAGE_TARNAME', meson.project_name())
pkg_conf_data.set('PACKAGE_VERSION', meson.project_version())
pkg_conf_data.set('GLIBMM_MODULE_NAME', glibmm_pcname)
pkg_conf_data.set('GLIBMM_API_VERSION', glibmm_api_version)
pkg_conf_data.set('GLIBMM_MODULES', glibmm_requires)
pkg_conf_data.set('GIOMM_MODULE_NAME', giomm_pcname)
pkg_conf_data.set('GIOMM_API_VERSION', glibmm_api_version)
pkg_conf_data.set('GIOMM_MODULES', giomm_requires)
if not build_deprecated_api
  pkg_conf_data.set('GLIBMM_DISABLE_DEPRECATED', 1)
  pkg_conf_data.set('GIOMM_DISABLE_DEPRECATED', 1)
endif
pkg_conf_data.set('GLIBMM_MAJOR_VERSION', glibmm_major_version)
pkg_conf_data.set('GLIBMM_MINOR_VERSION', glibmm_minor_version)
pkg_conf_data.set('GLIBMM_MICRO_VERSION', glibmm_micro_version)
pkg_conf_data.set('GIOMM_MAJOR_VERSION', glibmm_major_version)
pkg_conf_data.set('GIOMM_MINOR_VERSION', glibmm_minor_version)
pkg_conf_data.set('GIOMM_MICRO_VERSION', glibmm_micro_version)
pkg_conf_data.set('MSVC_TOOLSET_VER', msvc14x_toolset_ver)

library_build_type = get_option('default_library')

if cpp_compiler.get_argument_syntax() == 'msvc'
  if library_build_type == 'static' or library_build_type == 'both'
    error('Static builds are not supported by MSVC-style builds')
  endif
endif

if library_build_type == 'static'
  pkg_conf_data.set('GLIBMM_STATIC_LIB', 1)
  pkg_conf_data.set('GIOMM_STATIC_LIB', 1)
endif

configure_file(
  input: 'glibmm.pc.in',
  output: glibmm_pcname + '.pc',
  configuration: pkg_conf_data,
  install_dir: install_pkgconfigdir,
)

glibmm_pkg_uninst_conf_data = configuration_data()
glibmm_pkg_uninst_conf_data.merge_from(pkg_conf_data)
glibmm_pkg_uninst_conf_data.set('srcdir', meson.current_source_dir())

configure_file(
  input: 'glibmm-uninstalled.pc.in',
  output: glibmm_pcname + '-uninstalled.pc',
  configuration: glibmm_pkg_uninst_conf_data,
)

glibmm_config_conf_data = configuration_data()
glibmm_config_conf_data.merge_from(pkg_conf_data)
if get_option('debug-refcounting')
  glibmm_config_conf_data.set('GLIBMM_DEBUG_REFCOUNTING', 1)
endif
if is_os_cocoa
  glibmm_config_conf_data.set('GLIBMM_OS_COCOA', 1)
endif
glibmm_config_conf_data.set('GLIBMM_SIZEOF_WCHAR_T', cpp_compiler.sizeof('wchar_t'))

# Leave GLIBMM_COMPILER_SUN_FORTE undefined. It's not used by glibmm itself.
# The Sun Forte compiler (a.k.a. Sun WorkShop) is not one of the compilers
# that Meson recognizes. According to Wikipedia it's old, and has been
# replaced by Oracle Developer Studio.
# https://en.wikipedia.org/wiki/Oracle_Developer_Studio
#if ???
#  glibmm_config_conf_data.set('GLIBMM_COMPILER_SUN_FORTE', 1)
#endif

conf_tests = [
# [preprocessor-macro-name, file-name, message]
  ['GLIBMM_HAVE_WIDE_STREAM', 'have_wide_stream.cc', 'Wide stream support'],
  ['GLIBMM_HAVE_STD_ITERATOR_TRAITS', 'have_std_iterator_traits.cc',
     'std::iterator_traits<> is standard-conforming'],
  ['GLIBMM_HAVE_SUN_REVERSE_ITERATOR', 'have_sun_reverse_iterator.cc',
    'std::reverse_iterator is in Sun libCstd style'],
  ['GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS', 'have_template_sequence_ctors.cc',
    'STL containers have templated sequence ctors'],
  ['GLIBMM_HAVE_DISAMBIGUOUS_CONST_TEMPLATE_SPECIALIZATIONS', 
    'have_disambiguous_const_template_specializations.cc',
    'Disambiguates template specializations for const and non-const types'],
  ['GLIBMM_CAN_USE_DYNAMIC_CAST_IN_UNUSED_TEMPLATE_WITHOUT_DEFINITION',
    'can_use_dynamic_cast_in_unused_template_wo_def.cc',
    'Non-instantiated templates may dynamic_cast<> to an undefined type'],
  ['GLIBMM_CAN_ASSIGN_NON_EXTERN_C_FUNCTIONS_TO_EXTERN_C_CALLBACKS',
    'can_assign_non_extern_c_functions_to_extern_c_cb.cc',
    'extern "C" and extern "C++" function pointers are compatible'],
  ['GLIBMM_HAVE_ALLOWS_STATIC_INLINE_NPOS', 'allows_static_inline_npos.cc',
    'A static member variable may be initialized inline to std::string::npos'],
  ['GLIBMM_MEMBER_FUNCTIONS_MEMBER_TEMPLATES',
    'member_functions_member_templates.cc',
    'Member functions can refer to spezialized member function templates'],
  ['GLIBMM_CAN_USE_NAMESPACES_INSIDE_EXTERNC',
    'can_use_namespaces_inside_externc.cc',
    'extern "C" functions in the global namespace, even inside a namespace'],
  ['GLIBMM_CAN_USE_THREAD_LOCAL', 'can_use_thread_local.cc', 'thread_local support'],
  ['GLIBMM_HAVE_C_STD_TIME_T_IS_NOT_INT32', 'std_time_t_is_not_int32.cc',
    'std::time_t and gint32 are typedefs of different builtin types'],
]

foreach conf_test : conf_tests
  if cpp_compiler.compiles(
      files('..' / 'tools' / 'conf_tests' / conf_test[1]),
      name: conf_test[2])
    glibmm_config_conf_data.set(conf_test[0], 1)
  endif
endforeach

install_glibmmconfigdir = install_libdir / glibmm_pcname / 'include'
glibmmconfig_h = configure_file(
  input: 'glibmmconfig.h.meson',
  output: 'glibmmconfig.h',
  configuration: glibmm_config_conf_data,
  install_dir: install_glibmmconfigdir,
)