#
# GENERAL
#

# Require CMake 2.6 because of the Debian packaging.
cmake_minimum_required (VERSION 2.6)

project (UVCDYNCTRL)



#
# TARGETS
#

add_executable (uvcdynctrl main.c controls.c cmdline.c)

set_target_properties (uvcdynctrl PROPERTIES VERSION 0.2.4)

if (NOT DYNCTRL_DATA_DIR)
	set_target_properties (uvcdynctrl PROPERTIES DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/uvcdynctrl")
else (NOT DYNCTRL_DATA_DIR)
	set_target_properties (uvcdynctrl PROPERTIES DATA_DIR ${DYNCTRL_DATA_DIR})
endif (NOT DYNCTRL_DATA_DIR)



#
# SPECIAL FILES
#

# gengetopt for command line parsing
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmdline.c" AND NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmdline.h")
	message("** Command line parser source files not found. Creating gengetopt rules ...")

	# Check if gengetopt is installed
	find_program(GENGETOPT gengetopt)
	if (NOT GENGETOPT)
		message(FATAL_ERROR "Unable to find gengetopt")
	endif (NOT GENGETOPT)

	add_custom_command (
		OUTPUT		${CMAKE_CURRENT_SOURCE_DIR}/cmdline.c ${CMAKE_CURRENT_SOURCE_DIR}/cmdline.h
		COMMAND		gengetopt -i ${CMAKE_CURRENT_SOURCE_DIR}/uvcdynctrl.ggo --output-dir ${CMAKE_CURRENT_SOURCE_DIR} --unamed-opts=VALUES
		DEPENDS 	${CMAKE_CURRENT_SOURCE_DIR}/uvcdynctrl.ggo
		COMMENT		"Generating getopt parser code (cmdline.*) ..."
		VERBATIM
	)
endif (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmdline.c" AND NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmdline.h")

# config.h
# Note how we define HAVE_CONFIG_H. This will let gengetopt pick up
# the VERSION constant from config.h.
get_target_property (UVCDYNCTRL_VERSION uvcdynctrl VERSION)
get_target_property (UVCDYNCTRL_DATA_DIR uvcdynctrl DATA_DIR)
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
add_definitions (-DHAVE_CONFIG_H)

#create man pages
execute_process (
	COMMAND			sh -c "rm -f ${CMAKE_CURRENT_BINARY_DIR}/*.gz; cp ${CMAKE_CURRENT_SOURCE_DIR}/uvcdynctrl.1_ ${CMAKE_CURRENT_BINARY_DIR}/uvcdynctrl.1; cp ${CMAKE_CURRENT_SOURCE_DIR}/uvcdynctrl.1_ ${CMAKE_CURRENT_BINARY_DIR}/uvcdynctrl-${UVCDYNCTRL_VERSION}.1; gzip --best ${CMAKE_CURRENT_BINARY_DIR}/uvcdynctrl-${UVCDYNCTRL_VERSION}.1; gzip --best ${CMAKE_CURRENT_BINARY_DIR}/uvcdynctrl.1;"
	RESULT_VARIABLE		MAN_BUILD_RESULT
	
)

if (MAN_BUILD_RESULT)
	message(ERROR " Unable to build man pages")
else (MAN_BUILD_RESULT)
	message("** created man pages")
endif (MAN_BUILD_RESULT)

#
# COMPILATION AND LINKING
#

include_directories (../common/include)
include_directories (${CMAKE_CURRENT_BINARY_DIR})
link_directories (${LIBWEBCAM_BINARY_DIR}/webcam)

target_link_libraries (uvcdynctrl webcam)

# Compiler flags
set_target_properties (uvcdynctrl PROPERTIES
	COMPILE_FLAGS "--std=gnu99 -Wall"
)

#
# INSTALLATION
#

# uvcdynctrl binary
message("** Installation directory for uvcdynctrl: ${CMAKE_INSTALL_PREFIX}/bin")
install (
	TARGETS					uvcdynctrl
	RUNTIME DESTINATION		bin
	COMPONENT				UVCDYNCTRL
)

# udev rules, script, and data
# Default permissions for DIRECTORY files: rw-r--r--
# Default permissions for PROGRAMS files:  rwxr-xr-x
# Note that having absolute paths here requires CPACK_SET_DESTDIR to be set to "ON".
install (
	FILES	udev/rules/80-uvcdynctrl.rules
	DESTINATION /lib/udev/rules.d
)
install (
	PROGRAMS	udev/scripts/uvcdynctrl
	DESTINATION	/lib/udev
)
install (
	DIRECTORY	data
	DESTINATION ${UVCDYNCTRL_DATA_DIR}
	PATTERN ".git" EXCLUDE
)
install (
	FILES	${CMAKE_CURRENT_BINARY_DIR}/uvcdynctrl.1.gz ${CMAKE_CURRENT_BINARY_DIR}/uvcdynctrl-${UVCDYNCTRL_VERSION}.1.gz 
	DESTINATION share/man/man1
)

