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

# Make sure the default CFLAGS of `-O2 -g` don't override CODE_COVERAGE_CFLAGS
# It is important that this comes before AC_PROG_C{C,XX}, as we are attempting
# to stop them from populating default CFLAGS and CXXFLAGS.
AS_IF([test "x$enable_tests" = "xno"], [enable_code_coverage=no])
AS_IF([test "x$enable_code_coverage" != "xno"], [
    AS_IF([test "x${CXXFLAGS+set}" != "xset"], [
        AC_SUBST(CXXFLAGS, [""])
    ])
    AS_IF([test "x${CFLAGS+set}" != "xset"], [
        AC_SUBST(CFLAGS, [""])
    ])
])

# If building tests, enable both hardware options that are configuration controlled
AS_IF([test "x$enable_tests" = "xyes"], [enable_static_layout=yes])
AS_IF([test "x$enable_tests" = "xyes"], [enable_tarball_ubi=yes])

AS_IF([test "x$enable_tests" = "xyes"], [enable_aspeed_p2a=yes])

# You can only build main.o with one of the lpc implementations, however, specify both.
AS_IF([test "x$enable_tests" = "xyes"], [enable_aspeed_lpc=yes])
AS_IF([test "x$enable_tests" = "xyes"], [enable_nuvoton_lpc=yes])

AS_IF([test "x$enable_host_bios" = "xyes"], [enable_host_bios=yes])

# If building tests, enable building all cleanup handler options.
AS_IF([test "x$enable_tests" = "xyes"], [enable_cleanup_delete=yes])

# Checks for programs.
AC_PROG_CXX
AM_PROG_AR
AC_PROG_INSTALL
AC_PROG_MAKE_SET

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

# Checks for library functions.
LT_INIT

# Enable building the host tool (default: yes)
AC_ARG_ENABLE([build-host-tool],
    AC_HELP_STRING([--disable-build-host-tool], [Disable building the host tool])
)
AM_CONDITIONAL([BUILD_HOST_TOOL], [test "x$enable_build_host_tool" != "xno"])

# Enable building the bmc (default: yes)
AC_ARG_ENABLE([build-bmc-blob-handler],
    AC_HELP_STRING([--disable-build-bmc-blob-handler], [Disable buliding the BMC BLOB handler])
)
AM_CONDITIONAL([BUILD_BMC_HANDLER], [test "x$enable_build_bmc_blob_handler" != "xno"])

# Enable building host-bios support into the BMC (default: no)
# This is only set if build-bmc-blob-handler is not "no."
AC_ARG_ENABLE([host-bios],
    AC_HELP_STRING([--enable-host-bios], [Enable supporting the host bios])
)

# Build the BMC by default, so check if set to no.
AS_IF([test "x$enable_build_bmc_blob_handler" != "xno"], [
    PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 221])

    PKG_CHECK_MODULES(
        [SDBUSPLUS],
        [sdbusplus],
        [AC_DEFINE(HAVE_SDBUSPLUS, [1], [Found openbmc/sdbusplus package])],
        [AC_MSG_ERROR([The openbmc/sdbusplus package is required])]
    )

    AC_CHECK_HEADER(
        [blobs-ipmid/blobs.hpp],
        [],
        [AC_MSG_ERROR(["phosphor-ipmi-blobs required and not found."])]
    )

    AC_CHECK_HEADER(
        [function2/function2.hpp],
        [],
        [AC_MSG_ERROR([Could not find function2/function2.hpp])]
    )

    AC_CHECK_HEADER(
        [nlohmann/json.hpp],
        [],
        [AC_MSG_ERROR([Could not find nlohmann/json.hpp])]
    )

    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"], [
        PKG_CHECK_VAR([SYSTEMUNITDIR], [systemd], [systemdsystemunitdir], [with_systemdsystemunitdir="$SYSTEMUNITDIR"], [])
    ])
    AS_IF([test "x$with_systemdsystemunitdir" = "xyes"], [
        AC_MSG_ERROR([systemdsystemunitdir requested but pkg-config unable to query systemd package])
    ])
    AS_IF([test "x$with_systemdsystemunitdir" = "xno" -o "x$with_systemdsystemunitdir" = "xauto"], [
        with_systemdsystemunitdir=''
    ])
    AC_SUBST([systemdsystemunitdir], ["$with_systemdsystemunitdir"])
    AM_CONDITIONAL([HAVE_SYSTEMUNITDIR], [test "x$with_systemdsystemunitdir" != "x"])

    # Only set if build-bmc-blob-handler wasn't unset.
    AM_CONDITIONAL([ENABLE_HOST_BIOS], [test "x$enable_host_bios" = "xyes"])
    AS_IF([test "x$enable_host_bios" = "xyes"], [
        AX_APPEND_COMPILE_FLAGS([-DENABLE_HOST_BIOS], [CXXFLAGS])
    ])
], [
    AM_CONDITIONAL([ENABLE_HOST_BIOS], [0])
])

