build: Full subproject support

This changes makes it possible to build phosphor-networkd outside of the
openbmc CI environment with only minimal dependencies available in most
linux distributions.

Change-Id: I87a0ded66e8fccb9ac2bc16fb9e9f9c311ac8155
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/meson.build b/meson.build
index ce8534a..5112562 100644
--- a/meson.build
+++ b/meson.build
@@ -23,7 +23,7 @@
 conf_data.set('SYNC_MAC_FROM_INVENTORY', get_option('sync-mac'))
 
 sdbusplus_dep = dependency('sdbusplus', required: false)
-if sdbusplus_dep.found()
+if sdbusplus_dep.found() and sdbusplus_dep.type_name() != 'internal'
   sdbusplusplus_prog = find_program('sdbus++', native: true)
   sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson', native: true)
 else
@@ -38,7 +38,39 @@
 yaml_sources = []
 subdir('gen')
 subdir('gen/xyz')
-generated_includes = include_directories('gen')
+networkd_dbus_includes = include_directories('gen')
+
+phosphor_dbus_interfaces_dep = dependency(
+  'phosphor-dbus-interfaces',
+  fallback: ['phosphor-dbus-interfaces', 'phosphor_dbus_interfaces_dep'])
+
+networkd_dbus_deps = [
+  phosphor_dbus_interfaces_dep,
+  sdbusplus_dep,
+]
+
+networkd_dbus_lib = static_library(
+  'networkd_dbus',
+  generated_sources,
+  implicit_include_directories: false,
+  include_directories: networkd_dbus_includes,
+  dependencies: networkd_dbus_deps)
+
+generated_files_headers = []
+foreach s : generated_sources
+    foreach f : s.to_list()
+        p = f.full_path()
+        if p.endswith('.hpp')
+            generated_files_headers += f
+        endif
+    endforeach
+endforeach
+
+networkd_dbus_dep = declare_dependency(
+  sources: generated_files_headers,
+  include_directories: networkd_dbus_includes,
+  link_with: networkd_dbus_lib,
+  dependencies: networkd_dbus_deps)
 
 subdir('src')
 
diff --git a/src/meson.build b/src/meson.build
index 31371f9..283995a 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,5 +1,6 @@
-phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
-phosphor_logging_dep = dependency('phosphor-logging')
+phosphor_logging_dep = dependency(
+  'phosphor-logging',
+  fallback: ['phosphor-logging', 'phosphor_logging_dep'])
 
 src_includes = include_directories('.')
 
@@ -39,6 +40,7 @@
   json_dep,
   phosphor_dbus_interfaces_dep,
   phosphor_logging_dep,
+  networkd_dbus_dep,
   sdbusplus_dep,
   dependency('sdeventplus', fallback: ['sdeventplus', 'sdeventplus_dep']),
   dependency('stdplus', fallback: ['stdplus', 'stdplus_dep']),
@@ -48,18 +50,9 @@
   output: 'config.h',
   configuration: conf_data)
 
-networkd_generated = [
-  conf_header,
-] + generated_sources
-
-networkd_includes = [
-  src_includes,
-  generated_includes,
-]
-
 networkd_lib = static_library(
   'networkd',
-  networkd_generated,
+  conf_header,
   'ethernet_interface.cpp',
   'neighbor.cpp',
   'ipaddress.cpp',
@@ -76,13 +69,13 @@
   'dns_updater.cpp',
   'watch.cpp',
   implicit_include_directories: false,
-  include_directories: networkd_includes,
+  include_directories: src_includes,
   dependencies: networkd_deps)
 
 networkd_dep = declare_dependency(
-  sources: networkd_generated,
+  sources: conf_header,
   dependencies: networkd_deps,
-  include_directories: networkd_includes,
+  include_directories: src_includes,
   link_with: networkd_lib)
 
 executable(
diff --git a/subprojects/nlohmann_json.wrap b/subprojects/nlohmann_json.wrap
new file mode 100644
index 0000000..0ba9c03
--- /dev/null
+++ b/subprojects/nlohmann_json.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/nlohmann/json
+revision = HEAD
diff --git a/subprojects/phosphor-dbus-interfaces.wrap b/subprojects/phosphor-dbus-interfaces.wrap
new file mode 100644
index 0000000..0be70dd
--- /dev/null
+++ b/subprojects/phosphor-dbus-interfaces.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/openbmc/phosphor-dbus-interfaces
+revision = HEAD
diff --git a/subprojects/phosphor-logging.wrap b/subprojects/phosphor-logging.wrap
new file mode 100644
index 0000000..8db07b6
--- /dev/null
+++ b/subprojects/phosphor-logging.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/openbmc/phosphor-logging
+revision = HEAD