Add a meson option to enable googletest

This adds infrastructure to enable and support unit tests using
googletest.

Tested:
Confirmed that the option correctly enables googletest.

Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
Change-Id: I8a93305391cc69b607ce5e22390f3140455e66e0
diff --git a/meson.build b/meson.build
index 8bb3675..06035ff 100644
--- a/meson.build
+++ b/meson.build
@@ -61,13 +61,19 @@
   ]
 endif
 
+incs = include_directories('include')
+
 executable(
   'host-error-monitor',
   'src/host_error_monitor.cpp',
-  include_directories: include_directories('include'),
+  include_directories: incs,
   dependencies: deps,
   install: true,
   install_dir: bindir
 )
 
 subdir('service_files')
+
+if get_option('tests').enabled()
+    subdir('tests')
+endif
diff --git a/meson.options b/meson.options
index ed29e7b..2e05965 100644
--- a/meson.options
+++ b/meson.options
@@ -11,3 +11,10 @@
     value: 'disabled',
     description: 'Enable use of the Intel Crashdump service',
 )
+
+option(
+    'tests',
+    type: 'feature',
+    value: 'disabled',
+    description: 'Enable unit tests',
+)
diff --git a/subprojects/googletest.wrap b/subprojects/googletest.wrap
new file mode 100644
index 0000000..0d37d2e
--- /dev/null
+++ b/subprojects/googletest.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/google/googletest
+revision = HEAD
\ No newline at end of file
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..f4f7900
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,38 @@
+gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
+gmock_dep = dependency('gmock', disabler: true, required: false)
+if not gtest_dep.found() or not gmock_dep.found()
+    gtest_proj = import('cmake').subproject('googletest', required: false)
+    if gtest_proj.found()
+        gtest_dep = declare_dependency(
+            dependencies: [
+                dependency('threads'),
+                gtest_proj.dependency('gtest'),
+                gtest_proj.dependency('gtest_main'),
+            ]
+        )
+        gmock_dep = gtest_proj.dependency('gmock')
+  else
+        assert(
+            not get_option('tests').enabled(),
+            'Googletest is required if tests are enabled'
+        )
+  endif
+endif
+
+unit_tests = [
+]
+
+if get_option('tests').enabled()
+    # generate the test executable
+    foreach unit_test : unit_tests
+        test(unit_test, executable(
+            unit_test,
+            unit_test + '.cpp',
+            include_directories: incs,
+            dependencies: deps + [
+                gtest_dep,
+                gmock_dep,
+            ])
+        )
+    endforeach
+endif