#-----------------------------------------------------------------
# CMake file for the MRPT mrpt-hwdrivers
#  Run with "cmake ." at the root directory
#
#  October 2007, Jose Luis Blanco <jlblanco@ctima.uma.es>
#-----------------------------------------------------------------

INCLUDE(../../cmakemodules/AssureCMakeRootFile.cmake) # Avoid user mistake in CMake source directory

PROJECT(mrpt-hwdrivers)

#MESSAGE(STATUS "Makefile for mrpt-hwdrivers library")

# ---------------------------------------------
# TARGET: The HWDRIVERS library
# ---------------------------------------------
# List of C++ files:
SET(mrpthwdrivers_lib_srcs "")
SET(mrpthwdrivers_lib_hdrs "")

# -----------------------------------------------------------
# A macro to add files to the project and at the same time
#  divide them into IDE's solution folders, if applicable.
# -----------------------------------------------------------
MACRO(ADD_MRPT_HWDRIVERS_SOURCES dir)
	# The .cpp files:
	FILE(GLOB aux_srcs1 ${dir}/*.cpp)
	FILE(GLOB aux_srcs2 ${dir}/*.c)
	FILE(GLOB aux_srcs3 ${dir}/*.h*)
	SET(aux_srcs ${aux_srcs1} ${aux_srcs2} ${aux_srcs3})
	SET(mrpthwdrivers_lib_srcs ${mrpthwdrivers_lib_srcs} ${aux_srcs})
	SOURCE_GROUP("${dir}" FILES ${aux_srcs})

	INCLUDE_DIRECTORIES(${dir})
	INCLUDE_DIRECTORIES(${dir}/include)

	# The corresponding .h files:
#	FILE(GLOB aux_hdrs ${CMAKE_SOURCE_DIR}/include/mrpt/${dir}/*.h)
#	SOURCE_GROUP("${dir}" FILES ${aux_hdrs})
#	SET(mrpthwdrivers_lib_hdrs ${mrpthwdrivers_lib_hdrs} ${aux_hdrs})
ENDMACRO(ADD_MRPT_HWDRIVERS_SOURCES)

# Global files:
AUX_SOURCE_DIRECTORY(. mrpthwdrivers_lib_srcs)
FILE(GLOB aux_hdrs_1 ${CMAKE_SOURCE_DIR}/include/mrpt/hwdrivers/*.h)
SET(mrpthwdrivers_lib_srcs ${mrpthwdrivers_lib_srcs} ${aux_hdrs_1})


# Remove _LIN files when compiling under Windows, and _WIN files when compiling under Linux.
# ----------------------------------------------------------------------------------
SET(aux_var "")
FOREACH(FIL ${mrpthwdrivers_lib_srcs})
	SET(THIS_COUNTS 1)
	IF(${FIL} MATCHES ".*_LIN.cpp")
		IF(WIN32)
			SET(THIS_COUNTS 0)
		ENDIF(WIN32)
	ENDIF(${FIL} MATCHES ".*_LIN.cpp")

	IF(${FIL} MATCHES ".*_WIN.cpp")
		IF(UNIX)
			SET(THIS_COUNTS 0)
		ENDIF(UNIX)
	ENDIF(${FIL} MATCHES ".*_WIN.cpp")

	IF(THIS_COUNTS)
		SET(aux_var "${aux_var}" "${FIL}")
	ENDIF(THIS_COUNTS)
ENDFOREACH(FIL)
SET(mrpthwdrivers_lib_srcs ${aux_var})


# Build xSens?
IF(CMAKE_MRPT_HAS_xSENS)
	FILE(GLOB aux_srcs_xsens ${CMAKE_SOURCE_DIR}/src/hwdrivers/xSens/*.cpp)
	SOURCE_GROUP("xSens" FILES ${aux_srcs_xsens})

	ADD_DEFINITIONS(-D_LOG_TO_STDOUT)
ENDIF(CMAKE_MRPT_HAS_xSENS)


# ----------------------------------------------------------------------------------
# 				Define the target:
# ----------------------------------------------------------------------------------
ADD_LIBRARY(mrpt-hwdrivers ${mrpthwdrivers_lib_srcs} ${mrpthwdrivers_lib_hdrs} ${aux_srcs_xsens})

# Assure the MRPT library is updated:
ADD_DEPENDENCIES(mrpt-hwdrivers mrpt-core)

TARGET_LINK_LIBRARIES(mrpt-hwdrivers ${MRPT_LINKER_LIBS})

# Build against ARIA also:
IF(CMAKE_MRPT_HAS_ARIA)
	ADD_DEPENDENCIES(mrpt-hwdrivers mrpt-aria)
	TARGET_LINK_LIBRARIES(mrpt-hwdrivers mrpt-aria${MRPT_LINKER_LIBS_POSTFIX})
	
	IF(NOT BUILD_SHARED_LIBS)
		ADD_DEFINITIONS(-DARIA_STATIC)
	ENDIF(NOT BUILD_SHARED_LIBS)
	
ENDIF(CMAKE_MRPT_HAS_ARIA)


# For dynamic link numbering convenions in Linux:
SET_TARGET_PROPERTIES(mrpt-hwdrivers PROPERTIES
	VERSION "${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}.${CMAKE_MRPT_VERSION_NUMBER_PATCH}"
	SOVERSION ${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}
	)

SET_TARGET_PROPERTIES(mrpt-hwdrivers PROPERTIES PROJECT_LABEL lib-mrpt-hwdrivers)

# Add the required libraries for linking:
TARGET_LINK_LIBRARIES(mrpt-hwdrivers ${MRPTLIB_LINKER_LIBS})


# Remove the "--pedantic" flag for the file "CFFMPEG_InputStream.cpp" since headers 
#  have some errors:
IF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_MRPT_HAS_FFMPEG_SYSTEM)
	SET(EXTRA_ISYSTEMS "")
	IF(EXISTS "${LIBAVCODEC_INCLUDEDIR}")
		SET(EXTRA_ISYSTEMS "-isystem ${LIBAVCODEC_INCLUDEDIR} ")
	ENDIF(EXISTS "${LIBAVCODEC_INCLUDEDIR}")

	IF(EXISTS "${LIBAVCODEC_INCLUDEDIR}/ffmpeg")
		SET(EXTRA_ISYSTEMS "-isystem ${LIBAVCODEC_INCLUDEDIR}/ffmpeg ")
	ENDIF(EXISTS "${LIBAVCODEC_INCLUDEDIR}/ffmpeg")

	IF(EXISTS "${LIBAVCODEC_INCLUDEDIR}/libavcodec")
		SET(EXTRA_ISYSTEMS "-isystem ${LIBAVCODEC_INCLUDEDIR}/libavcodec ")
	ENDIF(EXISTS "${LIBAVCODEC_INCLUDEDIR}/libavcodec")

	IF(EXISTS "${LIBAVCODEC_INCLUDEDIR}/libavformat")
		SET(EXTRA_ISYSTEMS "-isystem ${LIBAVCODEC_INCLUDEDIR}/libavformat ")
	ENDIF(EXISTS "${LIBAVCODEC_INCLUDEDIR}/libavformat")

	set_source_files_properties(
		${CMAKE_SOURCE_DIR}/src/hwdrivers/CFFMPEG_InputStream.cpp 
		PROPERTIES COMPILE_FLAGS ${EXTRA_ISYSTEMS}
		)
	
ENDIF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_MRPT_HAS_FFMPEG_SYSTEM)
# The target file will be "hwdriversd" for DEBUG, "hwdrivers" for the rest of configs:
# ----------------------------------------------------------------------------------
set(the_trg mrpt-hwdrivers)

SET_TARGET_PROPERTIES(${the_trg} PROPERTIES 
	OUTPUT_NAME ${MRPT_LIB_PREFIX}${the_trg}${MRPT_DLL_VERSION_POSTFIX}
	ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/"
	RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/"
	)

# make sure the library gets installed
INSTALL(TARGETS ${the_trg}
	RUNTIME DESTINATION ${libmrpt_hwdrivers_INSTALL_PREFIX}bin
	LIBRARY DESTINATION ${libmrpt_hwdrivers_INSTALL_PREFIX}lib${LIB_SUFFIX}
	ARCHIVE DESTINATION ${libmrpt_hwdrivers_INSTALL_PREFIX}lib${LIB_SUFFIX})

