# Initialization
AC_PREREQ([2.69])
AC_INIT([phosphor-fan-presence], [1.0],
[https://github.com/openbmc/phosphor-fan-presence/issues])
AC_LANG([C++])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
AM_SILENT_RULES([yes])

# Use gcc-ar and gcc-ranlib for static libraries built with -flto
AC_SUBST([AR], [${ac_tool_prefix}gcc-ar])
AC_SUBST([RANLIB], [${ac_tool_prefix}gcc-ranlib])

# Checks for programs.
AC_PROG_CXX
AM_PROG_AR
AC_PROG_INSTALL
AC_PROG_MAKE_SET

# Python
AM_PATH_PYTHON([3], [AC_SUBST([PYTHON], [echo "$PYTHON"])],
[AC_MSG_ERROR([Minimum python version(3) not found])])

# Checks for typedefs, structures, and compiler characteristics.
AX_CXX_COMPILE_STDCXX_17([noext])
AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])

# Checks for libraries.
PKG_CHECK_MODULES([SDBUSPLUS], [sdbusplus])
PKG_CHECK_MODULES([SDEVENTPLUS], [sdeventplus])
PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging])
PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 221])
PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces])
PKG_CHECK_MODULES([LIBEVDEV], [libevdev])
PKG_CHECK_MODULES([STDPLUS], [stdplus])
PKG_CHECK_MODULES([FMT], [fmt])

# Checks for library functions.
LT_INIT # Required for systemd linking

# Check/set gtest specific functions.
AX_PTHREAD([GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"],[GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=0"])
AC_SUBST(GTEST_CPPFLAGS)
AC_ARG_ENABLE([oe-sdk],
    AS_HELP_STRING([--enable-oe-sdk], [Link testcases absolutely against OE SDK so they can be ran within it.])
)
AC_ARG_VAR(OECORE_TARGET_SYSROOT,
    [Path to the OE SDK SYSROOT])
AS_IF([test "x$enable_oe_sdk" == "xyes"],
    AS_IF([test "x$OECORE_TARGET_SYSROOT" == "x"],
          AC_MSG_ERROR([OECORE_TARGET_SYSROOT must be set with --enable-oe-sdk])
    )
    AC_MSG_NOTICE([Enabling OE-SDK at $OECORE_TARGET_SYSROOT])
    [
        testcase_flags="-Wl,-rpath,\${OECORE_TARGET_SYSROOT}/lib"
        testcase_flags="${testcase_flags} -Wl,-rpath,\${OECORE_TARGET_SYSROOT}/usr/lib"
        testcase_flags="${testcase_flags} -Wl,-dynamic-linker,`find \${OECORE_TARGET_SYSROOT}/lib/ld-*.so | sort -r -n | head -n1`"
    ]
    AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
)

