control: JSON parsing compile framework
Add the enabling framework of use of JSON config files for fan control.
Tested:
Compile passes when `--enable-json` configure flag given
Compile passes without enabling JSON
No functional change when not using JSON
Change-Id: Ic70bfc63ad74cb79559ed839784cd214df403cb2
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/configure.ac b/configure.ac
index 89221ad..fd6284f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -110,61 +110,72 @@
])
AS_IF([test "x$enable_control" != "xno"], [
- # Add fan control Dbus attributes
- AC_ARG_VAR(CONTROL_BUSNAME, [The fan control busname to own])
- AS_IF([test "x$CONTROL_BUSNAME" == "x"],
- [CONTROL_BUSNAME="xyz.openbmc_project.Control.Thermal"])
- AC_DEFINE_UNQUOTED([CONTROL_BUSNAME], ["$CONTROL_BUSNAME"],
- [The fan control busname to own])
+ # Add fan control Dbus attributes
+ AC_ARG_VAR(CONTROL_BUSNAME, [The fan control busname to own])
+ AS_IF([test "x$CONTROL_BUSNAME" == "x"],
+ [CONTROL_BUSNAME="xyz.openbmc_project.Control.Thermal"])
+ AC_DEFINE_UNQUOTED([CONTROL_BUSNAME], ["$CONTROL_BUSNAME"],
+ [The fan control busname to own])
- AC_ARG_VAR(CONTROL_OBJPATH, [The fan control root object path])
- AS_IF([test "x$CONTROL_OBJPATH" == "x"],
- [CONTROL_OBJPATH="/xyz/openbmc_project/control/thermal"])
- AC_DEFINE_UNQUOTED([CONTROL_OBJPATH], ["$CONTROL_OBJPATH"],
- [The fan control root object path])
+ AC_ARG_VAR(CONTROL_OBJPATH, [The fan control root object path])
+ AS_IF([test "x$CONTROL_OBJPATH" == "x"],
+ [CONTROL_OBJPATH="/xyz/openbmc_project/control/thermal"])
+ AC_DEFINE_UNQUOTED([CONTROL_OBJPATH], ["$CONTROL_OBJPATH"],
+ [The fan control root object path])
- AC_ARG_VAR(CONTROL_PERSIST_ROOT_PATH, [Root path for persisting zone property states])
- AS_IF([test "x$CONTROL_PERSIST_ROOT_PATH" == "x"],
- [CONTROL_PERSIST_ROOT_PATH="/var/lib/phosphor-fan-presence/control"])
- AC_DEFINE_UNQUOTED([CONTROL_PERSIST_ROOT_PATH], ["$CONTROL_PERSIST_ROOT_PATH"],
- [Root path for persisting zone property states])
+ AC_ARG_VAR(CONTROL_PERSIST_ROOT_PATH, [Root path for persisting zone property states])
+ AS_IF([test "x$CONTROL_PERSIST_ROOT_PATH" == "x"],
+ [CONTROL_PERSIST_ROOT_PATH="/var/lib/phosphor-fan-presence/control"])
+ AC_DEFINE_UNQUOTED([CONTROL_PERSIST_ROOT_PATH], ["$CONTROL_PERSIST_ROOT_PATH"],
+ [Root path for persisting zone property states])
- # Add optional yaml file arguments
- AC_ARG_VAR(FAN_DEF_YAML_FILE,
- [The fan definition file to use])
- AS_IF([test "x$FAN_DEF_YAML_FILE" == "x"],
- [FAN_DEF_YAML_FILE="\${top_srcdir}/control/example/fans.yaml"])
- AC_DEFINE_UNQUOTED([FAN_DEF_YAML_FILE], ["$FAN_DEF_YAML_FILE"],
- [The fan definition file to use])
+ # Use runtime(json) config, otherwise default to compile time(yaml) config
+ AM_COND_IF([WANT_JSON],
+ [
+ AC_CHECK_HEADER(nlohmann/json.hpp, ,
+ [AC_MSG_ERROR([Could not find nlohmann/json.hpp... nlohmann/json package required])])
+ # Set config flag for runtime json usage
+ AC_DEFINE([CONTROL_USE_JSON], [1], [Fan control use runtime json configuration])
+ AC_MSG_NOTICE([Fan control json configuration usage enabled])
+ ],
+ [
+ # Add optional yaml file arguments
+ AC_ARG_VAR(FAN_DEF_YAML_FILE,
+ [The fan definition file to use])
+ AS_IF([test "x$FAN_DEF_YAML_FILE" == "x"],
+ [FAN_DEF_YAML_FILE="\${top_srcdir}/control/example/fans.yaml"])
+ AC_DEFINE_UNQUOTED([FAN_DEF_YAML_FILE], ["$FAN_DEF_YAML_FILE"],
+ [The fan definition file to use])
- AC_ARG_VAR(FAN_ZONE_YAML_FILE,
- [The fan zone definition file to use])
- AS_IF([test "x$FAN_ZONE_YAML_FILE" == "x"],
- [FAN_ZONE_YAML_FILE="\${top_srcdir}/control/example/zones.yaml"])
- AC_DEFINE_UNQUOTED([FAN_ZONE_YAML_FILE], ["$FAN_ZONE_YAML_FILE"],
- [The fan zone definition file to use])
+ AC_ARG_VAR(FAN_ZONE_YAML_FILE,
+ [The fan zone definition file to use])
+ AS_IF([test "x$FAN_ZONE_YAML_FILE" == "x"],
+ [FAN_ZONE_YAML_FILE="\${top_srcdir}/control/example/zones.yaml"])
+ AC_DEFINE_UNQUOTED([FAN_ZONE_YAML_FILE], ["$FAN_ZONE_YAML_FILE"],
+ [The fan zone definition file to use])
- AC_ARG_VAR(ZONE_EVENTS_YAML_FILE,
- [The zone events definition file to use])
- AS_IF([test "x$ZONE_EVENTS_YAML_FILE" == "x"],
- [ZONE_EVENTS_YAML_FILE="\${top_srcdir}/control/example/events.yaml"])
- AC_DEFINE_UNQUOTED([ZONE_EVENTS_YAML_FILE], ["$ZONE_EVENTS_YAML_FILE"],
- [The zone events definition file to use])
+ AC_ARG_VAR(ZONE_EVENTS_YAML_FILE,
+ [The zone events definition file to use])
+ AS_IF([test "x$ZONE_EVENTS_YAML_FILE" == "x"],
+ [ZONE_EVENTS_YAML_FILE="\${top_srcdir}/control/example/events.yaml"])
+ AC_DEFINE_UNQUOTED([ZONE_EVENTS_YAML_FILE], ["$ZONE_EVENTS_YAML_FILE"],
+ [The zone events definition file to use])
- AC_ARG_VAR(ZONE_CONDITIONS_YAML_FILE,
- [The zone conditions definition file to use])
- AS_IF([test "x$ZONE_CONDITIONS_YAML_FILE" == "x"],
- [ZONE_CONDITIONS_YAML_FILE="\${top_srcdir}/control/example/zone_conditions.yaml"])
- AC_DEFINE_UNQUOTED([ZONE_CONDITIONS_YAML_FILE], ["$ZONE_CONDITIONS_YAML_FILE"],
- [The zone conditions definition file to use])
+ AC_ARG_VAR(ZONE_CONDITIONS_YAML_FILE,
+ [The zone conditions definition file to use])
+ AS_IF([test "x$ZONE_CONDITIONS_YAML_FILE" == "x"],
+ [ZONE_CONDITIONS_YAML_FILE="\${top_srcdir}/control/example/zone_conditions.yaml"])
+ AC_DEFINE_UNQUOTED([ZONE_CONDITIONS_YAML_FILE], ["$ZONE_CONDITIONS_YAML_FILE"],
+ [The zone conditions definition file to use])
- AC_SUBST([GEN_FAN_ZONE_DEFS],
- ["$PYTHON \${top_srcdir}/control/gen-fan-zone-defs.py \
- -f $FAN_DEF_YAML_FILE \
- -z $FAN_ZONE_YAML_FILE \
- -e $ZONE_EVENTS_YAML_FILE \
- -c $ZONE_CONDITIONS_YAML_FILE"])
- AC_CONFIG_FILES([control/Makefile])
+ AC_SUBST([GEN_FAN_ZONE_DEFS],
+ ["$PYTHON \${top_srcdir}/control/gen-fan-zone-defs.py \
+ -f $FAN_DEF_YAML_FILE \
+ -z $FAN_ZONE_YAML_FILE \
+ -e $ZONE_EVENTS_YAML_FILE \
+ -c $ZONE_CONDITIONS_YAML_FILE"])
+ ])
+ AC_CONFIG_FILES([control/Makefile])
])
AS_IF([test "x$enable_cooling_type" != "xno"], [