CMAKE_MINIMUM_REQUIRED(VERSION 3.0...3.20)
PROJECT(TDengine)

IF (TD_LINUX_64)
  find_program(HAVE_ODBCINST NAMES odbcinst)
  IF (HAVE_ODBCINST)
    include(CheckSymbolExists)
    # shall we revert CMAKE_REQUIRED_LIBRARIES and how?
    set(CMAKE_REQUIRED_LIBRARIES odbc)
    check_symbol_exists(SQLExecute "sql.h" HAVE_ODBC_DEV)
    if(NOT (HAVE_ODBC_DEV))
      unset(HAVE_ODBC_DEV CACHE)
      message(WARNING "unixodbc-dev is not installed yet, you may install it under ubuntu by typing: sudo apt install unixodbc-dev")
    else ()
      message(STATUS "unixodbc/unixodbc-dev are installed, and odbc connector will be built")
      find_package(FLEX)
      if(NOT FLEX_FOUND)
        message(WARNING "you need to install flex first")
      else ()
        if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0.0)
          message(WARNING "gcc 4.8.0 will complain too much about flex-generated code, we just bypass building ODBC driver in such case")
        else ()
          SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ")
          SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ")
          ADD_SUBDIRECTORY(src)
          ADD_SUBDIRECTORY(tools)
          ADD_SUBDIRECTORY(examples)
        endif ()
      endif()
    endif()
  ELSE ()
    message(WARNING "unixodbc is not installed yet, you may install it under ubuntu by typing: sudo apt install unixodbc")
  ENDIF ()
ENDIF ()

IF (TD_DARWIN)
  find_program(HAVE_ODBCINST NAMES odbcinst)
  IF (HAVE_ODBCINST)
    include(CheckSymbolExists)
    # shall we revert CMAKE_REQUIRED_LIBRARIES and how?
    set(CMAKE_REQUIRED_LIBRARIES odbc)
    set(CMAKE_REQUIRED_INCLUDES /usr/local/include)
    set(CMAKE_REQUIRED_LINK_OPTIONS -L/usr/local/lib)
    check_symbol_exists(SQLExecute "sql.h" HAVE_ODBC_DEV)
    if(NOT (HAVE_ODBC_DEV))
      unset(HAVE_ODBC_DEV CACHE)
      message(WARNING "unixodbc-dev is not installed yet, you may install it with homebrew by typing: brew install unixodbc")
    else ()
      message(STATUS "unixodbc/unixodbc-dev are installed, and odbc connector will be built")
      find_package(FLEX)
      if(NOT FLEX_FOUND)
        message(WARNING "you need to install flex first")
      else ()
        if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0.0)
          message(WARNING "gcc 4.8.0 will complain too much about flex-generated code, we just bypass building ODBC driver in such case")
        else ()
          SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wconversion")
          SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wconversion")
          ADD_SUBDIRECTORY(src)
          ADD_SUBDIRECTORY(tools)
          ADD_SUBDIRECTORY(examples)
        endif ()
      endif()
    endif()
  ELSE ()
    message(WARNING "unixodbc is not installed yet, you may install it under ubuntu by typing: brew install unixodbc")
  ENDIF ()
ENDIF ()

IF (TD_WINDOWS_64)
  find_package(ODBC)
  if (NOT ODBC_FOUND)
    message(WARNING "you need to install ODBC first")
  else ()
    message(STATUS "ODBC_INCLUDE_DIRS: ${ODBC_INCLUDE_DIRS}")
    message(STATUS "ODBC_LIBRARIES: ${ODBC_LIBRARIES}")
    message(STATUS "ODBC_CONFIG: ${ODBC_CONFIG}")
  endif ()
  find_package(FLEX)
  if(NOT FLEX_FOUND)
    message(WARNING "you need to install flex first\n"
                    "you may go to: https://github.com/lexxmark/winflexbison\n"
                    "or download from: https://github.com/lexxmark/winflexbison/releases")
  else ()
    ADD_SUBDIRECTORY(src)
    ADD_SUBDIRECTORY(tools)
    ADD_SUBDIRECTORY(examples)
  endif()
ENDIF ()

