# Inspired from /usr/share/autoconf/autoconf/c.m4
#
# Note: __forceinline also exist, but is not recommended if the C compiler
#       think it is not worth inlining
#
MACRO (FINDINLINE)
  FOREACH (KEYWORD "inline" "__inline__" "inline__" "__inline")
    MESSAGE(STATUS "Looking for ${KEYWORD}")
    TRY_COMPILE (C_HAS_${KEYWORD} ${CMAKE_CURRENT_BINARY_DIR}
      ${CMAKE_CURRENT_SOURCE_DIR}/cmake/inline.c
      COMPILE_DEFINITIONS "-DC_INLINE=${KEYWORD}")
    IF (C_HAS_${KEYWORD})
      MESSAGE(STATUS "Looking for ${KEYWORD} - found")
      SET (C_INLINE ${KEYWORD})
      BREAK ()
    ENDIF ()
  ENDFOREACH ()
ENDMACRO()
IF (NOT C_INLINE)
  FINDINLINE ()
  SET (C_INLINE "${C_INLINE}" CACHE STRING "C inline")
  MARK_AS_ADVANCED (C_INLINE)
  IF ("${C_INLINE}" STREQUAL "inline")
    MESSAGE (STATUS "  C_INLINE_IS_INLINE is true")
    SET (C_INLINE_IS_INLINE "true" CACHE STRING "C inline is inline")
  ELSE ()
    MESSAGE (STATUS "  C_INLINE_IS_INLINE is false")
    SET (C_INLINE_IS_INLINE FALSE CACHE BOOL "C inline is inline")
  ENDIF ()
  MARK_AS_ADVANCED (C_INLINE_IS_INLINE)
  MESSAGE (STATUS "  C inlining is done with ${C_INLINE}")
ENDIF (NOT C_INLINE)