# If not building the host-tool, we're building the BMC.
AS_IF([test "x$enable_build_host_tool" != "xno"], [
    PKG_CHECK_MODULES(
        [PCIACCESS],
        [pciaccess >= 0.8.0],
        [],
        [AC_MSG_ERROR([Could not find libpciaccess... pciaccess package required])]
    )
    PKG_CHECK_MODULES(
        [STDPLUS],
        [stdplus],
        [],
        [AC_MSG_ERROR([Could not find stdplus... openbmc/stdplus package required])]
    )
    PKG_CHECK_MODULES(
        [FMT],
        [fmt],
        [],
        [AC_MSG_ERROR([Could not find fmt... fmtlib/fmt package required])]
    )
])

# These packages are required for both the BMC and the host-tool.
PKG_CHECK_MODULES(
    [IPMIBLOB],
    [ipmiblob],
    [],
    [AC_MSG_ERROR(
        [Could not find ipmiblob...openbmc/ipmi-blob-tool package required])
    ]
)
AX_PTHREAD([], [AC_MSG_ERROR(["pthread required and not found"])])

# Configurability

# Enable ppc host memory access
AC_ARG_ENABLE([ppc],
    AS_HELP_STRING([--enable-ppc],
                   [Enable ppc host memory access.]))
AM_CONDITIONAL([ENABLE_PPC], [test "x$enable_ppc" = "xyes"])
AS_IF([test "x$enable_ppc" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DENABLE_PPC], [CXXFLAGS])
])

# Enable the reboot update mechanism
AC_ARG_ENABLE([reboot-update],
    AS_HELP_STRING([--enable-reboot-update],
                   [Enable use of reboot update mechanism.]))
AM_CONDITIONAL([ENABLE_REBOOT_UPDATE], [test "x$enable_reboot_update" = "xyes"])
AS_IF([test "x$enable_reboot_update" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DENABLE_REBOOT_UPDATE], [CXXFLAGS])
])

# Enable the update with status file
AC_ARG_ENABLE([update-status],
    AS_HELP_STRING([--enable-update-status],
                   [Enable use of update status file.]))
AM_CONDITIONAL([ENABLE_UPDATE_STATUS], [test "x$enable_update_status" = "xyes"])
AS_IF([test "x$enable_update_status" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DENABLE_UPDATE_STATUS], [CXXFLAGS])
])

# Enable the cleanup handle that deletes the temporary files. (default: no)
AC_ARG_ENABLE([cleanup-delete],
    AS_HELP_STRING([--enable-cleanup-delete],
                   [Enable use of the delete files cleanup mechanism.]))
AM_CONDITIONAL([BUILD_CLEANUP_DELETE], [test "x$enable_cleanup_delete" = "xyes"])

# Enable static layout for firmware image staging.
AC_ARG_ENABLE([static-layout],
    AS_HELP_STRING([--enable-static-layout],
                   [Enable static layout firmware update via Blobs]))
AM_CONDITIONAL([ENABLE_STATIC_LAYOUT], [test "x$enable_static_layout" = "xyes"])
AS_IF([test "x$enable_static_layout" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DENABLE_STATIC_LAYOUT], [CXXFLAGS])
])
# Enable tarball for firmware image staging.
AC_ARG_ENABLE([tarball-ubi],
    AS_HELP_STRING([--enable-tarball-ubi],
                   [Enable tarball firmware update via Blobs]))
AS_IF([test "x$enable_tarball_ubi" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DENABLE_TARBALL_UBI], [CXXFLAGS])
])

AS_IF([test "x$enable_tarball_ubi" = "xyes"], [
    AS_IF([test "x$enable_static_layout" = "xyes"], [
        AS_IF([test "x$enable_tests" != "xyes"], [
            AC_MSG_ERROR([Invalid configuration enabling both static and ubi tarball bmc image types.])
        ])
    ])
])

