#   BAREOS® - Backup Archiving REcovery Open Sourced
#
#   Copyright (C) 2019-2024 Bareos GmbH & Co. KG
#
#   This program is Free Software; you can redistribute it and/or
#   modify it under the terms of version three of the GNU Affero General Public
#   License as published by the Free Software Foundation and included
#   in the file LICENSE.
#
#   This program is distributed in the hope that it will be useful, but
#   WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#   Affero General Public License for more details.
#
#   You should have received a copy of the GNU Affero General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
#   02110-1301, USA.
message("Entering ${CMAKE_CURRENT_SOURCE_DIR}")

cmake_minimum_required(VERSION 3.17)
cmake_policy(VERSION 3.17...3.19)

project(bareos NONE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/core/cmake")

add_custom_target(
  uninstall "${CMAKE_COMMAND}" -P
            "${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake"
)
set(default_build_type "Debug")

include(CMakePrintHelpers)
find_package(Git)
include(BareosVersionFromGit)
include(BareosExtractVersionInfo)
include(BareosGetDistInfo)
include(RemoveNDebugFlag)
set(BUILDNAME
    "${BAREOS_FULL_VERSION}"
    CACHE STRING "site name variable for CDash"
)
set(SITE
    "${CMAKE_SYSTEM_NAME}-${DISTVER}-${CMAKE_HOST_SYSTEM_PROCESSOR}"
    CACHE STRING "build name variable for CDash"
)
# enable "make test"
enable_testing()
set(CMAKE_CTEST_COMMAND ctest -V)
include(CTest)

option(BUILD_UNIVERSAL_CLIENT
       "Override build-options to produce a limited, but universal client" OFF
)
if(BUILD_UNIVERSAL_CLIENT)
  if(CMAKE_VERSION VERSION_LESS 3.18.0)
    message(
      FATAL_ERROR "Building the universal client requires at least CMake 3.18"
    )
  endif()
  set(ENABLE_PYTHON
      OFF
      CACHE BOOL "" FORCE
  )
  set(ENABLE_GFAPI_FD
      OFF
      CACHE BOOL "" FORCE
  )
  set(ENABLE_JANSSON
      OFF
      CACHE BOOL "" FORCE
  )
  set(ENABLE_LZO
      OFF
      CACHE BOOL "" FORCE
  )
  set(ENABLE_CAPABILITY
      OFF
      CACHE BOOL "" FORCE
  )
  set(ENABLE_BCONSOLE
      OFF
      CACHE BOOL "" FORCE
  )
  set(ENABLE_STATIC_RUNTIME_LIBS
      ON
      CACHE BOOL "" FORCE
  )
  set(client-only ON)
endif()

option(ENABLE_WEBUI "Build with WEBUI" ON)
option(docs-only "Build only the documentation" OFF)
option(docs-build-json "Update the configuration schema JSON files" OFF)

if(docs-build-json)
  # check for wrong combinations of build flags
  if(docs-only)
    message(
      FATAL_ERROR
        "\n\"docs-build-json\" needs bareos-executables and cannot be combined with \"docs-only\""
    )
  endif()
  if(NOT traymonitor)
    message(
      FATAL_ERROR
        "\n\"docs-build-json\" needs the traymonitor executable: add \"-Dtraymonitor=yes\""
    )
  endif()
endif()

if(docs-only)
  set(BUILD_BAREOS_BINARIES no)
else()
  set(BUILD_BAREOS_BINARIES yes)
endif()

if(NOT hostname)
  site_name(hostname)
endif()

if(BUILD_BAREOS_BINARIES)
  project(bareos C CXX)
  include(BareosCpmPackages)
  if(NOT CMAKE_BUILD_TYPE
     AND NOT CMAKE_C_FLAGS
     AND NOT CMAKE_CXX_FLAGS
  )
    set(CMAKE_BUILD_TYPE "RelWithDebInfo")
  endif()
  add_subdirectory(third-party EXCLUDE_FROM_ALL)
  add_subdirectory(core)
  if(ENABLE_WEBUI)
    add_subdirectory(webui)
  endif()
  if(NOT client-only AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    add_subdirectory(systemtests)
  endif()
  add_subdirectory(contrib)
endif()

if(docs
   OR docs-only
   OR docs-build-json
)
  add_subdirectory(docs/manuals)
endif()
set(SITE ${BAREOS_PLATFORM}-${DISTVER})
