metrics-ipmi-blobs: Refactor meson build
Change-Id: I7aae036339fd1429781237932a99ddc701d91d84
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/metrics-ipmi-blobs/handler.cpp b/metrics-ipmi-blobs/handler.cpp
index 9baa9b2..6b594fb 100644
--- a/metrics-ipmi-blobs/handler.cpp
+++ b/metrics-ipmi-blobs/handler.cpp
@@ -41,13 +41,13 @@
}
// BmcBlobDelete (7) is not supported.
-bool MetricBlobHandler::deleteBlob(const std::string& path)
+bool MetricBlobHandler::deleteBlob(const std::string&)
{
return false;
}
// BmcBlobStat (8) (global stat) is not supported.
-bool MetricBlobHandler::stat(const std::string& path, BlobMeta* meta)
+bool MetricBlobHandler::stat(const std::string&, BlobMeta*)
{
return false;
}
@@ -102,22 +102,20 @@
}
// BmcBlobWrite(4) is not supported.
-bool MetricBlobHandler::write(uint16_t session, uint32_t offset,
- const std::vector<uint8_t>& data)
+bool MetricBlobHandler::write(uint16_t, uint32_t, const std::vector<uint8_t>&)
{
return false;
}
// BmcBlobWriteMeta(10) is not supported.
-bool MetricBlobHandler::writeMeta(uint16_t session, uint32_t offset,
- const std::vector<uint8_t>& data)
+bool MetricBlobHandler::writeMeta(uint16_t, uint32_t,
+ const std::vector<uint8_t>&)
{
return false;
}
// BmcBlobCommit(5) is not supported.
-bool MetricBlobHandler::commit(uint16_t session,
- const std::vector<uint8_t>& data)
+bool MetricBlobHandler::commit(uint16_t, const std::vector<uint8_t>&)
{
return false;
}
diff --git a/metrics-ipmi-blobs/meson.build b/metrics-ipmi-blobs/meson.build
index ad13955..6915ea0 100644
--- a/metrics-ipmi-blobs/meson.build
+++ b/metrics-ipmi-blobs/meson.build
@@ -17,42 +17,56 @@
'cpp',
version: '0.1',
default_options: [
+ 'warning_level=3',
+ 'werror=true',
'cpp_std=c++17',
+ 'tests=' + (meson.is_subproject() ? 'disabled' : 'auto'),
],
)
-add_project_arguments(
- '-Wno-unused-parameter',
- language:'cpp')
+headers = include_directories('.')
-protoc = find_program('protoc', required: true)
+deps = [
+ dependency('phosphor-logging'),
+ dependency('phosphor-ipmi-blobs'),
+ dependency('protobuf'),
+]
-gen = generator(protoc,
- output: [
- '@BASENAME@.pb.cc', '@BASENAME@.pb.h'
- ],
- arguments : ['--proto_path=@CURRENT_SOURCE_DIR@', '--cpp_out=@BUILD_DIR@', '@INPUT@'])
-generated = gen.process(['metricblob.proto'])
-
-shared_library(
- 'metrics',
- 'main.cpp',
+lib = static_library(
+ 'metricsblob',
+ 'util.cpp',
'handler.cpp',
'metric.cpp',
- 'util.cpp',
- generated,
- install: true,
- install_dir: '/usr/lib/blob-ipmid/',
- dependencies: [
- dependency('phosphor-logging'),
- dependency('phosphor-ipmi-blobs'),
- dependency('protobuf'),
- ],
- version: '0',
-)
+ custom_target(
+ 'metricblob_proto',
+ command: [
+ find_program('protoc', native: true),
+ '--proto_path=@CURRENT_SOURCE_DIR@',
+ '--cpp_out=@OUTDIR@',
+ '@INPUT@'
+ ],
+ output: [
+ 'metricblob.pb.cc',
+ 'metricblob.pb.h',
+ ],
+ input: 'metricblob.proto'),
+ include_directories: headers,
+ implicit_include_directories: false,
+ dependencies: deps)
-gtest_dep = dependency('gtest')
-text_executable = executable('testprog', [
- 'test/util_test.cpp', 'util.cpp'],
- dependencies: [ gtest_dep, dependency('phosphor-logging') ])
-test('gtest test', text_executable)
+dep = declare_dependency(
+ dependencies: deps,
+ include_directories: headers,
+ link_with: lib)
+
+shared_module(
+ 'metricsblob',
+ 'main.cpp',
+ dependencies: dep,
+ implicit_include_directories: false,
+ install: true,
+ install_dir: get_option('libdir') / 'ipmid-providers')
+
+if not get_option('tests').disabled()
+ subdir('test')
+endif
diff --git a/metrics-ipmi-blobs/meson_options.txt b/metrics-ipmi-blobs/meson_options.txt
new file mode 100644
index 0000000..0fc2767
--- /dev/null
+++ b/metrics-ipmi-blobs/meson_options.txt
@@ -0,0 +1 @@
+option('tests', type: 'feature', description: 'Build tests')
diff --git a/metrics-ipmi-blobs/test/meson.build b/metrics-ipmi-blobs/test/meson.build
new file mode 100644
index 0000000..a4b60d0
--- /dev/null
+++ b/metrics-ipmi-blobs/test/meson.build
@@ -0,0 +1,32 @@
+gtest = dependency('gtest', main: true, disabler: true, required: false)
+gmock = dependency('gmock', disabler: true, required: false)
+if not gtest.found() or not gmock.found()
+ gtest_proj = import('cmake').subproject(
+ 'googletest',
+ cmake_options: [
+ '-DCMAKE_CXX_FLAGS=-Wno-pedantic',
+ ],
+ required: false)
+ if gtest_proj.found()
+ gtest = declare_dependency(
+ dependencies: [
+ dependency('threads'),
+ gtest_proj.dependency('gtest'),
+ gtest_proj.dependency('gtest_main'),
+ ])
+ gmock = gtest_proj.dependency('gmock')
+ else
+ assert(not get_option('tests').enabled(), 'Googletest is required')
+ endif
+endif
+
+tests = [
+ 'util_test',
+]
+
+foreach t : tests
+ test(t, executable(t.underscorify(), t + '.cpp',
+ implicit_include_directories: false,
+ dependencies: [gtest, gmock, dep]))
+endforeach
+