# Set options for SQLiteCpp, disable all their tests and lints:
set(SQLITECPP_RUN_CPPLINT     OFF CACHE BOOL "Run cpplint.py tool for Google C++ StyleGuide.")
set(SQLITECPP_RUN_CPPCHECK    OFF CACHE BOOL "Run cppcheck C++ static analysis tool.")
set(SQLITECPP_RUN_DOXYGEN     OFF CACHE BOOL "Run Doxygen C++ documentation tool.")
set(SQLITECPP_BUILD_EXAMPLES  OFF CACHE BOOL "Build examples.")
set(SQLITECPP_BUILD_TESTS     OFF CACHE BOOL "Build and run tests.")
set(SQLITECPP_INTERNAL_SQLITE ON  CACHE BOOL "Add the internal SQLite3 source to the project.")
set(SQLITE_ENABLE_COLUMN_METADATA OFF CACHE BOOL "Enable Column::getColumnOriginName(). Require support from sqlite3 library.")

# Set options for LibEvent, disable all their tests and benchmarks:
set(EVENT__DISABLE_OPENSSL   YES CACHE BOOL   "Disable OpenSSL in LibEvent")
set(EVENT__DISABLE_BENCHMARK YES CACHE BOOL   "Disable LibEvent benchmarks")
set(EVENT__DISABLE_TESTS     YES CACHE BOOL   "Disable LibEvent tests")
set(EVENT__DISABLE_REGRESS   YES CACHE BOOL   "Disable LibEvent regression tests")
set(EVENT__DISABLE_SAMPLES   YES CACHE BOOL   "Disable LibEvent samples")
set(EVENT__LIBRARY_TYPE "STATIC" CACHE STRING "Use static LibEvent libraries")

# Set options for JsonCPP, disabling all of their tests:
set(JSONCPP_WITH_TESTS OFF CACHE BOOL "Compile and (for jsoncpp_check) run JsonCpp test executables")
set(JSONCPP_WITH_POST_BUILD_UNITTEST OFF CACHE BOOL "Automatically run unit-tests as a post build step")
set(JSONCPP_WITH_PKGCONFIG_SUPPORT OFF CACHE BOOL "Generate and install .pc files")

# Set options for mbedtls:
set(ENABLE_PROGRAMS OFF CACHE BOOL "Build mbed TLS programs.")
set(ENABLE_TESTING OFF CACHE BOOL "Build mbed TLS tests.")

# Enumerate all submodule libraries
# SQLiteCpp needs to be included before sqlite so the lsqlite target is available:
set(DEPENDENCIES expat fmt jsoncpp libevent lua luaexpat mbedtls SQLiteCpp sqlite tolua++ zlib)
foreach(DEPENDENCY ${DEPENDENCIES})
	# Check that the libraries are present:
	if (NOT EXISTS "${PROJECT_SOURCE_DIR}/lib/${DEPENDENCY}/CMakeLists.txt")
		message(FATAL_ERROR "${DEPENDENCY} is missing in folder lib/${DEPENDENCY}. Have you initialized and updated the submodules / downloaded the extra libraries?")
	endif()

	# Include all the libraries
	# We use EXCLUDE_FROM_ALL so that only the explicit dependencies are compiled
	# (mbedTLS also has test and example programs in their CMakeLists.txt, we don't want those):
	add_subdirectory("lib/${DEPENDENCY}" EXCLUDE_FROM_ALL)
endforeach()

# Add required includes:
target_include_directories(
	${CMAKE_PROJECT_NAME} SYSTEM PRIVATE
	lib/mbedtls/include
	lib/TCLAP/include
	lib # TODO fix files including zlib/x instead of x
)

# Link dependencies as private:
target_link_libraries(
	${CMAKE_PROJECT_NAME} PRIVATE
	event_core
	event_extra
	fmt::fmt
	jsoncpp_lib
	lsqlite
	lua
	luaexpat
	mbedtls
	SQLiteCpp
	tolualib
	zlib
)

# Link process information library:
if (WIN32)
	target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Psapi.lib)
endif()

# Special case handling for libevent pthreads:
if(NOT WIN32)
	target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE event_pthreads)
endif()

# Prettify jsoncpp_lib name in VS solution explorer:
set_property(TARGET jsoncpp_lib PROPERTY PROJECT_LABEL "jsoncpp")

if (WIN32)
	add_subdirectory(lib/luaproxy)
endif()