PKG_PROG_PKG_CONFIG
AC_ARG_WITH([systemdsystemunitdir],
     [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
     [with_systemdsystemunitdir=auto])
AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
     def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)

     AS_IF([test "x$def_systemdsystemunitdir" = "x"],
   [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
    [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
    with_systemdsystemunitdir=no],
   [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
      [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])

AC_ARG_ENABLE([json],
    AS_HELP_STRING([--enable-json], [Use json at runtime to configure fan packages.]))
AC_ARG_ENABLE([presence],
    AS_HELP_STRING([--disable-presence], [Disable fan presence package.]))
AC_ARG_ENABLE([control],
    AS_HELP_STRING([--disable-control], [Disable fan control package.]))
AC_ARG_ENABLE([json-control],
    AS_HELP_STRING([--disable-json-control], [Disable the use of JSON to configure fan control in favor of YAML.]))
AC_ARG_ENABLE([cooling-type],
    AS_HELP_STRING([--disable-cooling-type], [Disable cooling-type package.]))
AC_ARG_ENABLE([monitor],
    AS_HELP_STRING([--disable-monitor], [Disable monitor]))
AC_ARG_ENABLE([sensor-monitor],
    AS_HELP_STRING([--enable-sensor-monitor], [Enable sensor monitor]))

AM_CONDITIONAL([WANT_JSON], [test "x$enable_json" == "xyes"])
AM_CONDITIONAL([WANT_JSON_CONTROL], [test "x$enable_json" == "xyes" -a "x$enable_json_control" != "xno"])
AM_CONDITIONAL([WANT_PRESENCE], [test "x$enable_presence" != "xno"])
AM_CONDITIONAL([WANT_CONTROL], [test "x$enable_control" != "xno"])
AM_CONDITIONAL([WANT_COOLING_TYPE], [test "x$enable_cooling_type" != "xno"])
AM_CONDITIONAL([WANT_MONITOR], [test "x$enable_monitor" != "xno"])
AM_CONDITIONAL([WANT_SENSOR_MONITOR], [test "x$enable_sensor_monitor" == "xyes"])


AC_ARG_ENABLE([host-state],
    AS_HELP_STRING([--enable-host-state], [Enable host state]))

AM_CONDITIONAL([WANT_HOST_STATE], [test "x$enable_host_state" == "xyes"])

AM_COND_IF([WANT_HOST_STATE],
    [
        AM_CONDITIONAL(HOST_STATE_ENABLED, true)
    ],
    [
        AM_CONDITIONAL(HOST_STATE_ENABLED, false)
    ]
)

# Package specific checks.
AS_IF([test "x$enable_presence" != "xno"], [
    # Use runtime(json) config, otherwise default to compile time(yaml) config
    AM_COND_IF([WANT_JSON],
    [
        AC_ARG_VAR(MACHINE, [Machine name to install a particular set of associated config file(s)])
        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([PRESENCE_USE_JSON], [1], [Fan presence use runtime json configuration])
        AC_MSG_NOTICE([Fan presence json configuration usage enabled])
        AC_CONFIG_FILES([presence/service_files/json/phosphor-fan-presence-tach@.service])
    ],
    [
        # Add optional yaml file argument
        AC_ARG_VAR(PRESENCE_CONFIG, [The fan presence config file.])

       AS_IF([test "x$PRESENCE_CONFIG" == "x"],
             [PRESENCE_CONFIG="\${top_srcdir}/presence/example/example.yaml"])

       AC_DEFINE_UNQUOTED([PRESENCE_CONFIG], ["$PRESENCE_CONFIG"],
                          [The fan presence config file.])

       AC_SUBST([PFPGEN],
                ["$PYTHON \${top_srcdir}/presence/pfpgen.py generate-cpp -i $PRESENCE_CONFIG"])

        AC_CONFIG_FILES([presence/service_files/yaml/phosphor-fan-presence-tach@.service])
    ])

    AC_ARG_VAR(NUM_PRESENCE_LOG_ENTRIES, [Maximum number of entries in the message log])
    AS_IF([test "x$NUM_PRESENCE_LOG_ENTRIES" == "x"], [NUM_PRESENCE_LOG_ENTRIES=50])
    AC_DEFINE_UNQUOTED([NUM_PRESENCE_LOG_ENTRIES], [$NUM_PRESENCE_LOG_ENTRIES],
                       [Maximum number of entries in the message log])

    AC_CONFIG_FILES([presence/Makefile])
])

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])

    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])

    # Use runtime(json) config, otherwise default to compile time(yaml) config
    AM_COND_IF([WANT_JSON_CONTROL],
    [
        AC_ARG_VAR(MACHINE, [Machine name to install a particular set of associated config file(s)])
        AC_CHECK_HEADER(nlohmann/json.hpp, ,
                [AC_MSG_ERROR([Could not find nlohmann/json.hpp... nlohmann/json package required])])
        AC_CHECK_HEADER(CLI/CLI.hpp, ,
                [AC_MSG_ERROR([Could not find CLI/CLI.hpp... cli11 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])
        AC_CONFIG_FILES([control/service_files/json/phosphor-fan-control@.service])
    ],
    [
        # 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(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_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/service_files/yaml/phosphor-fan-control-init@.service
                         control/service_files/yaml/phosphor-fan-control@.service])
    ])
    AC_CONFIG_FILES([control/Makefile])
])

AS_IF([test "x$enable_cooling_type" != "xno"], [
       AC_CONFIG_FILES([cooling-type/Makefile])
])

