Blame meson.build

Packit 4c4d6b
project('json-glib', 'c', version: '1.4.4',
Packit 4c4d6b
        license: 'LGPLv2.1+',
Packit 4c4d6b
        default_options: [
Packit 4c4d6b
          'warning_level=1',
Packit 4c4d6b
          'buildtype=debugoptimized',
Packit 4c4d6b
          'c_std=c99',
Packit 4c4d6b
        ],
Packit 4c4d6b
        meson_version: '>= 0.40.1')
Packit 4c4d6b
Packit 4c4d6b
# Versioning
Packit 4c4d6b
json_version = meson.project_version()
Packit 4c4d6b
version_arr = json_version.split('.')
Packit 4c4d6b
json_version_major = version_arr[0].to_int()
Packit 4c4d6b
json_version_minor = version_arr[1].to_int()
Packit 4c4d6b
json_version_micro = version_arr[2].to_int()
Packit 4c4d6b
Packit 4c4d6b
json_interface_age = json_version_minor.is_even() ? json_version_micro : 0
Packit 4c4d6b
json_binary_age = 100 * json_version_minor + json_version_micro
Packit 4c4d6b
json_api_version = '1.0'
Packit 4c4d6b
Packit 4c4d6b
json_api_name = '@0@-@1@'.format(meson.project_name(), json_api_version)
Packit 4c4d6b
json_gettext_domain = json_api_name
Packit 4c4d6b
Packit 4c4d6b
# Maintain compatibility with the old soname versioning
Packit 4c4d6b
soversion = 0
Packit 4c4d6b
libversion = '@0@.@1@.@2@'.format(soversion, json_binary_age - json_interface_age, json_interface_age)
Packit 4c4d6b
Packit 4c4d6b
# Paths
Packit 4c4d6b
json_includedir = join_paths(get_option('prefix'), get_option('includedir'))
Packit 4c4d6b
json_datadir = join_paths(get_option('prefix'), get_option('datadir'))
Packit 4c4d6b
json_mandir = join_paths(get_option('prefix'), get_option('mandir'))
Packit 4c4d6b
json_localedir = join_paths(get_option('prefix'), get_option('localedir'))
Packit 4c4d6b
json_libexecdir = join_paths(get_option('prefix'), get_option('libexecdir'))
Packit 4c4d6b
Packit 4c4d6b
# Dependencies
Packit 4c4d6b
glib_req_version = '>= 2.44.0'
Packit 4c4d6b
gobject_dep = dependency('gobject-2.0', version: glib_req_version)
Packit 4c4d6b
gio_dep = dependency('gio-2.0', version: glib_req_version)
Packit 4c4d6b
Packit 4c4d6b
# Configurations
Packit 4c4d6b
cc = meson.get_compiler('c')
Packit 4c4d6b
host_system = host_machine.system()
Packit 4c4d6b
Packit 4c4d6b
cdata = configuration_data()
Packit 4c4d6b
check_headers = [
Packit 4c4d6b
  ['unistd.h', 'HAVE_UNISTD_H'],
Packit 4c4d6b
]
Packit 4c4d6b
Packit 4c4d6b
foreach h: check_headers
Packit 4c4d6b
  if cc.has_header(h.get(0))
Packit 4c4d6b
    cdata.set(h.get(1), 1)
Packit 4c4d6b
  endif
Packit 4c4d6b
endforeach
Packit 4c4d6b
Packit 4c4d6b
cdata.set_quoted('GETTEXT_PACKAGE', json_gettext_domain)
Packit 4c4d6b
Packit 4c4d6b
if cc.get_id() == 'msvc'
Packit 4c4d6b
  # Compiler options taken from msvc_recommended_pragmas.h
Packit 4c4d6b
  # in GLib, based on _Win32_Programming_ by Rector and Newcomer
Packit 4c4d6b
  test_cflags = [
Packit 4c4d6b
    '-we4002', # too many actual parameters for macro
Packit 4c4d6b
    '-we4003', # not enough actual parameters for macro
Packit 4c4d6b
    '-w14010', # single-line comment contains line-continuation character
Packit 4c4d6b
    '-we4013', # 'function' undefined; assuming extern returning int
Packit 4c4d6b
    '-w14016', # no function return type; using int as default
Packit 4c4d6b
    '-we4020', # too many actual parameters
Packit 4c4d6b
    '-we4021', # too few actual parameters
Packit 4c4d6b
    '-we4027', # function declared without formal parameter list
Packit 4c4d6b
    '-we4029', # declared formal parameter list different from definition
Packit 4c4d6b
    '-we4033', # 'function' must return a value
Packit 4c4d6b
    '-we4035', # 'function' : no return value
Packit 4c4d6b
    '-we4045', # array bounds overflow
Packit 4c4d6b
    '-we4047', # different levels of indirection
Packit 4c4d6b
    '-we4049', # terminating line number emission
Packit 4c4d6b
    '-we4053', # an expression of type void was used as an operand
Packit 4c4d6b
    '-we4071', # no function prototype given
Packit 4c4d6b
    '-we4819', # the file contains a character that cannot be represented in the current code page
Packit 4c4d6b
  ]
