cmake_minimum_required(VERSION 3.15)

# For CMAKE_MSVC_RUNTIME_LIBRARY compatability. Per note: This must be before the first project() 
if(POLICY CMP0091)
  cmake_policy(SET CMP0091 NEW)
endif()

project(libajantv2)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(LIBAJANTV2_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
list(APPEND CMAKE_MODULE_PATH "${LIBAJANTV2_CMAKE_DIR}")
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)

if (NOT AJANTV2_VERSION_FILENAME)
    set(AJANTV2_VERSION_FILENAME ${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt)
endif()

include(GNUInstallDirs)
include(CMakeOptions)
include(Defines)
include(Version)

if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
	if (DEFINED AJA_MSVC_RUNTIME_LIBRARY)
		set(CMAKE_MSVC_RUNTIME_LIBRARY "${AJA_MSVC_RUNTIME_LIBRARY}" PARENT_SCOPE)
	endif()
endif()

option(AJANTV2_BUILD_OPENSOURCE    "Build libajantv2 as open-source (MIT license)?"   ON)
option(AJANTV2_BUILD_SHARED        "Build libajantv2 shared libraries?"               OFF)

option(AJANTV2_DISABLE_DEMOS       "Disable building libajantv2 demo apps?"           OFF)
option(AJANTV2_DISABLE_DRIVER      "Disable building libajantv2 driver (Linux-only)?" OFF)
option(AJANTV2_DISABLE_TESTS       "Disable building libajantv2 tests?"               OFF)
option(AJANTV2_DISABLE_TOOLS       "Disable building libajantv2 tools?"               OFF)
option(AJANTV2_DISABLE_PLUGIN_LOAD "Disable NTV2 3rd party plugin loading?"           OFF)
option(AJANTV2_DISABLE_RDMA        "Disable building with Nvidia RDMA?"               OFF)
option(AJANTV2_DISABLE_CONFIGURE_VERSION_FILE "Disable Configuring ntv2version.h"     OFF)

if (NOT DEFINED LIBAJANTV2_DIR)
    set(LIBAJANTV2_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif()

if(NOT AJANTV2_BUILD_OPENSOURCE)
    if (NOT DEFINED LIBAJANTV2_PRIVATE_DIR)
        set(LIBAJANTV2_PRIVATE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../libajantv2-private)
    endif()
endif()

# Cascade top-level options
if(DEFINED BUILD_SHARED_LIBS)
    set(AJANTV2_BUILD_SHARED ${BUILD_SHARED_LIBS})
endif()
if(DEFINED AJA_BUILD_SHARED)
    set(AJANTV2_BUILD_SHARED ${AJA_BUILD_SHARED})
endif()
if(DEFINED AJA_DISABLE_DEMOS)
    set(AJANTV2_DISABLE_DEMOS ${AJA_DISABLE_DEMOS})
endif()
if (DEFINED AJA_DISABLE_DRIVER)
    set(AJANTV2_DISABLE_DRIVER ${AJA_DISABLE_DRIVER})
endif()
if(DEFINED AJA_DISABLE_TESTS)
	set(AJANTV2_DISABLE_TESTS ${AJA_DISABLE_TESTS})
endif()
if(DEFINED AJA_DISABLE_TOOLS)
    set(AJANTV2_DISABLE_TOOLS ${AJA_DISABLE_TOOLS})
endif()
if(DEFINED AJA_DISABLE_PLUGIN_LOAD)
    set(AJANTV2_DISABLE_PLUGIN_LOAD ${AJA_DISABLE_PLUGIN_LOAD})
endif()

add_subdirectory(ajantv2)
add_subdirectory(demos)
add_subdirectory(tools)
add_subdirectory(driver)

if(AJA_INSTALL_CMAKE)
    install(FILES CMakeLists.txt DESTINATION ${CMAKE_INSTALL_PREFIX}/libajantv2)
endif()

if (NOT AJANTV2_DISABLE_TESTS)
    add_subdirectory(ajabase/test)
    add_subdirectory(ajaanc/test)
endif()