# The address used for mapping P2A or LPC into the BMC's memory-space:
# e.g. https://github.com/openbmc/linux/blob/1da2ce51886a3b2f5db2087f26c661e13ee13b84/arch/arm/boot/dts/aspeed-bmc-quanta-q71l.dts#L26
# or https://github.com/openbmc/linux/blob/1da2ce51886a3b2f5db2087f26c661e13ee13b84/arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts#L166
# for PCI, this address is passed back to the host and is used directly.
AC_ARG_VAR(MAPPED_ADDRESS, [The base address of the memory region reserved for mapping.])
AS_IF([test "x$MAPPED_ADDRESS" == "x"],
    [AC_DEFINE_UNQUOTED(MAPPED_ADDRESS, [0], [Default address to 0.])],
    [AC_DEFINE_UNQUOTED(MAPPED_ADDRESS, [$MAPPED_ADDRESS], [Value for memory region mapping.])]
)

AC_ARG_ENABLE([aspeed-lpc],
    AS_HELP_STRING([--enable-aspeed-lpc],
                   [Enable external transfers using Aspeed LPC]))
AM_CONDITIONAL(ENABLE_ASPEED_LPC, [test "x$enable_aspeed_lpc" = "xyes"])
AS_IF([test "x$enable_aspeed_lpc" = "xyes"], [
    AC_CHECK_HEADER(
        [linux/aspeed-lpc-ctrl.h],
        [],
        [AC_MSG_ERROR([Could not find linux/aspeed-lpc-ctrl.h])]
    )

    AX_APPEND_COMPILE_FLAGS([-DASPEED_LPC], [CXXFLAGS])
    AX_APPEND_COMPILE_FLAGS([-DENABLE_LPC_BRIDGE], [CXXFLAGS])
])
AC_ARG_ENABLE([nuvoton-lpc],
    AS_HELP_STRING([--enable-nuvoton-lpc],
                   [Enable external transfers using Nuvoton LPC SHM]))
AM_CONDITIONAL(ENABLE_NUVOTON_LPC, [test "x$enable_nuvoton_lpc" = "xyes"])
AS_IF([test "x$enable_nuvoton_lpc" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DNUVOTON_LPC], [CXXFLAGS])
    AX_APPEND_COMPILE_FLAGS([-DENABLE_LPC_BRIDGE], [CXXFLAGS])
])

AS_IF([test "x$enable_aspeed_lpc" = "xyes"], [
    AS_IF([test "x$enable_nuvoton_lpc" = "xyes"], [
        AS_IF([test "x$enable_tests" != "xyes"], [
            AC_MSG_ERROR([Invalid configuration enabling both ASPEED and Nuvoton.])
        ])
    ])
])

AC_ARG_ENABLE([aspeed-p2a],
    AS_HELP_STRING([--enable-aspeed-p2a],
                   [Enable external transfers using Aspeed PCI-to-AHB]))
AM_CONDITIONAL(ENABLE_ASPEED_P2A, [test "x$enable_aspeed_p2a" = "xyes"])
AS_IF([test "x$enable_aspeed_p2a" = "xyes"], [
    AC_CHECK_HEADER(linux/aspeed-p2a-ctrl.h,
                    [HAVE_UAPI_LINUX_P2A_CTRL_H=""],
                    [HAVE_UAPI_LINUX_P2A_CTRL_H="-I linux/aspeed-p2a-ctrl.h"])
    AS_IF([test "$HAVE_UAPI_LINUX_P2A_CTRL_H" != ""],
        AC_MSG_WARN([Could not find linux/aspeed-p2a-ctrl.h: Attempting to download locally for building from openbmc/linux/+/dev-5.0])
        AC_SUBST([PCI_BMC_DL],
                 [`mkdir -p linux;wget https://raw.githubusercontent.com/openbmc/linux/dev-5.0/include/uapi/linux/aspeed-p2a-ctrl.h -O linux/aspeed-p2a-ctrl.h`])
    )
    AX_APPEND_COMPILE_FLAGS([-DASPEED_P2A], [CXXFLAGS])
    AX_APPEND_COMPILE_FLAGS([-DENABLE_PCI_BRIDGE], [CXXFLAGS])
])

