option(ENABLE_LIB_lcameraDev "Enable libcamera device provider backend lib" OFF)

if(ENABLE_LIB_lcameraDev)
	pkg_check_modules(LIBCAMERA libcamera)
	if(NOT LIBCAMERA_FOUND)
		message(FATAL_ERROR
			"libcamera not found. Install libcamera-dev (and runtime libcamera0.2 "
			"+ libcamera-ipa), then reconfigure with -DENABLE_LIB_lcameraDev=ON.")
	endif()

	add_compile_definitions(CONFIG_LIB_LCAMERADEV_ENABLED)

	add_library(lcameraDev SHARED
		lcameraDev.cpp
		cameraIdentity.cpp
		selectorParse.cpp
		selectorResolve.cpp
		cameraManagerState.cpp
		cameraSession.cpp
	)

	set_target_properties(lcameraDev PROPERTIES
		VERSION ${PROJECT_VERSION}
		SOVERSION ${PROJECT_VERSION_MAJOR}
	)

	target_compile_definitions(lcameraDev PRIVATE CONFIG_LIB_LCAMERADEV_ENABLED)

	target_include_directories(lcameraDev PUBLIC
		${CMAKE_CURRENT_SOURCE_DIR}
		${CMAKE_SOURCE_DIR}/include
		${CMAKE_BINARY_DIR}/include
		${LIBCAMERA_INCLUDE_DIRS}
	)

	target_link_libraries(lcameraDev PUBLIC
		Boost::system
		Boost::log
		spinscale
		${LIBCAMERA_LIBRARIES}
	)

	target_link_directories(lcameraDev PUBLIC
		${LIBCAMERA_LIBRARY_DIRS}
	)

	add_custom_command(TARGET lcameraDev POST_BUILD
		COMMAND ${CMAKE_COMMAND} -DVERIFY_FILE="$<TARGET_FILE:lcameraDev>"
			-P ${CMAKE_SOURCE_DIR}/cmake/VerifyBoostDynamic.cmake
		COMMENT "Verifying Boost dynamic dependencies for lcameraDev"
	)

	install(TARGETS lcameraDev
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} NAMELINK_SKIP
	)

	option(ENABLE_LCAMERADEV_TOOLS "Build lcameraDev probe/list tools" ON)
	if(ENABLE_LCAMERADEV_TOOLS)
		add_executable(lcameraDev_list_cameras
			tools/lcameraDevListCameras.cpp
			tools/probeRunner.cpp
		)
		target_include_directories(lcameraDev_list_cameras PRIVATE
			${CMAKE_CURRENT_SOURCE_DIR}
			${CMAKE_CURRENT_SOURCE_DIR}/tools
			${CMAKE_SOURCE_DIR}/include
			${CMAKE_BINARY_DIR}/include
		)
		target_link_libraries(lcameraDev_list_cameras PRIVATE
			lcameraDev
			spinscale
			Boost::system
			Boost::log
		)

		add_executable(lcameraDev_probe
			tools/lcameraDevProbe.cpp
			tools/probeRunner.cpp
		)
		target_include_directories(lcameraDev_probe PRIVATE
			${CMAKE_CURRENT_SOURCE_DIR}
			${CMAKE_CURRENT_SOURCE_DIR}/tools
			${CMAKE_SOURCE_DIR}/include
			${CMAKE_BINARY_DIR}/include
		)
		target_link_libraries(lcameraDev_probe PRIVATE
			lcameraDev
			spinscale
			Boost::system
			Boost::log
		)
	endif()

	if(ENABLE_TESTS)
		add_subdirectory(tests)
	endif()
endif()
