|
|
|
project('serd', ['c'],
|
|
|
|
version: '0.30.9',
|
|
|
|
license: 'ISC',
|
|
|
|
meson_version: '>= 0.49.2',
|
|
|
|
default_options: [
|
|
|
|
'b_ndebug=if-release',
|
|
|
|
'buildtype=release',
|
|
|
|
'c_std=c99',
|
|
|
|
'default_library=shared',
|
|
|
|
'warning_level=2',
|
|
|
|
])
|
|
|
|
|
|
|
|
serd_src_root = meson.current_source_dir()
|
|
|
|
major_version = meson.project_version().split('.')[0]
|
|
|
|
version_suffix = '-@0@'.format(major_version)
|
|
|
|
versioned_name = 'serd' + version_suffix
|
|
|
|
|
|
|
|
# Load build tools
|
|
|
|
pkg = import('pkgconfig')
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
|
|
|
|
# Set ultra strict warnings for developers, if requested
|
|
|
|
if get_option('strict')
|
|
|
|
subdir('meson')
|
|
|
|
|
|
|
|
c_warnings = all_c_warnings
|
|
|
|
if cc.get_id() == 'clang'
|
|
|
|
c_warnings += [
|
|
|
|
'-Wno-bad-function-cast',
|
|
|
|
'-Wno-cast-align',
|
|
|
|
'-Wno-cast-qual',
|
|
|
|
'-Wno-conversion',
|
|
|
|
'-Wno-covered-switch-default',
|
|
|
|
'-Wno-disabled-macro-expansion',
|
|
|
|
'-Wno-double-promotion',
|
|
|
|
'-Wno-format-nonliteral',
|
|
|
|
'-Wno-implicit-fallthrough',
|
|
|
|
'-Wno-nullability-extension',
|
|
|
|
'-Wno-nullable-to-nonnull-conversion',
|
|
|
|
'-Wno-padded',
|
|
|
|
'-Wno-reserved-id-macro',
|
|
|
|
'-Wno-sign-conversion',
|
|
|
|
]
|
|
|
|
elif cc.get_id() == 'gcc'
|
|
|
|
c_warnings += [
|
|
|
|
'-Wno-bad-function-cast',
|
|
|
|
'-Wno-cast-align',
|
|
|
|
'-Wno-cast-qual',
|
|
|
|
'-Wno-float-conversion',
|
|
|
|
'-Wno-format-nonliteral',
|
|
|
|
'-Wno-inline',
|
|
|
|
'-Wno-padded',
|
|
|
|
'-Wno-sign-conversion',
|
|
|
|
'-Wno-switch-default',
|
|
|
|
'-Wno-unsuffixed-float-constants',
|
|
|
|
'-Wno-unused-const-variable',
|
|
|
|
]
|
|
|
|
elif cc.get_id() == 'msvc'
|
|
|
|
c_warnings += [
|
|
|
|
'/wd4061', # enumerator in switch is not explicitly handled
|
|
|
|
'/wd4365', # signed/unsigned mismatch
|
|
|
|
'/wd4514', # unreferenced inline function has been removed
|
|
|
|
'/wd4706', # assignment within conditional expression
|
|
|
|
'/wd4710', # function not inlined
|
|
|
|
'/wd4711', # function selected for automatic inline expansion
|
|
|
|
'/wd4820', # padding added after construct
|
|
|
|
'/wd4996', # POSIX name for this item is deprecated
|
|
|
|
'/wd5045', # will insert Spectre mitigation for memory load
|
|
|
|
]
|
|
|
|
endif
|
|
|
|
|
|
|
|
add_project_arguments(cc.get_supported_arguments(c_warnings),
|
|
|
|
language: ['c'])
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Add special arguments for MSVC
|
|
|
|
if cc.get_id() == 'msvc'
|
|
|
|
msvc_args = [
|
|
|
|
'/D_CRT_SECURE_NO_WARNINGS',
|
|
|
|
'/TP',
|
|
|
|
'/experimental:external',
|
|
|
|
'/external:W0',
|
|
|
|
'/external:anglebrackets',
|
|
|
|
]
|
|
|
|
|
|
|
|
add_project_arguments(msvc_args, language: ['c'])
|
|
|
|
endif
|
|
|
|
|
|
|
|
c_headers = ['include/serd/serd.h']
|
|
|
|
c_header_files = files(c_headers)
|
|
|
|
c_header = files('include/serd/serd.h')
|
|
|
|
|
|
|
|
sources = [
|
|
|
|
'src/base64.c',
|
|
|
|
'src/byte_source.c',
|
|
|
|
'src/env.c',
|
|
|
|
'src/n3.c',
|
|
|
|
'src/node.c',
|
|
|
|
'src/reader.c',
|
|
|
|
'src/string.c',
|
|
|
|
'src/system.c',
|
|
|
|
'src/uri.c',
|
|
|
|
'src/writer.c',
|
|
|
|
]
|
|
|
|
|
|
|
|
# System libraries
|
|
|
|
m_dep = cc.find_library('m', required: false)
|
|
|
|
|
|
|
|
# Determine library type and the flags needed to build it
|
|
|
|
if get_option('default_library') == 'both'
|
|
|
|
if host_machine.system() == 'windows'
|
|
|
|
error('default_library=both is not supported on Windows')
|
|
|
|
endif
|
|
|
|
|
|
|
|
library_type = 'both_libraries'
|
|
|
|
library_args = ['-DSERD_INTERNAL']
|
|
|
|
prog_args = []
|
|
|
|
elif get_option('default_library') == 'shared'
|
|
|
|
library_type = 'shared_library'
|
|
|
|
library_args = ['-DSERD_INTERNAL']
|
|
|
|
prog_args = []
|
|
|
|
else
|
|
|
|
library_type = 'static_library'
|
|
|
|
library_args = ['-DSERD_INTERNAL', '-DSERD_STATIC']
|
|
|
|
prog_args = ['-DSERD_STATIC']
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Build shared and/or static library/libraries
|
|
|
|
libserd = build_target(
|
|
|
|
versioned_name,
|
|
|
|
sources,
|
|
|
|
version: meson.project_version(),
|
|
|
|
include_directories: include_directories(['include']),
|
|
|
|
c_args: library_args,
|
|
|
|
dependencies: m_dep,
|
|
|
|
gnu_symbol_visibility: 'hidden',
|
|
|
|
install: false,
|
|
|
|
target_type: library_type)
|
|
|
|
|
|
|
|
serd_dep = declare_dependency(
|
|
|
|
include_directories: include_directories(['include']),
|
|
|
|
link_with: libserd)
|
|
|
|
|
|
|
|
if meson.version().version_compare('>=0.53.0')
|
|
|
|
summary('Tests', get_option('tests'), bool_yn: true)
|
|
|
|
summary('Utilities', get_option('utils'), bool_yn: true)
|
|
|
|
|
|
|
|
summary('Install prefix', get_option('prefix'))
|
|
|
|
|
|
|
|
summary('Headers', get_option('prefix') / get_option('includedir'))
|
|
|
|
summary('Libraries', get_option('prefix') / get_option('libdir'))
|
|
|
|
|
|
|
|
if get_option('utils')
|
|
|
|
summary('Executables', get_option('prefix') / get_option('bindir'))
|
|
|
|
summary('Man pages', get_option('prefix') / get_option('mandir'))
|
|
|
|
endif
|
|
|
|
endif
|