AC_ARG_ENABLE([nuvoton-p2a-vga],
    AS_HELP_STRING([--enable-nuvoton-p2a-vga],
                   [Enable external transfers using Nuvoton PCI-to-AHB via VGA]))

AM_CONDITIONAL(ENABLE_NUVOTON_P2A_VGA, [test "x$enable_nuvoton_p2a_vga" = "xyes"])
AS_IF([test "x$enable_nuvoton_p2a_vga" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DNUVOTON_P2A_VGA], [CXXFLAGS])
    AX_APPEND_COMPILE_FLAGS([-DENABLE_PCI_BRIDGE], [CXXFLAGS])
])

AC_ARG_ENABLE([nuvoton-p2a-mbox],
    AS_HELP_STRING([--enable-nuvoton-p2a-mbox],
                   [Enable external transfers using Nuvoton PCI-to-AHB via MBOX]))

AM_CONDITIONAL(ENABLE_NUVOTON_P2A_MBOX, [test "x$enable_nuvoton_p2a_mbox" = "xyes"])
AS_IF([test "x$enable_nuvoton_p2a_mbox" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DNUVOTON_P2A_MBOX], [CXXFLAGS])
    AX_APPEND_COMPILE_FLAGS([-DENABLE_PCI_BRIDGE], [CXXFLAGS])
])

AS_IF([test "x$enable_aspeed_p2a" = "xyes"], [
    AS_IF([test "x$enable_nuvoton_lpc" = "xyes"], [
        AS_IF([test "x$enable_tests" != "xyes"], [
            AC_MSG_ERROR([Invalid configuration enabling both ASPEED and Nuvoton.])
        ])
    ])
])

AS_IF([test "x$enable_aspeed_p2a" = "xyes"], [
    AS_IF([test "x$enable_nuvoton_p2a_vga" = "xyes" -o "x$enable_nuvoton_p2a_mbox" = "xyes"], [
        AS_IF([test "x$enable_tests" != "xyes"], [
            AC_MSG_ERROR([Invalid configuration enabling both ASPEED and Nuvoton.])
        ])
    ])
])

AS_IF([test "x$enable_nuvoton_lpc" = "xyes"], [
    AS_IF([test "x$enable_nuvoton_p2a_vga" = "xyes" -o "x$enable_nuvoton_p2a_mbox" = "xyes"], [
        AS_IF([test "x$enable_tests" != "xyes"], [
            AC_MSG_ERROR([Invalid configuration enabling both PCI and LPC of Nuvoton.])
        ])
    ])
])

AS_IF([test "x$enable_nuvoton_p2a_vga" = "xyes"], [
    AS_IF([test "x$enable_nuvoton_p2a_mbox" = "xyes"], [
        AS_IF([test "x$enable_tests" != "xyes"], [
            AC_MSG_ERROR([Invalid configuration enabling both PCI-VGA and PCI-MBOX of Nuvoton.])
        ])
    ])
])

AC_ARG_ENABLE([net-bridge],
    AS_HELP_STRING([--enable-net-bridge],
                   [Enable external transfers using a TCP connection]))
AM_CONDITIONAL(ENABLE_NET_BRIDGE, [test "x$enable_net_bridge" = "xyes"])
AS_IF([test "x$enable_net_bridge" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DENABLE_NET_BRIDGE], [CXXFLAGS])
])

AC_ARG_VAR(
    STATIC_HANDLER_STAGED_NAME,
    [The file to use for staging the firmware update.]
)
AS_IF(
    [test "x$STATIC_HANDLER_STAGED_NAME" == "x"],
    [STATIC_HANDLER_STAGED_NAME="/run/initramfs/bmc-image"]
)
AC_DEFINE_UNQUOTED(
    [STATIC_HANDLER_STAGED_NAME],
    ["$STATIC_HANDLER_STAGED_NAME"],
    [The file to use for staging the firmware update.]
)

AC_ARG_VAR(
    TARBALL_STAGED_NAME,
    [The file to use for staging the firmware update.]
)
AS_IF(
    [test "x$TARBALL_STAGED_NAME" == "x"],
    [TARBALL_STAGED_NAME="/tmp/image-update.tar"]
)
AC_DEFINE_UNQUOTED(
    [TARBALL_STAGED_NAME],
    ["$TARBALL_STAGED_NAME"],
    [The file to use for staging the firmware update.]
)

