dcv-color-primitives 0.1.16

a library to perform image color model conversion
Documentation
project(
  'dcv-color-primitives', 'c',
  license : 'MIT-0',
  version : run_command('build-aux' / 'getversion.py').stdout().strip(),
  meson_version: '>= 0.52.0'
)

cc = meson.get_compiler('c')
host_system = host_machine.system()
arch = host_machine.cpu_family()
is_win = host_system == 'windows'

prefix = get_option('prefix')
libdir = prefix / get_option('libdir')

# Compiler flags
if cc.get_id() == 'msvc'
  # Make MSVC more pedantic, this is a recommended pragma list
  # from _Win32_Programming_ by Rector and Newcomer.  Taken from
  # glib's msvc_recommended_pragmas.h--please see that file for
  # the meaning of the warning codes used here
  test_cflags = [
    '-we4002', # too many actual parameters for macro
    '-we4003', # not enough actual parameters for macro
    '-w14010', # single-line comment contains line-continuation character
    '-we4013', # 'function' undefined; assuming extern returning int
    '-w14016', # no function return type; using int as default
    '-we4020', # too many actual parameters
    '-we4021', # too few actual parameters
    '-we4027', # function declared without formal parameter list
    '-we4029', # declared formal parameter list different from definition
    '-we4033', # 'function' must return a value
    '-we4035', # 'function' : no return value
    '-we4045', # array bounds overflow
    '-we4047', # different levels of indirection
    '-we4049', # terminating line number emission
    '-we4053', # an expression of type void was used as an operand
    '-we4071', # no function prototype given
    '-we4819', # the file contains a character that cannot be represented in the current code page
  ]
elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
  test_cflags = [
    '-Wpointer-arith',
    '-Wmissing-declarations',
    '-Wformat=2',
    '-Wstrict-prototypes',
    '-Wmissing-prototypes',
    '-Wnested-externs',
    '-Wold-style-definition',
    '-Wunused',
    '-Wno-uninitialized',
    '-Wshadow',
    '-Wcast-align',
    '-Wmissing-noreturn',
    '-Wmissing-format-attribute',
    '-Wlogical-op',
    '-Wno-discarded-qualifiers',
    '-Werror=implicit',
    '-Werror=nonnull',
    '-Werror=init-self',
    '-Werror=main',
    '-Werror=sequence-point',
    '-Werror=return-type',
    '-Werror=trigraphs',
    '-Werror=array-bounds',
    '-Werror=write-strings',
    '-Werror=address',
    '-Werror=int-to-pointer-cast',
    '-Werror=pointer-to-int-cast',
    '-Werror=empty-body',
    '-Wsign-compare',
    '-fno-strict-aliasing',
    '-Wno-int-conversion',
    '-Wno-missing-braces',
  ]
else
  test_cflags = []
endif

common_cflags = cc.get_supported_arguments(test_cflags)

message('Building DCV Color Primitives')

if get_option('buildtype') == 'release'
  dcp_build_dir = 'release'
  cargo_target = ['build', '--release', ]
elif get_option('buildtype') == 'debugoptimized'
  dcp_build_dir = 'release'
  cargo_target = ['build', '--release', ]
else
  dcp_build_dir = 'debug'
  cargo_target = ['build', ]
endif

cargo_result = run_command('cargo', cargo_target)

message(cargo_result.stdout())
message(cargo_result.stderr())

if cargo_result.returncode() != 0
    error('-- cargo build failed')
endif

dcp_lib_path = meson.source_root() / 'target' / dcp_build_dir

if is_win
  static_lib_name = 'dcv_color_primitives.lib'
else
  static_lib_name = 'libdcv_color_primitives.a'
endif

install_data(
  dcp_lib_path / static_lib_name,
  install_dir: libdir
)

thread_dep = dependency('threads')
dcv_color_primitives_dep = cc.find_library('dcv_color_primitives', dirs: [dcp_lib_path])
libdl_dep = cc.find_library('dl', required: is_win == false)
ws2_32_dep = cc.find_library('ws2_32', required: is_win)
userenv_dep = cc.find_library('userenv', required: is_win)

clock_gettime_test_code = '''
  #include <time.h>
  struct timespec t;
  int main (int argc, char ** argv) {
    return clock_gettime(CLOCK_REALTIME, &t);
  }'''
librt_dep = []
if cc.links(clock_gettime_test_code, name : 'clock_gettime')
  # nothing to link to
elif cc.links(clock_gettime_test_code, args : '-lrt', name : 'clock_gettime in librt')
  librt_dep = cc.find_library('rt')
endif

subdir('include')
subdir('c_tests')

# Generate pc file
pkgg = import('pkgconfig')

pkgg.generate(libraries: '${libdir}' / static_lib_name,
              name: meson.project_name(),
              subdirs: meson.project_name(),
              description: 'DCV Color Primitives is a library to perform image color model conversion.')