CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
PROJECT(rcon)

INCLUDE(CheckFunctionExists)
FIND_PACKAGE(PkgConfig)

PKG_CHECK_MODULES(GLIB2 REQUIRED glib-2.0)

SET(INSTALL_BASH_COMPLETION OFF CACHE BOOL "Install bash completion?")

SET(SOURCES
  "main.c"
  "srcrcon.c"
  "config.c"
  "memstream.c"
  "fmemopen.c"
  )
SET(HEADERS
  "srcrcon.h"
  "config.h"
  "memstream.h"
  "fmemopen.h"
  ${CMAKE_CURRENT_BINARY_DIR}/sysconfig.h)

INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include"
  ${CMAKE_CURRENT_BINARY_DIR}
  ${GLIB2_INCLUDE_DIRS})

LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})

ADD_DEFINITIONS("-Wall -Werror")

CHECK_FUNCTION_EXISTS(open_memstream HAVE_OPEN_MEMSTREAM)
CHECK_FUNCTION_EXISTS(fmemopen HAVE_FMEMOPEN)
CHECK_FUNCTION_EXISTS(arc4random_uniform HAVE_ARC4RANDOM_UNIFORM)
CHECK_FUNCTION_EXISTS(pledge HAVE_PLEDGE)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/sysconfig.h.in
  ${CMAKE_CURRENT_BINARY_DIR}/sysconfig.h)

ADD_EXECUTABLE(rcon ${SOURCES} ${HEADERS})
TARGET_LINK_LIBRARIES(rcon ${GLIB2_LIBRARIES})

IF (NOT HAVE_ARC4RANDOM_UNIFORM)
  PKG_CHECK_MODULES(BSD REQUIRED libbsd)
  INCLUDE_DIRECTORIES(${BSD_INCLUDE_DIRS})
  TARGET_LINK_LIBRARIES(rcon ${BSD_LIBRARIES})
ENDIF()

INSTALL(TARGETS rcon RUNTIME DESTINATION bin)
INSTALL(FILES rcon.1 DESTINATION share/man/man1)
SET_PROPERTY(TARGET rcon PROPERTY C_STANDARD 90)

IF(INSTALL_BASH_COMPLETION)
  # Try bash completion
  PKG_CHECK_MODULES(BC REQUIRED bash-completion)
  IF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.3)
    PKG_GET_VARIABLE(COMPLETIONS_DIR bash-completion completionsdir)
  ELSE()
    IF(NOT DEFINED COMPLETIONS_DIR)
      SET(COMPLETION_DEFAULT "share/bash-completion/completions")
      MESSAGE(STATUS "PKG_GET_VARIABLE not available.")
      MESSAGE(STATUS "Override default '${COMPLETION_DEFAULT}' with "
        "-DCOMPLETIONS_DIR=/path/to/completions if necessary.")
      SET(COMPLETIONS_DIR ${COMPLETION_DEFAULT})
    ENDIF()
  ENDIF()
  IF(NOT DEFINED COMPLETIONS_DIR)
    MESSAGE(FATAL_ERROR
      "pkg-config of bash-completion does not specify completionsdir")
  ENDIF()
  INSTALL(FILES "rcon.bashcomp.sh"
    DESTINATION ${COMPLETIONS_DIR}
    RENAME "rcon")
ENDIF()

ENABLE_TESTING()
ADD_SUBDIRECTORY(tests)