AS_IF([test "x$enable_monitor" != "xno"], [
    # Use runtime(json) config, otherwise default to compile time(yaml) config
    AM_COND_IF([WANT_JSON],
    [
        AC_ARG_VAR(MACHINE, [Machine name to install a particular set of associated config file(s)])
        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([MONITOR_USE_JSON], [1], [Fan monitor use runtime json configuration])
        AC_MSG_NOTICE([Fan monitor json configuration usage enabled])
        AC_CONFIG_FILES([monitor/service_files/json/phosphor-fan-monitor@.service])
    ],
    [
        AC_ARG_VAR(FAN_MONITOR_YAML_FILE,
                   [The fan monitor definition file to use])
        AS_IF([test "x$FAN_MONITOR_YAML_FILE" == "x"],
              [FAN_MONITOR_YAML_FILE="\${top_srcdir}/monitor/example/monitor.yaml"])
        AC_DEFINE_UNQUOTED([FAN_MONITOR_YAML_FILE], ["$FAN_MONITOR_YAML_FILE"],
                           [The fan monitor definition file to use])

        AC_SUBST([GEN_FAN_MONITOR_DEFS],
                 ["$PYTHON \${top_srcdir}/monitor/gen-fan-monitor-defs.py \
                  -m $FAN_MONITOR_YAML_FILE"])

        AC_CONFIG_FILES([monitor/service_files/yaml/phosphor-fan-monitor-init@.service
                         monitor/service_files/yaml/phosphor-fan-monitor@.service])
    ])

    AC_ARG_VAR(NUM_MONITOR_LOG_ENTRIES, [Maximum number of entries in the message log])
    AS_IF([test "x$NUM_MONITOR_LOG_ENTRIES" == "x"], [NUM_MONITOR_LOG_ENTRIES=75])
    AC_DEFINE_UNQUOTED([NUM_MONITOR_LOG_ENTRIES], [$NUM_MONITOR_LOG_ENTRIES],
                       [Maximum number of entries in the message log])

    AC_ARG_VAR(THERMAL_ALERT_BUSNAME, [The thermal alert busname to own])
    AS_IF([test "x$THERMAL_ALERT_BUSNAME" == "x"],
          [THERMAL_ALERT_BUSNAME="xyz.openbmc_project.Thermal.Alert"])
    AC_DEFINE_UNQUOTED([THERMAL_ALERT_BUSNAME], ["$THERMAL_ALERT_BUSNAME"],
                       [The thermal alert busname to own])

    AC_ARG_VAR(THERMAL_ALERT_OBJPATH, [The thermal alert D-Bus object path])
    AS_IF([test "x$THERMAL_ALERT_OBJPATH" == "x"],
          [THERMAL_ALERT_OBJPATH="/xyz/openbmc_project/alerts/thermal_fault_alert"])
    AC_DEFINE_UNQUOTED([THERMAL_ALERT_OBJPATH], ["$THERMAL_ALERT_OBJPATH"],
                       [The thermal alert D-Bus object path])

    AC_CONFIG_FILES([monitor/Makefile])
])

AS_IF([test "x$enable_sensor_monitor" == "xyes"], [

    AC_ARG_VAR(SENSOR_MONITOR_PERSIST_ROOT_PATH,
               [Root path for persisting sensor monitor data])
    AS_IF([test "x$SENSOR_MONITOR_PERSIST_ROOT_PATH" == "x"],
          [SENSOR_MONITOR_PERSIST_ROOT_PATH="/var/lib/phosphor-fan-presence/sensor-monitor"])
    AC_DEFINE_UNQUOTED([SENSOR_MONITOR_PERSIST_ROOT_PATH],
                       ["$SENSOR_MONITOR_PERSIST_ROOT_PATH"],
                       [Root path for persisting sensor monitor data])

    #Default hard shutdown delay is 23 seconds
    AC_ARG_VAR(SHUTDOWN_ALARM_HARD_SHUTDOWN_DELAY_MS,
            [Milliseconds to delay the alarm hard shutdown])
    AS_IF([test "x$SHUTDOWN_ALARM_HARD_SHUTDOWN_DELAY_MS" == "x"],
        [SHUTDOWN_ALARM_HARD_SHUTDOWN_DELAY_MS=23000])
    AC_DEFINE_UNQUOTED([SHUTDOWN_ALARM_HARD_SHUTDOWN_DELAY_MS],
                       [$SHUTDOWN_ALARM_HARD_SHUTDOWN_DELAY_MS],
                       [Milliseconds to delay the alarm hard shutdown])

    #Default soft shutdown delay is 15 minutes
    AC_ARG_VAR(SHUTDOWN_ALARM_SOFT_SHUTDOWN_DELAY_MS,
               [Milliseconds to delay the alarm soft shutdown])
    AS_IF([test "x$SHUTDOWN_ALARM_SOFT_SHUTDOWN_DELAY_MS" == "x"],
        [SHUTDOWN_ALARM_SOFT_SHUTDOWN_DELAY_MS=900000])
    AC_DEFINE_UNQUOTED([SHUTDOWN_ALARM_SOFT_SHUTDOWN_DELAY_MS],
                       [$SHUTDOWN_ALARM_SOFT_SHUTDOWN_DELAY_MS],
                       [Milliseconds to delay the alarm soft shutdown])

    AC_CONFIG_FILES([sensor-monitor/Makefile sensor-monitor/service_files/sensor-monitor.service])
])

eval "eval BINDIR=$bindir"
AC_SUBST([BINDIR])


# Create configured output
AC_CONFIG_FILES([Makefile test/Makefile presence/test/Makefile monitor/test/Makefile])
AC_OUTPUT
