aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-10-24 15:47:38 +0300
committerEgor Tensin <egor@tensin.name>2026-10-24 15:47:38 +0300
commit28029219f4636243191bf9e6e7e6ae6444d30451 (patch)
tree30abad997aed4389489c0d9e43b732c0efb77e7b
parentditch .git-blame-ignore-revs, who cares (diff)
downloadcimple-meson.tar.gz
cimple-meson.zip
-rw-r--r--meson.build12
-rw-r--r--meson.options26
-rw-r--r--src/meson.build123
-rw-r--r--src/sqlite/meson.build8
-rw-r--r--src/storage_sqlite.c3
-rw-r--r--test/meson.build2
-rw-r--r--test/sigsegv/meson.build2
-rw-r--r--test/src/meson.build25
8 files changed, 200 insertions, 1 deletions
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 <sqlite_sql.h>
+
#include <sqlite3.h>
#include <pthread.h>
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)