Add base support for PNOR code management

This is the starting code needed to build the application.

Change-Id: Ie2937ed6246b8646b9e5b4d09318bc4aa7b31c35
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
diff --git a/.gitignore b/.gitignore
index 08fb35b..43f2f95 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,6 +41,7 @@
 /config.h.in~
 /config.log
 /config.status
+/openpower-version-host-software-manager
 Makefile
 .deps
 *-libtool
diff --git a/Makefile.am b/Makefile.am
new file mode 100755
index 0000000..7d8aa90
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,21 @@
+AM_DEFAULT_SOURCE_EXT = .cpp
+
+sbin_PROGRAMS = \
+	openpower-version-host-software-manager
+
+openpower_version_host_software_manager_SOURCES = \
+	version_host_software_manager.cpp \
+	version_host_software_manager_main.cpp
+
+generic_cxxflags = \
+	$(SYSTEMD_CFLAGS) \
+	$(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
+	$(SDBUSPLUS_CFLAGS)
+generic_ldflags = \
+	$(SYSTEMD_LIBS) \
+	$(PHOSPHOR_DBUS_INTERFACES_LIBS) \
+	$(SDBUSPLUS_LIBS)
+
+openpower_version_host_software_manager_CXXFLAGS = $(generic_cxxflags)
+openpower_version_host_software_manager_LDFLAGS = $(generic_ldflags)
+
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..f861496
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,18 @@
+#!/bin/sh -xe
+
+AUTOCONF_FILES="Makefile.in aclocal.m4 ar-lib autom4te.cache compile \
+        config.guess config.h.in config.sub configure depcomp install-sh \
+        ltmain.sh missing *libtool test-driver"
+
+case $1 in
+    clean)
+        test -f Makefile && make maintainer-clean
+        for file in ${AUTOCONF_FILES}; do
+            find -name "$file" | xargs -r rm -rf
+        done
+        exit 0
+        ;;
+esac
+
+autoreconf -i
+echo 'Run "./configure ${CONFIGURE_FLAGS} && make"'
diff --git a/configure.ac b/configure.ac
new file mode 100755
index 0000000..eaf171f
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,37 @@
+AC_PREREQ([2.69])
+AC_INIT([openpower-pnor-code-mgmt], [1.0], [https://github.com/openbmc/openpower-pnor-code-mgmt/issues])
+AC_LANG([C++])
+AC_CONFIG_HEADERS([config.h])
+AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
+AM_SILENT_RULES([yes])
+
+# Checks for programs
+AC_PROG_CXX
+AC_PROG_INSTALL #Checks/sets the install variable to be used
+AC_PROG_MAKE_SET
+
+# Check for libraries
+PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces],,\
+    AC_MSG_ERROR(["Requires phosphor-dbus-interfaces package."]))
+PKG_CHECK_MODULES([SDBUSPLUS], [sdbusplus],,
+    AC_MSG_ERROR(["Requires sdbusplus package."]))
+
+# Checks for library functions
+LT_INIT # Required for systemd linking
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX_14([noext])
+AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])
+
+AC_ARG_VAR(VERSION_BUSNAME, [The Dbus busname to own])
+AS_IF([test "x$VERSION_BUSNAME" == "x"],
+    [VERSION_BUSNAME="org.open_power.Software.Host.Version"])
+AC_DEFINE_UNQUOTED([VERSION_BUSNAME], ["$VERSION_BUSNAME"], [The DBus busname to own])
+
+AC_ARG_VAR(SOFTWARE_OBJPATH, [The software manager Dbus root])
+AS_IF([test "x$SOFTWARE_OBJPATH" == "x"], [SOFTWARE_OBJPATH="/xyz/openbmc_project/software"])
+AC_DEFINE_UNQUOTED([SOFTWARE_OBJPATH], ["$SOFTWARE_OBJPATH"], [The software manager Dbus root])
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+
diff --git a/version_host_software_manager.cpp b/version_host_software_manager.cpp
new file mode 100755
index 0000000..1fc562e
--- /dev/null
+++ b/version_host_software_manager.cpp
@@ -0,0 +1,13 @@
+#include "version_host_software_manager.hpp"
+
+namespace openpower
+{
+namespace software
+{
+namespace manager
+{
+
+} // namespace manager
+} // namespace software
+} // namepsace openpower
+
diff --git a/version_host_software_manager.hpp b/version_host_software_manager.hpp
new file mode 100755
index 0000000..d674f9c
--- /dev/null
+++ b/version_host_software_manager.hpp
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include "xyz/openbmc_project/Software/Version/server.hpp"
+
+namespace openpower
+{
+namespace software
+{
+namespace manager
+{
+
+using VersionInherit = sdbusplus::server::object::object<
+    sdbusplus::xyz::openbmc_project::Software::server::Version>;
+
+/** @class Version
+ *  @brief OpenBMC version software management implementation.
+ *  @details A concrete implementation for xyz.openbmc_project.Software.Version
+ *  DBus API.
+ */
+class Version : public VersionInherit
+{
+    public:
+        /** @brief Constructs Version Software Manager
+         *
+         * @param[in] bus       - The Dbus bus object
+         * @param[in] objPath   - The Dbus object path
+         */
+        Version(sdbusplus::bus::bus& bus,
+                const char* objPath) : VersionInherit(
+                    bus, objPath) {};
+};
+
+} // namespace manager
+} // namespace software
+} // namespace openpower
+
diff --git a/version_host_software_manager_main.cpp b/version_host_software_manager_main.cpp
new file mode 100755
index 0000000..5b77904
--- /dev/null
+++ b/version_host_software_manager_main.cpp
@@ -0,0 +1,21 @@
+#include <sdbusplus/bus.hpp>
+#include "config.h"
+#include "version_host_software_manager.hpp"
+
+int main(int argc, char* argv[])
+{
+    auto bus = sdbusplus::bus::new_default();
+
+    // Add sdbusplus ObjectManager.
+    sdbusplus::server::manager::manager objManager(bus,
+            SOFTWARE_OBJPATH);
+
+    bus.request_name(VERSION_BUSNAME);
+
+    while (true)
+    {
+        bus.process_discard();
+        bus.wait();
+    }
+    return 0;
+}