Fix local meson build

Provide all the missing dependencies for the local meson build.

Tested:
"meson setup build && cd build && meson compile" finishes successfully.

Change-Id: If1d20df64610e47d2be813a8ffbe7602b6d00181
Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
diff --git a/meson.build b/meson.build
index fde65e4..9c8b0d5 100644
--- a/meson.build
+++ b/meson.build
@@ -18,12 +18,38 @@
 conf_data.set('CLASS_VERSION', 1)
 conf_data.set('MAX_EVENTS', 20)
 
-sdbusplus_dep = dependency('sdbusplus')
+cpp = meson.get_compiler('cpp')
+# Get Cereal dependency.
+cereal_dep = dependency('cereal', required: false)
+has_cereal = cpp.has_header_symbol(
+    'cereal/cereal.hpp',
+    'cereal::specialize',
+    dependencies: cereal_dep,
+    required: false)
+if not has_cereal
+    cereal_opts = import('cmake').subproject_options()
+    cereal_opts.add_cmake_defines({'BUILD_TESTS': 'OFF', 'SKIP_PERFORMANCE_COMPARISON': 'ON'})
+    cereal_proj = import('cmake').subproject(
+        'cereal',
+        options: cereal_opts,
+        required: false)
+    assert(cereal_proj.found(), 'cereal is required')
+    cereal_dep = cereal_proj.dependency('cereal')
+endif
+
+sdbusplus_dep = dependency('sdbusplus', required : false)
 sdeventplus_dep = dependency('sdeventplus')
 phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
 phosphor_logging_dep = dependency('phosphor-logging')
 phosphor_snmp_dep = dependency('phosphor-snmp')
 
+sdbusplus_python_env = {}
+if not sdbusplus_dep.found()
+    sdbusplus_proj = subproject('sdbusplus')
+    sdbusplus_dep = sdbusplus_proj.get_variable('sdbusplus_dep')
+    sdbusplus_python_env = {'PYTHONPATH': meson.current_source_dir() / 'subprojects' / 'sdbusplus' / 'tools'}
+endif
+
 prog_python = find_program('python3', required: true)
 realpath_prog = find_program('realpath')