AC_ARG_VAR(
    BIOS_STAGED_NAME,
    [The file to use for staging the bios firmware update.]
)
AS_IF(
    [test "x$BIOS_STAGED_NAME" == "x"],
    [BIOS_STAGED_NAME="/tmp/bios-image"]
)
AC_DEFINE_UNQUOTED(
    [BIOS_STAGED_NAME],
    ["$BIOS_STAGED_NAME"],
    [The file to use for staging the bios firmware update.]
)

AC_ARG_VAR(
    HASH_FILENAME,
    [The file to use for the hash provided.]
)
AS_IF(
    [test "x$HASH_FILENAME" == "x"],
    [HASH_FILENAME="/tmp/bmc.sig"]
)
AC_DEFINE_UNQUOTED(
    [HASH_FILENAME],
    ["$HASH_FILENAME"],
    [The file to use for the hash provided.]
)

AC_ARG_VAR(
    PREPARATION_DBUS_SERVICE,
    [The systemd target started when the host starts to send an update.]
)
AS_IF(
    [test "x$PREPARATION_DBUS_SERVICE" == "x"],
    [PREPARATION_DBUS_SERVICE="phosphor-ipmi-flash-bmc-prepare.target"]
)
AC_DEFINE_UNQUOTED(
    [PREPARATION_DBUS_SERVICE],
    ["$PREPARATION_DBUS_SERVICE"],
    [The systemd target started when the host starts to send an update.]
)

AC_ARG_VAR(
    VERIFY_STATUS_FILENAME,
    [The file checked for the verification status.]
)
AS_IF(
    [test "x$VERIFY_STATUS_FILENAME" == "x"],
    [VERIFY_STATUS_FILENAME="/tmp/bmc.verify"]
)
AC_DEFINE_UNQUOTED(
    [VERIFY_STATUS_FILENAME],
    ["$VERIFY_STATUS_FILENAME"],
    [The file checked for the verification status.]
)

AC_ARG_VAR(
    BIOS_VERIFY_STATUS_FILENAME,
    [The file checked for the verification status.]
)
AS_IF(
    [test "x$BIOS_VERIFY_STATUS_FILENAME" == "x"],
    [BIOS_VERIFY_STATUS_FILENAME="/tmp/bios.verify"]
)
AC_DEFINE_UNQUOTED(
    [BIOS_VERIFY_STATUS_FILENAME],
    ["$BIOS_VERIFY_STATUS_FILENAME"],
    [The file checked for the verification status.]
)

AC_ARG_VAR(
    VERIFY_DBUS_SERVICE,
    [The systemd target started for verification.]
)
AS_IF(
    [test "x$VERIFY_DBUS_SERVICE" == "x"],
    [VERIFY_DBUS_SERVICE="phosphor-ipmi-flash-bmc-verify.target"]
)
AC_DEFINE_UNQUOTED(
    [VERIFY_DBUS_SERVICE],
    ["$VERIFY_DBUS_SERVICE"],
    [The systemd target started for verification.]
)

AC_ARG_VAR(
    UPDATE_DBUS_SERVICE,
    [The systemd target started for updating the BMC.]
)
AS_IF(
    [test "x$UPDATE_DBUS_SERVICE" == "x"],
    [UPDATE_DBUS_SERVICE="phosphor-ipmi-flash-bmc-update.target"]
)
AC_DEFINE_UNQUOTED(
    [UPDATE_DBUS_SERVICE],
    ["$UPDATE_DBUS_SERVICE"],
    [The systemd target started for updating the BMC.]
)

AC_ARG_VAR(
    UPDATE_STATUS_FILENAME,
    [The file checked for the update status.]
)
AS_IF(
    [test "x$UPDATE_STATUS_FILENAME" == "x"],
    [UPDATE_STATUS_FILENAME="/tmp/bmc.update"]
)
AC_DEFINE_UNQUOTED(
    [UPDATE_STATUS_FILENAME],
    ["$UPDATE_STATUS_FILENAME"],
    [The file checked for the update status.]
)

