From 28029219f4636243191bf9e6e7e6ae6444d30451 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 24 Oct 2026 15:47:38 +0300 Subject: WIP --- meson.build | 12 +++++ meson.options | 26 ++++++++++ src/meson.build | 123 +++++++++++++++++++++++++++++++++++++++++++++++ src/sqlite/meson.build | 8 +++ src/storage_sqlite.c | 3 +- test/meson.build | 2 + test/sigsegv/meson.build | 2 + test/src/meson.build | 25 ++++++++++ 8 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 meson.build create mode 100644 meson.options create mode 100644 src/meson.build create mode 100644 src/sqlite/meson.build create mode 100644 test/meson.build create mode 100644 test/sigsegv/meson.build create mode 100644 test/src/meson.build diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..dd6bf01 --- /dev/null +++ b/meson.build @@ -0,0 +1,12 @@ +project( + 'cimple', + 'c', + version: '0.0.1', + default_options: [ + 'c_std=c17', + 'warning_level=3', + ], +) + +subdir('src') +subdir('test') diff --git a/meson.options b/meson.options new file mode 100644 index 0000000..57a70fc --- /dev/null +++ b/meson.options @@ -0,0 +1,26 @@ +option( + 'DEFAULT_HOST', + type: 'string', + value: '127.0.0.1', +) +option( + 'DEFAULT_PORT', + type: 'integer', + value: 5556, +) +option( + 'DEFAULT_SQLITE_PATH', + type: 'string', + value: '/var/lib/cimple/cimple.sqlite', +) + +option( + 'COVERAGE', + type: 'feature', + value: 'disabled', +) +option( + 'STATIC_ANALYZER', + type: 'feature', + value: 'disabled', +) diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..48986a0 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,123 @@ +add_project_arguments('-D_GNU_SOURCE', language: 'c') + +git2 = dependency('libgit2') +json_c = dependency('json-c') +sodium = dependency('libsodium') +sqlite3 = dependency('sqlite3') +threads = dependency('threads') + +rev = run_command('git', 'rev-parse', '--verify', 'HEAD', check: true) + +const_c_config = configuration_data( + { + 'PROJECT_VERSION': meson.project_version(), + 'PROJECT_REV': rev.stdout().strip(), + }, +) + +foreach opt : ['DEFAULT_HOST', 'DEFAULT_PORT', 'DEFAULT_SQLITE_PATH'] + const_c_config.set(opt, get_option(opt)) +endforeach + +const_c = configure_file( + input: 'const.c.template', + output: 'const.c', + configuration: const_c_config, +) + +subdir('sqlite') + +server = executable( + meson.project_name() + '-server', + sources: [ + 'base64.c', + 'buf.c', + 'cmd_line.c', + 'command.c', + const_c, + 'event_loop.c', + 'file.c', + 'json.c', + 'json_rpc.c', + 'log.c', + 'net.c', + 'process.c', + 'protocol.c', + 'run_queue.c', + 'signal.c', + 'server.c', + 'server_main.c', + 'sqlite.c', + sqlite_sql_h, + 'storage.c', + 'storage_sqlite.c', + 'string.c', + 'tcp_server.c', + 'worker_queue.c', + ], + dependencies: [ + json_c, + sodium, + sqlite3, + threads, + ], + implicit_include_directories: false, + include_directories: include_directories('sqlite'), +) + +client = executable( + meson.project_name() + '-client', + sources: [ + 'base64.c', + 'buf.c', + 'client.c', + 'client_main.c', + 'cmd_line.c', + const_c, + 'file.c', + 'json.c', + 'json_rpc.c', + 'log.c', + 'net.c', + 'process.c', + 'protocol.c', + 'run_queue.c', + ], + dependencies: [ + json_c, + sodium, + ], + implicit_include_directories: false, +) + +worker = executable( + meson.project_name() + '-worker', + sources: [ + 'base64.c', + 'buf.c', + 'ci.c', + 'cmd_line.c', + 'command.c', + const_c, + 'event_loop.c', + 'file.c', + 'git.c', + 'json.c', + 'json_rpc.c', + 'log.c', + 'net.c', + 'process.c', + 'protocol.c', + 'run_queue.c', + 'signal.c', + 'string.c', + 'worker.c', + 'worker_main.c', + ], + dependencies: [ + git2, + json_c, + sodium, + ], + implicit_include_directories: false, +) diff --git a/src/sqlite/meson.build b/src/sqlite/meson.build new file mode 100644 index 0000000..ac8edae --- /dev/null +++ b/src/sqlite/meson.build @@ -0,0 +1,8 @@ +python = import('python').find_installation() + +sqlite_sql_h = custom_target( + 'sqlite_sql_h', + input: ['../generate-sql-header.py', 'v01.sql'], + output: 'sqlite_sql.h', + command: [python, '@INPUT0@', meson.current_source_dir(), '-o', '@OUTPUT@'], +) diff --git a/src/storage_sqlite.c b/src/storage_sqlite.c index c4036c8..2b9ec1b 100644 --- a/src/storage_sqlite.c +++ b/src/storage_sqlite.c @@ -10,10 +10,11 @@ #include "log.h" #include "process.h" #include "run_queue.h" -#include "sql/sqlite_sql.h" #include "sqlite.h" #include "storage.h" +#include + #include #include diff --git a/test/meson.build b/test/meson.build new file mode 100644 index 0000000..6e69a67 --- /dev/null +++ b/test/meson.build @@ -0,0 +1,2 @@ +subdir('sigsegv') +subdir('src') diff --git a/test/sigsegv/meson.build b/test/sigsegv/meson.build new file mode 100644 index 0000000..55d153d --- /dev/null +++ b/test/sigsegv/meson.build @@ -0,0 +1,2 @@ +null = shared_library('null', 'lib.c') +sigsegv = executable('sigsegv', 'main.c', link_with: null) diff --git a/test/src/meson.build b/test/src/meson.build new file mode 100644 index 0000000..5cf26e2 --- /dev/null +++ b/test/src/meson.build @@ -0,0 +1,25 @@ +test_args = [ + '-m', + 'pytest', + '--no-header', + '-v', + '--durations', + '0', + '--durations-min', + '1.0', + meson.current_source_dir(), + '--server', + server.full_path(), + '--worker', + worker.full_path(), + '--client', + client.full_path(), + '--sigsegv', + sigsegv.full_path(), + '--project-version', + meson.project_version(), +] + +python = import('python').find_installation() + +test('default', python, args: test_args, timeout: 600) -- cgit v1.3