diff --git a/keyboardprocessor/include/keyboardprocessor.h b/keyboardprocessor/include/keyboardprocessor.h.in similarity index 99% rename from keyboardprocessor/include/keyboardprocessor.h rename to keyboardprocessor/include/keyboardprocessor.h.in index 2c65cb3288..7f7e400595 100644 --- a/keyboardprocessor/include/keyboardprocessor.h +++ b/keyboardprocessor/include/keyboardprocessor.h.in @@ -54,9 +54,9 @@ All calls, types and enums are prefixed with the namespace identifier `km_kbp_` #include #include -#define KM_KBP_LIB_CURRENT 0 -#define KM_KBP_LIB_AGE 0 -#define KM_KBP_LIB_REVISION 0 +#define KM_KBP_LIB_CURRENT @lib_curr@ +#define KM_KBP_LIB_AGE @lib_age@ +#define KM_KBP_LIB_REVISION @lib_rev@ #if defined(__cplusplus) extern "C" @@ -572,8 +572,6 @@ km_kbp_option_set *km_kpb_state_options(km_kbp_state const *); */ km_kbp_action_item const * km_kbp_state_action_items(km_kbp_state const *, size_t *num_items); -/*``` -*/ /* ``` diff --git a/keyboardprocessor/include/meson.build b/keyboardprocessor/include/meson.build new file mode 100644 index 0000000000..c1e9af2ecf --- /dev/null +++ b/keyboardprocessor/include/meson.build @@ -0,0 +1,15 @@ +ver = meson.project_version().split('.') + +cfg = configuration_data() +cfg.set('lib_curr', ver[0]) +cfg.set('lib_age', ver[1]) +cfg.set('lib_rev', ver[2]) + +configure_file( + configuration: cfg, + input: 'keyboardprocessor.h.in', + output: 'keyboardprocessor.h', +) + +install_headers(join_paths(meson.current_build_dir(), 'keyboardprocessor.h'), + subdir: 'keyman') diff --git a/keyboardprocessor/meson.build b/keyboardprocessor/meson.build new file mode 100644 index 0000000000..6eb9af0da4 --- /dev/null +++ b/keyboardprocessor/meson.build @@ -0,0 +1,15 @@ +project('keyboardprocessor', 'cpp', 'c', + version: '0.0.0', + license: 'MIT', + default_options : ['buildtype=release', + 'cpp_std=c++14']) + +compiler = meson.get_compiler('cpp') + +py = import('python3') +python = py.find_python() + +inc = include_directories('include', is_system: true) +subdir('include') +subdir('src') +subdir('tests') diff --git a/keyboardprocessor/src/meson.build b/keyboardprocessor/src/meson.build new file mode 100644 index 0000000000..2be2ed0e54 --- /dev/null +++ b/keyboardprocessor/src/meson.build @@ -0,0 +1,60 @@ +defns = [] + +if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang' + warns = [ + '-Wall', + '-Wctor-dtor-privacy', + '-Wdouble-promotion', + '-Wendif-labels', + '-Wextra', + '-Wno-unknown-pragmas', + '-Wnon-virtual-dtor', + '-Wshadow' + ] + flags = [ + '-fvisibility=hidden', + '-fvisibility-inlines-hidden' + ] + + if compiler.get_id() == 'clang' + warns += [ + '-Wimplicit-fallthrough', + '-Wno-double-promotion', + '-Wshorten-64-to-32' + ] + endif + + if host_machine.system() == 'darwin' + warns += ['-Wno-ctor-dtor-privacy', '-Wno-non-virtual-dtor '] + endif +endif + +if compiler.get_id() == 'msvc' + warns = [] + flags = [] + defns = [ + '-D_SCL_SECURE_NO_WARNINGS', + '-D_CRT_SECURE_NO_WARNINGS', + '-DUNICODE' + ] +endif + +pkg = import('pkgconfig') +pkg.generate( + name: 'keyman_kmn_processor', + version: meson.project_version(), + description: 'Keyman processor for KMN keyboards.') + +lib = library('kmnkbp0', + 'keyboardprocessor.cpp', + 'km_kbp_context_api.cpp', + 'km_kbp_keyboard_api.cpp', + 'km_kbp_options_api.cpp', + 'json.cpp', + cpp_args: defns + warns + flags, + link_args: ['-lstdc++fs'], + version: meson.project_version(), + include_directories: inc, + install: true) + +#kmnkbd = declare_dependency(link_with: lib, include_directories: inc) diff --git a/keyboardprocessor/tests/meson.build b/keyboardprocessor/tests/meson.build new file mode 100644 index 0000000000..974fae89b7 --- /dev/null +++ b/keyboardprocessor/tests/meson.build @@ -0,0 +1,16 @@ +cmpfiles = ['-c', 'import sys, filecmp; exit(not filecmp.cmp(*sys.argv[1:]))'] +stnds = join_paths(meson.source_root(), 'tests', 'standards') + +libsrc = include_directories(join_paths('../', 'src')) + +if get_option('default_library') != 'static' + ctypes_void_p_size = ['-c', 'import ctypes; print(ctypes.sizeof(ctypes.c_void_p))'] + r = run_command(python, ctypes_void_p_size) + python_ctypes_compatible = r.stdout().to_int() == compiler.sizeof('void *') + if not python_ctypes_compatible + message('Python ctypes is incompatible with built shared object. Disabling some tests.') + endif +endif + +subdir('unit/json') +subdir('unit/utftest') diff --git a/keyboardprocessor/tests/unit/json/meson.build b/keyboardprocessor/tests/unit/json/meson.build new file mode 100644 index 0000000000..0b333ac2a9 --- /dev/null +++ b/keyboardprocessor/tests/unit/json/meson.build @@ -0,0 +1,6 @@ +e = executable('jsontest', 'jsontest.cpp', + include_directories: [inc, libsrc], + objects: lib.extract_objects('json.cpp')) +test('jsontest', e, args: 'jsontest.json') +test('jsontestOutput', python, is_parallel: false, args: + cmpfiles + ['jsontest.json', join_paths(stnds, 'jsontest.json')]) diff --git a/keyboardprocessor/tests/unit/utftest/meson.build b/keyboardprocessor/tests/unit/utftest/meson.build new file mode 100644 index 0000000000..71a7a53af9 --- /dev/null +++ b/keyboardprocessor/tests/unit/utftest/meson.build @@ -0,0 +1,2 @@ +e = executable('utftest', 'utftest.cpp', include_directories: [inc, libsrc]) +test('utftest', e)