From bb6458a147fd4a6743daecf5e73b88af98aad37f Mon Sep 17 00:00:00 2001 From: José Bollo Date: Tue, 29 Oct 2019 14:04:24 +0100 Subject: Add meson build system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie5ea4a42445e7c4df61284164f7dd14b0ca12295 Signed-off-by: José Bollo --- compat/include/meson.build | 19 +++++++++ compat/meson.build | 24 +++++++++++ compat/pkgconfig/meson.build | 46 ++++++++++++++++++++ compat/src/meson.build | 50 ++++++++++++++++++++++ logo-cynagora-small.png | Bin 0 -> 11034 bytes logo-cynagora.png | Bin 67130 -> 65942 bytes meson.build | 77 ++++++++++++++++++++++++++++++++++ meson_options.txt | 22 ++++++++++ pkgconfig/cynagora.pc.in | 2 +- pkgconfig/meson.build | 29 +++++++++++++ src/meson.build | 98 +++++++++++++++++++++++++++++++++++++++++++ systemd/meson.build | 43 +++++++++++++++++++ 12 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 compat/include/meson.build create mode 100644 compat/meson.build create mode 100644 compat/pkgconfig/meson.build create mode 100644 compat/src/meson.build create mode 100644 logo-cynagora-small.png create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 pkgconfig/meson.build create mode 100644 src/meson.build create mode 100644 systemd/meson.build diff --git a/compat/include/meson.build b/compat/include/meson.build new file mode 100644 index 0000000..83b1bbb --- /dev/null +++ b/compat/include/meson.build @@ -0,0 +1,19 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +install_subdir('cynara', install_dir: get_option('includedir')) diff --git a/compat/meson.build b/compat/meson.build new file mode 100644 index 0000000..d83d6fd --- /dev/null +++ b/compat/meson.build @@ -0,0 +1,24 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +cynara_version = cynagora_version +cynara_soversion = cynagora_soversion + +subdir('src') +subdir('include') +subdir('pkgconfig') diff --git a/compat/pkgconfig/meson.build b/compat/pkgconfig/meson.build new file mode 100644 index 0000000..8726960 --- /dev/null +++ b/compat/pkgconfig/meson.build @@ -0,0 +1,46 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +pkgconf = configuration_data() +pkgconf.set('CYNARA_VERSION', cynara_version) +pkgconf.set('CMAKE_INSTALL_FULL_LIBDIR', get_option('libdir')) +pkgconf.set('CMAKE_INSTALL_FULL_INCLUDEDIR', get_option('includedir')) + +configure_file( + configuration: pkgconf, + input: 'cynara-compat.pc.in', output: 'cynara-compat.pc', + install: true, install_dir: get_option('libdir') + '/pkgconfig', install_mode: 'rw-r--r--' +) + +foreach item : [ 'cynara-admin.pc', + 'cynara-agent.pc', + 'cynara-client-async.pc', + 'cynara-client.pc', + 'cynara-commons.pc', + 'cynara-creds-commons.pc', + 'cynara-creds-dbus.pc', + 'cynara-creds-gdbus.pc', + 'cynara-creds-self.pc', + 'cynara-creds-socket.pc', + 'cynara-monitor.pc', + 'cynara-plugin.pc', + 'cynara-session.pc' ] + custom_target(item, install: true, output: item, install_dir: get_option('libdir') + '/pkgconfig', + command: [ 'ln', '-sf', 'cynara-compat.pc', '@OUTPUT@' ]) +endforeach + diff --git a/compat/src/meson.build b/compat/src/meson.build new file mode 100644 index 0000000..b1df225 --- /dev/null +++ b/compat/src/meson.build @@ -0,0 +1,50 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +cyninc = include_directories('../../src', '../include') + +########################################### +# build and install libcynara-compat +########################################### +if get_option('direct-cynara-compat') + cynalib = shared_library('cynara-compat', 'lib-compat.c', clisrcs, + version: cynara_version, soversion: cynara_soversion, + c_args: '-DDEFAULT_SOCKET_DIR="' + socketdir + '"', + include_directories: cyninc, + link_args: '-Wl,--version-script='+meson.current_source_dir()+'/export-cynara-compat.map', + install: true + ) +else + cynalib = shared_library('cynara-compat', 'lib-compat.c', + version: cynara_version, soversion: cynara_soversion, + c_args: '-DDEFAULT_SOCKET_DIR="' + socketdir + '"', + include_directories: cyninc, + link_args: '-Wl,--version-script='+meson.current_source_dir()+'/export-cynara-compat.map', + link_with: clilib, + install: true + ) +endif + +########################################### +# build and install test-old-cynara +########################################### +executable('test-old-cynara', 'main-test-old-cynara.c', + install: true, + include_directories: cyninc, + link_with: cynalib +) diff --git a/logo-cynagora-small.png b/logo-cynagora-small.png new file mode 100644 index 0000000..14e9241 Binary files /dev/null and b/logo-cynagora-small.png differ diff --git a/logo-cynagora.png b/logo-cynagora.png index f68a3d7..1fb9d43 100644 Binary files a/logo-cynagora.png and b/logo-cynagora.png differ diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..0a02fe2 --- /dev/null +++ b/meson.build @@ -0,0 +1,77 @@ +########################################################################### +# Copyright (C) 2019 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +project('cynagora', 'c', version: '2.0', license: 'Apache-2.0') + +########################################################################### + +cynagora_version = meson.project_version() +cynagora_soversion = '2' + +runstatedir = get_option('localstatedir') + '/run' +dbdir = get_option('localstatedir') + '/lib/cynagora' +socketdir = runstatedir + '/cynagora' +init_file_dir = get_option('sysconfdir') + '/security' +init_file = init_file_dir + '/cynagora.initial' + +########################################################################### + +add_project_arguments( + '-Wall', + '-Wextra', + '-Wconversion', + '-Wno-unused-parameter', + '-Werror=maybe-uninitialized', + '-Werror=implicit-function-declaration', + '-ffunction-sections', + '-fdata-sections', + '-D_GNU_SOURCE', + language: 'c' +) + +add_project_link_arguments( + '-Wl,--as-needed', + '-Wl,--gc-sections', + '-Wl,--no-undefined', + language: 'c' +) + +########################################################################### + +if get_option('with-systemd') + sysd = dependency('libsystemd', required: true, version: '>=222') +else + sysd = dependency('', required: false ) +endif +cap = dependency('libcap', required: true) + +########################################################################### + +subdir('src') +subdir('pkgconfig') + +if get_option('with-systemd') + subdir('systemd') +endif + +if get_option('with-cynara-compat') + subdir('compat') +endif + +install_data('cynagora.initial', install_dir: init_file_dir, install_mode: 'rw-r--r--') + diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..50e79d5 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,22 @@ +########################################################################### +# Copyright (C) 2019 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +option('with-systemd', type: 'boolean', value: false, description: 'should include systemd unit settings') +option('with-cynara-compat', type: 'boolean', value: false, description: 'produce artifacts for compatibility with cynara') +option('direct-cynara-compat', type: 'boolean', value: false, description: 'cynara compat access server directly without using libcynagora') + diff --git a/pkgconfig/cynagora.pc.in b/pkgconfig/cynagora.pc.in index cef6de3..cf7c787 100644 --- a/pkgconfig/cynagora.pc.in +++ b/pkgconfig/cynagora.pc.in @@ -2,4 +2,4 @@ Name: cynagora Description: cynagora package Version: @CYNAGORA_VERSION@ Libs: -L@CMAKE_INSTALL_FULL_LIBDIR@ -lcynagora -Cflags: -I@CMAKE_INSTALL_FULL_INCLUDEDIR@ -I@CMAKE_INSTALL_FULL_INCLUDEDIR@ +Cflags: -I@CMAKE_INSTALL_FULL_INCLUDEDIR@ diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build new file mode 100644 index 0000000..0d0c5dc --- /dev/null +++ b/pkgconfig/meson.build @@ -0,0 +1,29 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +pkgconf = configuration_data() +pkgconf.set('CYNAGORA_VERSION', cynagora_version) +pkgconf.set('CMAKE_INSTALL_FULL_LIBDIR', get_option('libdir')) +pkgconf.set('CMAKE_INSTALL_FULL_INCLUDEDIR', get_option('includedir')) + +configure_file( + configuration: pkgconf, + input: 'cynagora.pc.in', output: 'cynagora.pc', + install: true, install_dir: get_option('libdir') + '/pkgconfig', install_mode: 'rw-r--r--' +) + diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..bb0f4d7 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,98 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +coresrcs = files( + 'anydb.c', + 'cyn.c', + 'db.c', + 'dbinit.c', + 'expire.c', + 'fbuf.c', + 'filedb.c', + 'memdb.c', + 'names.c', + 'pollitem.c', + 'queue.c' +) + +srvsrcs = files( + 'agent-at.c', + 'cyn-protocol.c', + 'cyn-server.c', + 'idgen.c', + 'main-cynagorad.c', + 'prot.c', + 'socket.c' +) + +clisrcs = files( + 'cache.c', + 'cyn-protocol.c', + 'cynagora.c', + 'expire.c', + 'idgen.c', + 'names.c', + 'prot.c', + 'socket.c' +) + +########################################### +# build and install libcynagora-core +########################################### +corelib = shared_library('cynagora-core', coresrcs, + version: cynagora_version, soversion: cynagora_soversion, + link_args: '-Wl,--version-script='+meson.current_source_dir()+'/export-cynagora-core.map', + install: true +) + +########################################### +# build and install libcynagora-client +########################################### +clilib = shared_library('cynagora', clisrcs, + version: cynagora_version, soversion: cynagora_soversion, + c_args: '-DDEFAULT_SOCKET_DIR="' + socketdir + '"', + link_args: '-Wl,--version-script='+meson.current_source_dir()+'/export-cynagora.map', + install: true +) +install_headers('cynagora.h') + +########################################### +# build and install cynagorad +########################################### +executable('cynagorad', srvsrcs, + c_args: [ + '-DDEFAULT_DB_DIR="' + dbdir + '"', + '-DDEFAULT_SOCKET_DIR="' + socketdir + '"', + '-DDEFAULT_INIT_FILE="' + init_file + '"', + get_option('with-cynara-compat') ? '-DWITH_SYSTEMD_ACTIVATION' : '-DWITHOUT_SYSTEMD_ACTIVATION' + ], + dependencies: [ sysd, cap ], + link_with: corelib, + install: true +) + +########################################### +# build and install cynagora-admin +########################################### +executable('cynagora-admin', 'main-cynagora-admin.c', 'expire.c', link_with: clilib, install: true) + +########################################### +# build and install cynagora-agent +########################################### +executable('cynagora-agent', 'main-cynagora-agent.c', 'expire.c', link_with: clilib, install: true) + diff --git a/systemd/meson.build b/systemd/meson.build new file mode 100644 index 0000000..e99814d --- /dev/null +++ b/systemd/meson.build @@ -0,0 +1,43 @@ +########################################################################### +# Copyright (C) 2018 "IoT.bzh" +# +# author: José Bollo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +sysdconf = configuration_data() +sysdconf.set('DEFAULT_SOCKET_DIR', socketdir ) + +admin = configure_file( input: 'cynagora-admin.socket.in', output: 'cynagora-admin.socket', configuration: sysdconf) +check = configure_file( input: 'cynagora-check.socket.in', output: 'cynagora-check.socket', configuration: sysdconf) +agent = configure_file( input: 'cynagora-agent.socket.in', output: 'cynagora-agent.socket', configuration: sysdconf) + +unitdir = get_option('libdir') + '/systemd/system' + +install_data( + 'cynagora.service', + 'cynagora.target', + admin, + check, + agent, + install_dir: unitdir, + install_mode: 'rw-r--r--' +) + +install_subdir( + 'sockets.target.wants', + install_dir: unitdir, + install_mode: 'rw-r--r--' +) + -- cgit 1.2.3-korg