build: Some minor refactoring

Change-Id: I169d24356b883ba73327e1c6ab8d87a2398ced90
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/ethstats_unittest.cpp b/test/ethstats.cpp
similarity index 99%
rename from test/ethstats_unittest.cpp
rename to test/ethstats.cpp
index 41a2c62..db60319 100644
--- a/test/ethstats_unittest.cpp
+++ b/test/ethstats.cpp
@@ -1,4 +1,5 @@
 #include "ethstats.hpp"
+
 #include "handler_mock.hpp"
 
 #include <cstdint>
diff --git a/test/meson.build b/test/meson.build
index 727f53e..4fccb10 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -1,19 +1,36 @@
-gtest_dep = dependency('gtest', main: true)
-gmock_dep = dependency('gmock')
+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_opts = import('cmake').subproject_options()
+  gtest_opts.add_cmake_defines({'CMAKE_CXX_FLAGS': '-Wno-pedantic'})
+  gtest_proj = import('cmake').subproject(
+    'googletest',
+    options: gtest_opts,
+    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
 
-test(
-  'test_ethstats',
-  executable(
-    'test-ethstats',
-    'ethstats_unittest.cpp',
-    include_directories: [
-      '..',
-    ],
-    dependencies: [
-      ethstatscmd_common_dep,
-      gmock_dep,
-      gtest_dep,
-      ipmid_dep,
-    ],
-  ),
-)
+gtests = {
+  'ethstats': [ethstats_dep, gmock, gtest],
+}
+
+foreach t, deps : gtests
+  test(
+    t,
+    executable(
+      t.underscorify(), t + '.cpp',
+      build_by_default: false,
+      implicit_include_directories: false,
+      cpp_args: '-Wno-missing-braces',
+      dependencies: deps))
+endforeach