Rearrange features

The backends are different things compared to generic code.  Today,
these are all included in the /include folder, but it's not very clear
what options control which backends, or how things map together.  This
also means that we can't separate ownership between the various
companies.

This commit is a proposal to try to create a features folder,
separated by the code for the various backends, to make interacting
with this easier.  It takes the form

features/<option name>/files.hpp
features/<option name>/files_test.hpp

Note, redfish-core was already at top level, and contains lots of code,
so to prevent lots of conflicts, it's simply symlinked into that folder
to make clear that it is a backend, but not to move the implementation
and cause code conflicts.

Tested: Unit tests pass.  Code compiles.

Change-Id: Idcc80ffcfd99c876734ee41d53f894ca5583fed5
Signed-off-by: Ed Tanous <etanous@nvidia.com>
diff --git a/include/google/google_service_root.hpp b/features/google/google_service_root.hpp
similarity index 100%
rename from include/google/google_service_root.hpp
rename to features/google/google_service_root.hpp
diff --git a/test/include/google/google_service_root_test.cpp b/features/google/google_service_root_test.cpp
similarity index 96%
rename from test/include/google/google_service_root_test.cpp
rename to features/google/google_service_root_test.cpp
index 77c194d..c104494 100644
--- a/test/include/google/google_service_root_test.cpp
+++ b/features/google/google_service_root_test.cpp
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: Apache-2.0
 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
 #include "async_resp.hpp"
-#include "google/google_service_root.hpp"
+#include "google_service_root.hpp"
 #include "http_request.hpp"
 #include "http_response.hpp"
 
diff --git a/features/google/meson.build b/features/google/meson.build
new file mode 100644
index 0000000..5df3400
--- /dev/null
+++ b/features/google/meson.build
@@ -0,0 +1,2 @@
+incdir += include_directories('.')
+test_sources += files('google_service_root_test.cpp')
diff --git a/test/include/ibm/configfile_test.cpp b/features/ibm/configfile_test.cpp
similarity index 96%
rename from test/include/ibm/configfile_test.cpp
rename to features/ibm/configfile_test.cpp
index 490e095..b64a2d3 100644
--- a/test/include/ibm/configfile_test.cpp
+++ b/features/ibm/configfile_test.cpp
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: Apache-2.0
 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
 #include "http_response.hpp"
-#include "ibm/management_console_rest.hpp"
+#include "ibm_management_console_rest.hpp"
 
 #include <string>
 
diff --git a/include/ibm/management_console_rest.hpp b/features/ibm/ibm_management_console_rest.hpp
similarity index 99%
rename from include/ibm/management_console_rest.hpp
rename to features/ibm/ibm_management_console_rest.hpp
index 0b14575..764e504 100644
--- a/include/ibm/management_console_rest.hpp
+++ b/features/ibm/ibm_management_console_rest.hpp
@@ -5,9 +5,9 @@
 #include "app.hpp"
 #include "async_resp.hpp"
 #include "http_request.hpp"
-#include "ibm/utils.hpp"
 #include "logging.hpp"
 #include "str_utility.hpp"
+#include "utils.hpp"
 #include "utils/json_utils.hpp"
 
 #include <boost/beast/core/string_type.hpp>