Packit 4c4d6b
elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
Packit 4c4d6b
  test_cflags = [
Packit 4c4d6b
    '-Wcast-align',
Packit 4c4d6b
    '-Wlogical-op',
Packit 4c4d6b
    '-Wmissing-declarations',
Packit 4c4d6b
    '-Wmissing-format-attribute',
Packit 4c4d6b
    '-Wmissing-prototypes',
Packit 4c4d6b
    '-Wmissing-noreturn',
Packit 4c4d6b
    '-Wold-style-definition',
Packit 4c4d6b
    '-Wpointer-arith',
Packit 4c4d6b
    '-Wshadow',
Packit 4c4d6b
    '-Wstrict-prototypes',
Packit 4c4d6b
    '-Wunused',
Packit 4c4d6b
    '-Wno-discarded-qualifiers',
Packit 4c4d6b
    '-Wno-int-conversion',
Packit 4c4d6b
    '-fno-strict-aliasing',
Packit 4c4d6b
    '-Wno-uninitialized',
Packit 4c4d6b
    '-Werror=address',
Packit 4c4d6b
    '-Werror=array-bounds',
Packit 4c4d6b
    '-Werror=empty-body',
Packit 4c4d6b
    '-Werror=format=2',
Packit 4c4d6b
    '-Werror=implicit',
Packit 4c4d6b
    '-Werror=init-self',
Packit 4c4d6b
    '-Werror=int-to-pointer-cast',
Packit 4c4d6b
    '-Werror=main',
Packit 4c4d6b
    '-Werror=missing-braces',
Packit 4c4d6b
    '-Werror=nested-externs',
Packit 4c4d6b
    '-Werror=nonnull',
Packit 4c4d6b
    '-Werror=pointer-to-int-cast',
Packit 4c4d6b
    '-Werror=return-type',
Packit 4c4d6b
    '-Werror=sequence-point',
Packit 4c4d6b
    '-Werror=trigraphs',
Packit 4c4d6b
    '-Werror=undef',
Packit 4c4d6b
    '-Werror=write-strings',
Packit 4c4d6b
  ]
Packit 4c4d6b
else
Packit 4c4d6b
  test_cflags = []
Packit 4c4d6b
endif
Packit 4c4d6b
Packit 4c4d6b
if get_option('default_library') != 'static'
Packit 4c4d6b
  if host_system == 'windows'
Packit 4c4d6b
    cdata.set('DLL_EXPORT', true)
Packit 4c4d6b
    cdata.set('_JSON_EXTERN', '__declspec(dllexport) extern')
Packit 4c4d6b
    if cc.get_id() != 'msvc'
Packit 4c4d6b
      test_cflags += '-fvisibility=hidden'
Packit 4c4d6b
    endif
Packit 4c4d6b
  else
Packit 4c4d6b
    cdata.set('_JSON_EXTERN', '__attribute__((visibility("default"))) extern')
Packit 4c4d6b
    test_cflags += '-fvisibility=hidden'
Packit 4c4d6b
  endif
Packit 4c4d6b
endif
Packit 4c4d6b
Packit 4c4d6b
common_cflags = []
Packit 4c4d6b
foreach cflag: test_cflags
Packit 4c4d6b
  if cc.has_argument(cflag)
Packit 4c4d6b
    common_cflags += cflag
Packit 4c4d6b
  endif
Packit 4c4d6b
endforeach
Packit 4c4d6b
Packit 4c4d6b
common_ldflags = []
Packit 4c4d6b
Packit 4c4d6b
if host_system == 'linux'
Packit 4c4d6b
  foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
Packit 4c4d6b
    if cc.has_argument(ldflag)
Packit 4c4d6b
      common_ldflags += ldflag
Packit 4c4d6b
    endif
Packit 4c4d6b
  endforeach
Packit 4c4d6b
endif
Packit 4c4d6b
Packit 4c4d6b
# Maintain compatibility with autotools
Packit 4c4d6b
if host_system == 'darwin'
Packit 4c4d6b
  common_ldflags += [
Packit 4c4d6b
    '-compatibility_version 1',
Packit 4c4d6b
    '-current_version @0@.@1@'.format(json_binary_age - json_interface_age, json_interface_age),
Packit 4c4d6b
  ]
Packit 4c4d6b
endif
Packit 4c4d6b
Packit 4c4d6b
root_dir = include_directories('.')
Packit 4c4d6b
Packit 4c4d6b
gnome = import('gnome')
Packit 4c4d6b
Packit 4c4d6b
python3 = import('python3').find_python()
Packit 4c4d6b
gen_installed_test = files('build-aux/gen-installed-test.py')
Packit 4c4d6b
Packit 4c4d6b
subdir('json-glib')
Packit 4c4d6b
subdir('po')
Packit 4c4d6b
subdir('doc')