AC_ARG_VAR(
    PREPARATION_BIOS_TARGET,
    [The systemd target started when the host starts to send an update.]
)
AS_IF(
    [test "x$PREPARATION_BIOS_TARGET" == "x"],
    [PREPARATION_BIOS_TARGET="phosphor-ipmi-flash-bios-prepare.target"]
)
AC_DEFINE_UNQUOTED(
    [PREPARATION_BIOS_TARGET],
    ["$PREPARATION_BIOS_TARGET"],
    [The systemd target started when the host starts to send an update.]
)
AC_ARG_VAR(
    VERIFY_BIOS_TARGET,
    [The systemd target started for verifying the BIOS image.]
)
AS_IF(
    [test "x$VERIFY_BIOS_TARGET" == "x"],
    [VERIFY_BIOS_TARGET="phosphor-ipmi-flash-bios-verify.target"]
)
AC_DEFINE_UNQUOTED(
    [VERIFY_BIOS_TARGET],
    ["$VERIFY_BIOS_TARGET"],
    [The systemd target started for verifying the BIOS image.]
)
AC_ARG_VAR(
    UPDATE_BIOS_TARGET,
    [The systemd target started for updating the BIOS.]
)
AS_IF(
    [test "x$UPDATE_BIOS_TARGET" == "x"],
    [UPDATE_BIOS_TARGET="phosphor-ipmi-flash-bios-update.target"]
)
AC_DEFINE_UNQUOTED(
    [UPDATE_BIOS_TARGET],
    ["$UPDATE_BIOS_TARGET"],
    [The systemd target started for updating the BIOS.]
)

AC_CHECK_HEADER(linux/ipmi.h, [HAVE_LINUX_IPMI_H=""], [HAVE_LINUX_IPMI_H="-I linux/ipmi.h"])
AS_IF([test "$HAVE_LINUX_IPMI_H" != ""],
    AC_MSG_WARN([Could not find linux/ipmi.h: Attempting to download locally for building from openbmc/linux/+/dev-4.18])
    AC_SUBST([IPMI_BMC_DL],
             [`mkdir -p linux;wget https://raw.githubusercontent.com/openbmc/linux/dev-4.18/include/uapi/linux/ipmi.h -O linux/ipmi.h`])
)

AC_CHECK_HEADER(linux/ipmi_msgdefs.h, [HAVE_LINUX_IPMIMSGDEFS_H=""], [HAVE_LINUX_IPMIMSGDEFS_H="-I linux/ipmi_msgdefs.h"])
AS_IF([test "$HAVE_LINUX_IPMIMSGDEFS_H" != ""],
    AC_MSG_WARN([Could not find linux/ipmi_msgdefs.h: Attempting to download locally for building from openbmc/linux/+/dev-4.18])
    AC_SUBST([IPMIMSG_BMC_DL],
             [`mkdir -p linux;wget https://raw.githubusercontent.com/openbmc/linux/dev-4.18/include/uapi/linux/ipmi_msgdefs.h -O linux/ipmi_msgdefs.h`])
)

# Make it possible for users to choose if they want test support
# explicitly or not at all
AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests],
                                      [Build test cases]))

# Check/set gtest specific functions.
AS_IF([test "x$enable_tests" != "xno"], [
    PKG_CHECK_MODULES([GTEST], [gtest], [], [true])
    PKG_CHECK_MODULES([GMOCK], [gmock], [], [true])
    AX_PTHREAD

    AX_SAVE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])
    AX_APPEND_COMPILE_FLAGS([$GTEST_CFLAGS], [CPPFLAGS])
    AC_LANG_PUSH([C++])
    AC_CHECK_HEADERS([gtest/gtest.h], [
        AS_IF([test "x$GTEST_CFLAGS" = "x"], [
            AS_IF([test "x$PTHREAD_CFLAGS" = "x"], [
                AX_APPEND_COMPILE_FLAGS(["-DGTEST_HAS_PTHREAD=0"], [GTEST_CFLAGS])
            ], [
                AX_APPEND_COMPILE_FLAGS(["-DGTEST_HAS_PTHREAD=1"], [GTEST_CFLAGS])
                AX_APPEND_COMPILE_FLAGS([$PTHREAD_CFLAGS], [GTEST_CFLAGS])
            ])
        ])
    ], [
        AS_IF([test "x$enable_tests" = "xyes"], [
            AC_MSG_ERROR([Testing enabled but could not find gtest/gtest.h])
        ])
    ])
    AC_LANG_POP([C++])
    AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])

    AX_SAVE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])
    AX_APPEND_COMPILE_FLAGS([$GMOCK_CFLAGS], [CPPFLAGS])
    AC_LANG_PUSH([C++])
    AC_CHECK_HEADERS([gmock/gmock.h], [], [
        AS_IF([test "x$enable_tests" = "xyes"], [
            AC_MSG_ERROR([Testing enabled but could not find gmock/gmock.h])
        ])
    ])
    AC_LANG_POP([C++])
    AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [CPPFLAGS])

    AX_SAVE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
    AX_APPEND_COMPILE_FLAGS([$GTEST_LIBS], [LDFLAGS])
    AC_CHECK_LIB([gtest], [main], [
        AS_IF([test "x$GTEST_LIBS" = "x"], [
            AX_APPEND_COMPILE_FLAGS([-lgtest], [GTEST_LIBS])
        ])
    ], [
        AS_IF([test "x$enable_tests" = "xyes"], [
            AC_MSG_ERROR([Testing enabled but couldn't find gtest libs])
        ])
    ])
    AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])

    AX_SAVE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
    AX_APPEND_COMPILE_FLAGS([$GMOCK_LIBS], [LDFLAGS])
    AC_CHECK_LIB([gmock], [main], [
        AS_IF([test "x$GMOCK_LIBS" = "x"], [
            AX_APPEND_COMPILE_FLAGS([-lgmock], [GMOCK_LIBS])
        ])
    ], [
        AS_IF([test "x$enable_tests" = "xyes"], [
            AC_MSG_ERROR([Testing enabled but couldn't find gmock libs])
        ])
    ])
    AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
])