diff --git a/features/ibm/meson.build b/features/ibm/meson.build
new file mode 100644
index 0000000..c73258f
--- /dev/null
+++ b/features/ibm/meson.build
@@ -0,0 +1,2 @@
+incdir += include_directories('.')
+test_sources += files('configfile_test.cpp')
diff --git a/include/ibm/utils.hpp b/features/ibm/utils.hpp
similarity index 100%
rename from include/ibm/utils.hpp
rename to features/ibm/utils.hpp
diff --git a/include/kvm_websocket.hpp b/features/kvm/kvm_websocket.hpp
similarity index 100%
rename from include/kvm_websocket.hpp
rename to features/kvm/kvm_websocket.hpp
diff --git a/features/kvm/meson.build b/features/kvm/meson.build
new file mode 100644
index 0000000..ab60765
--- /dev/null
+++ b/features/kvm/meson.build
@@ -0,0 +1 @@
+incdir += include_directories('.')
diff --git a/features/meson.build b/features/meson.build
new file mode 100644
index 0000000..ff01c88
--- /dev/null
+++ b/features/meson.build
@@ -0,0 +1,7 @@
+subdir('google')
+subdir('ibm')
+subdir('kvm')
+subdir('openbmc_rest')
+subdir('serial')
+subdir('virtual_media')
+subdir('webui_login')
diff --git a/include/dbus_monitor.hpp b/features/openbmc_rest/dbus_monitor.hpp
similarity index 100%
rename from include/dbus_monitor.hpp
rename to features/openbmc_rest/dbus_monitor.hpp
diff --git a/include/image_upload.hpp b/features/openbmc_rest/image_upload.hpp
similarity index 100%
rename from include/image_upload.hpp
rename to features/openbmc_rest/image_upload.hpp
diff --git a/features/openbmc_rest/meson.build b/features/openbmc_rest/meson.build
new file mode 100644
index 0000000..cfceb79
--- /dev/null
+++ b/features/openbmc_rest/meson.build
@@ -0,0 +1,2 @@
+incdir += include_directories('.')
+test_sources += files('openbmc_dbus_rest_test.cpp')
diff --git a/include/openbmc_dbus_rest.hpp b/features/openbmc_rest/openbmc_dbus_rest.hpp
similarity index 100%
rename from include/openbmc_dbus_rest.hpp
rename to features/openbmc_rest/openbmc_dbus_rest.hpp
diff --git a/test/include/openbmc_dbus_rest_test.cpp b/features/openbmc_rest/openbmc_dbus_rest_test.cpp
similarity index 100%
rename from test/include/openbmc_dbus_rest_test.cpp
rename to features/openbmc_rest/openbmc_dbus_rest_test.cpp
diff --git a/features/redfish b/features/redfish
new file mode 120000
index 0000000..635be9a
--- /dev/null
+++ b/features/redfish
@@ -0,0 +1 @@
+../redfish-core
\ No newline at end of file
diff --git a/features/serial/meson.build b/features/serial/meson.build
new file mode 100644
index 0000000..ab60765
--- /dev/null
+++ b/features/serial/meson.build
@@ -0,0 +1 @@
+incdir += include_directories('.')
diff --git a/include/obmc_console.hpp b/features/serial/obmc_console.hpp
similarity index 100%
rename from include/obmc_console.hpp
rename to features/serial/obmc_console.hpp
diff --git a/features/virtual_media/meson.build b/features/virtual_media/meson.build
new file mode 100644
index 0000000..ab60765
--- /dev/null
+++ b/features/virtual_media/meson.build
@@ -0,0 +1 @@
+incdir += include_directories('.')
diff --git a/include/vm_websocket.hpp b/features/virtual_media/vm_websocket.hpp
similarity index 100%
rename from include/vm_websocket.hpp
rename to features/virtual_media/vm_websocket.hpp
diff --git a/include/login_routes.hpp b/features/webui_login/login_routes.hpp
similarity index 100%
rename from include/login_routes.hpp
rename to features/webui_login/login_routes.hpp
diff --git a/features/webui_login/meson.build b/features/webui_login/meson.build
new file mode 100644
index 0000000..ab60765
--- /dev/null
+++ b/features/webui_login/meson.build
@@ -0,0 +1 @@
+incdir += include_directories('.')
diff --git a/meson.build b/meson.build
index d24437d..e92821f 100644
--- a/meson.build
+++ b/meson.build
@@ -57,13 +57,15 @@
 endif
 
 # Include Directories
+incdir = [
+    include_directories(
+        'include',
+        'redfish-core/include',
+        'redfish-core/lib',
+        'http',
+    ),
+]
 
-incdir = include_directories(
-    'include',
-    'redfish-core/include',
-    'redfish-core/lib',
-    'http',
-)
 incdir_cli = include_directories('http', 'include')
 
 # Add compiler arguments
@@ -371,6 +373,9 @@
 bmcweb_dependencies += conf_h_dep
 bmcweb_cli_dependencies += conf_h_dep
 
+test_sources = []
+subdir('features')
+
 # Source files
 fs = import('fs')
 
@@ -449,13 +454,10 @@
     'test/include/async_resolve_test.cpp',
     'test/include/credential_pipe_test.cpp',
     'test/include/dbus_utility_test.cpp',
-    'test/include/google/google_service_root_test.cpp',
     'test/include/http_utility_test.cpp',
     'test/include/human_sort_test.cpp',
-    'test/include/ibm/configfile_test.cpp',
     'test/include/json_html_serializer.cpp',
     'test/include/multipart_test.cpp',
-    'test/include/openbmc_dbus_rest_test.cpp',
     'test/include/ossl_random.cpp',
     'test/include/sessions_test.cpp',
     'test/include/ssl_key_handler_test.cpp',
@@ -491,7 +493,7 @@
     'test/redfish-core/lib/systems_logservices_postcode.cpp',
     'test/redfish-core/lib/thermal_subsystem_test.cpp',
     'test/redfish-core/lib/update_service_test.cpp',
-)
+) + test_sources
 
 if (get_option('tests').allowed())
     gtest = dependency(
diff --git a/src/webserver_run.cpp b/src/webserver_run.cpp
index aebe43c..feda8ad 100644
--- a/src/webserver_run.cpp
+++ b/src/webserver_run.cpp
@@ -8,9 +8,9 @@
 #include "dbus_monitor.hpp"
 #include "dbus_singleton.hpp"
 #include "event_service_manager.hpp"
-#include "google/google_service_root.hpp"
+#include "google_service_root.hpp"
 #include "hostname_monitor.hpp"
-#include "ibm/management_console_rest.hpp"
+#include "ibm_management_console_rest.hpp"
 #include "image_upload.hpp"
 #include "io_context_singleton.hpp"
 #include "kvm_websocket.hpp"