# Check for valgrind
AS_IF([test "x$enable_tests" = "xno"], [enable_valgrind=no])
m4_foreach([vgtool], [valgrind_tool_list],
    [AX_VALGRIND_DFLT(vgtool, [off])])
AX_VALGRIND_DFLT([memcheck], [on])
AX_VALGRIND_CHECK
AM_EXTRA_RECURSIVE_TARGETS([check-valgrind])
m4_foreach([vgtool], [valgrind_tool_list],
    [AM_EXTRA_RECURSIVE_TARGETS([check-valgrind-]vgtool)])

# Code coverage
AX_CODE_COVERAGE
AS_IF([test "x$CODE_COVERAGE_ENABLED" = "xyes"], [
    AX_APPEND_COMPILE_FLAGS([-DHAVE_GCOV], [CODE_COVERAGE_CPPFLAGS])
])
m4_ifdef([_AX_CODE_COVERAGE_RULES],
    [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
    [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
AX_ADD_AM_MACRO_STATIC([])

# Add --enable-oe-sdk flag to configure script
AC_ARG_ENABLE([oe-sdk],
    AS_HELP_STRING([--enable-oe-sdk], [Link testcases absolutely against OE SDK so they can be ran within it.])
)

# Check for OECORE_TARGET_SYSROOT in the environment.
AC_ARG_VAR(OECORE_TARGET_SYSROOT,
    [Path to the OE SDK SYSROOT])

# Configure OESDK_TESTCASE_FLAGS environment variable, which will be later
# used in test/Makefile.am
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])
)

# Create configured output
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([bmc/Makefile])
AC_CONFIG_FILES([bmc/firmware-handler/Makefile bmc/firmware-handler/test/Makefile])
AC_CONFIG_FILES([bmc/version-handler/Makefile bmc/version-handler/test/Makefile])
AC_CONFIG_FILES([tools/Makefile tools/test/Makefile])
AC_CONFIG_FILES([cleanup/Makefile cleanup/test/Makefile])
AC_CONFIG_FILES([bmc/firmware-handler/phosphor-ipmi-flash-bmc-prepare.target])
AC_CONFIG_FILES([bmc/firmware-handler/phosphor-ipmi-flash-bmc-verify.target])
AC_CONFIG_FILES([bmc/firmware-handler/phosphor-ipmi-flash-bmc-update.target])
AC_CONFIG_FILES([bmc/firmware-handler/phosphor-ipmi-flash-bios-prepare.target])
AC_CONFIG_FILES([bmc/firmware-handler/phosphor-ipmi-flash-bios-verify.target])
AC_CONFIG_FILES([bmc/firmware-handler/phosphor-ipmi-flash-bios-update.target])
AC_CONFIG_FILES([bmc/firmware-handler/config-static-bmc-reboot.json])
AC_CONFIG_FILES([bmc/firmware-handler/config-static-bmc.json])
AC_CONFIG_FILES([bmc/firmware-handler/config-static-bmc-with-update-status.json])
AC_CONFIG_FILES([bmc/firmware-handler/config-bios.json])
AC_OUTPUT
