# ----------------------------------------------------------------------------
# Master CMake file for the MRPT library and applications
#
#  Run with "cmake ." at the root directory to build the makefiles for
#   the MRPT C++ library, the samples, and the applications. Some scripts
#   for generating the documentation, etc... are also updated.
#
#  October 2007, Jose Luis Blanco <jlblanco@ctima.uma.es>
#
#  NOTE: CMake can be obtained at http://www.cmake.org/
# ----------------------------------------------------------------------------

# Types of build: Debug/Release only (For IDEs)  - BEFORE "Project()"
IF(NOT CMAKE_COMPILER_IS_GNUCXX)
	SET(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)

PROJECT(MRPT)
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)

# --------------------------------------------------------------
# Indicate CMake 2.7 and above that we don't want to mix relative
#  and absolute paths in linker lib lists.
# Run "cmake --help-policy CMP0003" for more information.
# --------------------------------------------------------------
if(COMMAND cmake_policy)
      cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)

# ----------------------------------------------------------------------------
#  Loads the current version number:
# ----------------------------------------------------------------------------
FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/version_prefix.txt" CMAKE_MRPT_VERSION_NUMBER)

# For example: "0.5.1"
STRING(REGEX MATCHALL "[0-9]+" CMAKE_MRPT_VERSION_PARTS "${CMAKE_MRPT_VERSION_NUMBER}")

LIST(GET CMAKE_MRPT_VERSION_PARTS 0 CMAKE_MRPT_VERSION_NUMBER_MAJOR)
LIST(GET CMAKE_MRPT_VERSION_PARTS 1 CMAKE_MRPT_VERSION_NUMBER_MINOR)
LIST(GET CMAKE_MRPT_VERSION_PARTS 2 CMAKE_MRPT_VERSION_NUMBER_PATCH)
SET(CMAKE_MRPT_FULL_VERSION "${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}.${CMAKE_MRPT_VERSION_NUMBER_PATCH}")


# ----------------------------------------------------------------------------
# Helper macro to append space separeated value to string variable
# similar to LIST(APPEND ...) but uses strings+space instead of semicolon+list
# AUTHOR Jan Woetzel
#  Grabbed by JLBlanco from: 
#    http://www.mip.informatik.uni-kiel.de/~jw/cmake/CMakeModules/DefineFlags.cmake
# ----------------------------------------------------------------------------
MACRO(STRING_APPEND  _VAR _VALUE )
  IF (${_VAR})
    # not empty, add space and value
    SET(${_VAR} "${${_VAR}} ${_VALUE}")
  ELSE(${_VAR})
    # empty, no space required.
    SET(${_VAR} "${_VALUE}")
  ENDIF (${_VAR})
ENDMACRO(STRING_APPEND)

# ------------------------------------------------------------------------
# For usage below. Checks whether we have to add the "general" prefix.
# ------------------------------------------------------------------------
MACRO(APPEND_MRPT_LIBS )
	IF(${ARGV0} STREQUAL "debug" OR ${ARGV0} STREQUAL "optimized")
		set(_libs ${ARGV})
	ELSE(${ARGV0} STREQUAL "debug" OR ${ARGV0} STREQUAL "optimized")
		set(_libs general ${ARGV})
	ENDIF(${ARGV0} STREQUAL "debug" OR ${ARGV0} STREQUAL "optimized")
	#MESSAGE(STATUS "APPEND: ${_libs}")
	LIST(APPEND MRPT_LINKER_LIBS ${_libs})
ENDMACRO(APPEND_MRPT_LIBS)


# ----------------------------------------------------------------------------
#  Autodetect if we are in a SVN repository
# ----------------------------------------------------------------------------
FIND_PROGRAM(SVNVERSION_PATH svnversion)
MARK_AS_ADVANCED(force SVNVERSION_PATH)
IF(SVNVERSION_PATH)
	MESSAGE(STATUS "Extracting svn version, please wait...")
	execute_process(COMMAND ${SVNVERSION_PATH} -n ${MRPT_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)

	IF(SVNVERSION_RESULT MATCHES "exported")
		# This is NOT a svn repository:
		SET(CMAKE_MRPT_SVNVERSION "")
	ELSE(SVNVERSION_RESULT MATCHES "exported")
		SET(CMAKE_MRPT_SVNVERSION " svn:${SVNVERSION_RESULT}")
	ENDIF(SVNVERSION_RESULT MATCHES "exported")

	MESSAGE(STATUS "SVNVERSION: ${CMAKE_MRPT_SVNVERSION}")
ELSE(SVNVERSION_PATH)
	# We don't have svnversion:
	SET(CMAKE_MRPT_SVNVERSION "")
ENDIF(SVNVERSION_PATH)

# ----------------------------------------------------------------------------
# Detect GNU version:
# ----------------------------------------------------------------------------
IF(CMAKE_COMPILER_IS_GNUCXX)
	execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
		          OUTPUT_VARIABLE CMAKE_MRPT_GCC_VERSION_FULL
		          OUTPUT_STRIP_TRAILING_WHITESPACE)

	# Typical output in CMAKE_MRPT_GCC_VERSION_FULL: "c++ (whatever) 4.2.3 (...)"
	#  Look for the version number
	STRING(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_MRPT_GCC_VERSION_FULL}")
	#MESSAGE(STATUS "match: ${CMAKE_GCC_REGEX_VERSION}")

	# Split the three parts:
	STRING(REGEX MATCHALL "[0-9]+" CMAKE_MRPT_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")

	LIST(GET CMAKE_MRPT_GCC_VERSIONS 0 CMAKE_MRPT_GCC_VERSION_MAJOR)
	LIST(GET CMAKE_MRPT_GCC_VERSIONS 1 CMAKE_MRPT_GCC_VERSION_MINOR)

	SET(CMAKE_MRPT_GCC_VERSION ${CMAKE_MRPT_GCC_VERSION_MAJOR}${CMAKE_MRPT_GCC_VERSION_MINOR})
	MESSAGE(STATUS "Detected version of GNU GCC: ${CMAKE_MRPT_GCC_VERSION}")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)


# ----------------------------------------------------------------------------
# Include the "CPack" package generator
# ----------------------------------------------------------------------------
INCLUDE(InstallRequiredSystemLibraries)

SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The Mobile Robot Programming Toolkit (MRPT)")
SET(CPACK_PACKAGE_VENDOR "Jose Luis Blanco Claraco")
SET(CPACK_PACKAGE_CONTACT "Jose Luis Blanco Claraco <jlblanco@ctima.uma.es>")

SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
SET(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MRPT is a set of C++ libraries and applications for mobile robot software development.")
FILE(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_DESCRIPTION_TEXT)

SET(CPACK_PACKAGE_VERSION_MAJOR "${CMAKE_MRPT_VERSION_NUMBER_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MINOR "${CMAKE_MRPT_VERSION_NUMBER_MINOR}")
SET(CPACK_PACKAGE_VERSION_PATCH "${CMAKE_MRPT_VERSION_NUMBER_PATCH}")

SET(CPACK_DEBIAN_PACKAGE_VERSION "${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}.${CMAKE_MRPT_VERSION_NUMBER_PATCH}")
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\r\rThe Mobile Robot Programming Toolkit (MRPT) is an extensive, cross-platform, and open source C++ library aimed to help robotics researchers to design and implement algorithms (mainly) in the fields of Simultaneous Localization and Mapping (SLAM) and computer vision (e.g. MonoSLAM).\rThe library allows an easy interface to many common sensors like laser scanners or cameras, and defines a versatile rawlog file format, used to store data sets gathered by a robot for posterior processing. The MRPT's format for rawlogs is Bayesian filter-friendly: sequences of action-observations, in a generic form that allows 2D/3D(6D) movements and any number of (extensible) observations.\r\r MRPT website: http://mrpt.sourceforge.net\r")

SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")

SET(CPACK_SOURCE_GENERATOR "TGZ")

SET(CPACK_PACKAGE_INSTALL_DIRECTORY "mrpt-${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}.${CMAKE_MRPT_VERSION_NUMBER_PATCH}")

IF(WIN32)
	# --------------------------------
	# Packages for Windows
	# --------------------------------
	SET(CPACK_SOURCE_IGNORE_FILES ".svn/;.*~;build;CMakeCache.txt;_CPack_Pakages/;CMakeFiles/;install/;Makefile;*.cmake")

	# There is a bug in NSI that does not handle full unix paths properly. Make
	# sure there is at least one set of four (4) backlasshes.
	SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/share/pixmaps\\\\mrpt_icon.ico")
	SET(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}/share/pixmaps\\\\mrpt_icon.ico")
	SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/apps/RawLogViewer/imgs\\\\mrpt_logo.png")

	SET(CPACK_NSIS_INSTALLED_ICON_NAME "${CMAKE_CURRENT_SOURCE_DIR}/share/pixmaps\\\\mrpt_icon.ico")

	SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\mrpt.sourceforge.net")
	SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.isa.uma.es\\\\jlblanco")
	SET(CPACK_NSIS_CONTACT "jlblanco@ctima.uma.es")
	
	# Add mrpt/bin dir to system PATH
	SET(CPACK_NSIS_MODIFY_PATH ON)

	# Install header and source files:
	# ---------------------------------------------
	INSTALL(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/"
		DESTINATION include
		PATTERN ".svn" EXCLUDE
		PATTERN "*~" EXCLUDE)

	INSTALL(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/"
		DESTINATION src
		PATTERN ".svn" EXCLUDE
		PATTERN "*~" EXCLUDE)

	INSTALL(FILES 
		cmake_uninstall.cmake.in
		CMakeLists.txt
		config_file_examples.txt
		configure
		COPYING
		DATASETS.txt
		INSTALL_COMPILE.html
		MRPTConfig.cmake.in
		NEWS.html
		README
		README.Debian
		README.txt
		version_prefix.txt
		version_prefix_README.txt
	DESTINATION .)
		
	SET(CPACK_PACKAGE_EXECUTABLES 
		"camera-calib;Camera calibration GUI;GridmapNavSimul;Gridmap simulator;RawLogViewer;RawLog Viewer;ReactiveNavigationDemo;Reactive navigation demo;SceneViewer3D;Scene Viewer 3D;")
		
	SET(CPACK_NSIS_MENU_LINKS
	    "doc;Documentation directory;doc/chm/libMRPT-@CMAKE_MRPT_VERSION_NUMBER_MAJOR@.@CMAKE_MRPT_VERSION_NUMBER_MINOR@.@CMAKE_MRPT_VERSION_NUMBER_PATCH@.chm;MRPT libraries reference (CHM);README.txt;Read me;http://babel.isa.uma.es/mrpt;Online help;doc/mrpt-book.pdf;The MRPT book (PDF)")
		
	# File types association:
	SET(CPACK_NSIS_DEFINES "
		!include registerExtension.nsh
		")
	
	SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
		\\\${registerExtension} \\\"$INSTDIR/bin/RawLogViewer.exe\\\" \\\".rawlog\\\" \\\"Robotic Dataset File\\\" 
		\\\${registerExtension} \\\"$INSTDIR/bin/SceneViewer3D.exe\\\" \\\".3Dscene\\\" \\\"Robotic 3D scene\\\" 
		")
	SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "  
		\\\${unregisterExtension} \\\".rawlog\\\" \\\"Robotic Dataset File\\\" 
		\\\${unregisterExtension} \\\".3Dscene\\\" \\\"Robotic 3D scene\\\" 
		")


ENDIF(WIN32)
IF(UNIX)
	# --------------------------------
	# Packages for linux
	# --------------------------------
   	SET(CPACK_OUTPUT_FILE_PATH "MRPT-${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}.${CMAKE_MRPT_VERSION_NUMBER_PATCH}-Linux-${CMAKE_SYSTEM_PROCESSOR}.deb")
	SET(CPACK_DEBIAN_PACKAGE_NAME "libmrpt")
	SET(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local")
	SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libcv1,libglu1-mesa,libwxgtk2.8-0")

	SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")

	SET(CPACK_SOURCE_IGNORE_FILES ".svn;CMakeFiles;CMakeCache.txt;CPack*;progress.make;install_manifest.txt;cmake_install.cmake;cmake_psdk.cmake$;Makefile;.swp$;.*~;tags;cmake_uninstall.cmake$")

	SET(CPACK_GENERATOR DEB)

ENDIF(UNIX)

IF(APPLE)
	SET(CPACK_GENERATOR "TGZ;TBZ2;OSXX11")
Endif(APPLE)

INCLUDE(CPack)

# ------------------------------------------
# The debug post-fix of .dll /.so libs
# ------------------------------------------
set(CMAKE_DEBUG_POSTFIX  "-dbg")
# Libs are: "libmrpt-xxx"
#            ---
IF(MSVC)	
	set(MRPT_LIB_PREFIX "lib")
ENDIF(MSVC)

# ----------------------------------------------------------------------------
# 		CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
# ----------------------------------------------------------------------------

# Build (or not) some apps:
# ===================================================
SET(BUILD_MONOSLAM OFF CACHE BOOL "Build library mrpt-monoslam")
SET(BUILD_APPs_GUIs ON CACHE BOOL "Build GUI applications: SceneViewer, RawLogViewer, ReactiveNavigationDemo.")
SET(BUILD_APPs_SLAM ON CACHE BOOL "Build applications XXX-SLAM")
SET(BUILD_APPs_SIMUL ON CACHE BOOL "Build applications simul-XXX and GridmapNavSimul")


# Build static or dynamic libs?
# ===================================================
# Default: dynamic libraries in Linux, static otherwise:
IF(UNIX)
	SET(MRPT_DEFAULT_SHARED_LIB ON)
ELSE(UNIX)
	SET(MRPT_DEFAULT_SHARED_LIB OFF)
ENDIF(UNIX)

SET(BUILD_SHARED_LIBS ${MRPT_DEFAULT_SHARED_LIB} CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)")
IF(BUILD_SHARED_LIBS)
	SET(CMAKE_MRPT_BUILD_SHARED_LIB "#define MRPT_BUILT_AS_DLL")
	SET(CMAKE_MRPT_BUILD_SHARED_LIB_ONOFF 1)
ELSE(BUILD_SHARED_LIBS)
	SET(CMAKE_MRPT_BUILD_SHARED_LIB "/* #define MRPT_BUILT_AS_DLL */")
	SET(CMAKE_MRPT_BUILD_SHARED_LIB_ONOFF 0)
ENDIF(BUILD_SHARED_LIBS)

# Only for Unix: use pkg-config to find libraries
# ===================================================
INCLUDE(FindPkgConfig OPTIONAL)
IF(PKG_CONFIG_FOUND)
	INCLUDE(FindPkgConfig)
ENDIF(PKG_CONFIG_FOUND)


# Build the ARIA library
# ===================================================
SET(BUILD_ARIA ON CACHE BOOL "Build an embedded version of ActivMedia ARIA library (interface to mobile robots)")
IF(BUILD_ARIA)
	SET(CMAKE_MRPT_HAS_ARIA 1)
ELSE(BUILD_ARIA)
	SET(CMAKE_MRPT_HAS_ARIA 0)
ENDIF(BUILD_ARIA)

# Build the xSENS library
# ===================================================
SET(BUILD_xSENS OFF CACHE BOOL "Build an external copy of xSens library (interface to xSens MTi device)")
IF(BUILD_xSENS)
	SET(ROOT_xSENS "" CACHE PATH "Path to CMT source directory of xSens library (The CMTSrc directory)")
	IF(EXISTS "${ROOT_xSENS}/xsens_std.h")
		SET(CMAKE_MRPT_HAS_xSENS 1)
	ELSE(EXISTS "${ROOT_xSENS}/xsens_std.h")
		MESSAGE("Please, set the ROOT_xSENS variable to the CMT source directory of the xSens library (The CMTSrc directory)")
	ENDIF(EXISTS "${ROOT_xSENS}/xsens_std.h")
ELSE(BUILD_xSENS)
	SET(CMAKE_MRPT_HAS_xSENS 0)
ENDIF(BUILD_xSENS)

# Visual Leak Detector (Windows only!)
# ===================================================
SET(CMAKE_MRPT_HAS_VLD 0)
IF(WIN32)
	SET(ROOT_VISUAL_LEAK_DETECTOR "" CACHE PATH "Path to root directory of Visual Leadk Detector")
	IF(EXISTS "${ROOT_VISUAL_LEAK_DETECTOR}/include/vld.h")
		SET(CMAKE_MRPT_HAS_VLD 1)
	ENDIF(EXISTS "${ROOT_VISUAL_LEAK_DETECTOR}/include/vld.h")
ENDIF(WIN32)

# Enable GCC profiling (GCC only)
# ===================================================
IF(CMAKE_COMPILER_IS_GNUCXX)
	SET(MRPT_ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

# Enable precompiled headers:
# ===================================================
IF(CMAKE_COMPILER_IS_GNUCXX)
	# Precompiled headers were introduced with GCC 3.4
#	IF(CMAKE_MRPT_GCC_VERSION GREATER 34)
#		SET(DEFAULT_PRECOMP_HDRS ON)
#	ELSE(CMAKE_MRPT_GCC_VERSION GREATER 34)
		SET(DEFAULT_PRECOMP_HDRS OFF)
#	ENDIF (CMAKE_MRPT_GCC_VERSION GREATER 34)
ELSE(CMAKE_COMPILER_IS_GNUCXX)
	# Rest of compilers: Default=ON
	SET(DEFAULT_PRECOMP_HDRS ON)
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

SET(MRPT_ENABLE_PRECOMPILED_HDRS ${DEFAULT_PRECOMP_HDRS} CACHE BOOL "Enable precompiled headers (thru 'mrpt/core.h')")

# MRPT_TRY_START/END blocks
# ===================================================
SET(MRPT_HAS_STACKED_EXCEPTIONS ON CACHE BOOL "Enable MRPT_TRY_START/END blocks (disable it for speed up).")

# ASSERT_ blocks
# ===================================================
SET(MRPT_HAS_ASSERT ON CACHE BOOL "Enable ASSERT_ statements (disable it for speed up).")


# Enable libstdc++ parallel mode  (GCC only)
# ===================================================
IF(CMAKE_COMPILER_IS_GNUCXX)
	SET(MRPT_ENABLE_LIBSTD_PARALLEL_MODE OFF CACHE BOOL "Enable parallel mode in libstdc++ (requires GCC 4.2.2+)")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)


# Occupancy grid cellsize in bits: 8 or 16
# ===================================================
SET(MRPT_OCCUPANCY_GRID_CELLSIZE 8 CACHE STRING "Cell size for mrpt::slam::COccupancyGridMap2D (either 8 or 16 bits)")
IF(NOT MRPT_OCCUPANCY_GRID_CELLSIZE EQUAL 8 AND NOT MRPT_OCCUPANCY_GRID_CELLSIZE EQUAL 16)
	MESSAGE("MRPT_OCCUPANCY_GRID_CELLSIZE can have the values 8 or 16 only.")
ENDIF(NOT MRPT_OCCUPANCY_GRID_CELLSIZE EQUAL 8 AND NOT MRPT_OCCUPANCY_GRID_CELLSIZE EQUAL 16)



# Support for Bumblebee stereo camera:
# ===================================================
SET( MRPT_HAS_BUMBLEBEE OFF CACHE BOOL "Add support for Bumblebee Stereo Camera?")

IF(MRPT_HAS_BUMBLEBEE)
	SET( BUMBLEBEE_DIGICLOPS_ROOT_DIR "" CACHE PATH "Path to digiclops library root directory")
	SET( BUMBLEBEE_TRICLOPS_ROOT_DIR "" CACHE PATH "Path to triclops library root directory")

	IF(UNIX)
		MESSAGE("Sorry! Bumblebee camera is supported only for Windows yet. Set MRPT_HAS_BUMBLEBEE to OFF")
		SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
	ELSE(UNIX)
		# Set to 1, next check for missing things and set to 0 on any error & report message:
		SET(CMAKE_MRPT_HAS_BUMBLEBEE 1)

		IF(NOT EXISTS ${BUMBLEBEE_DIGICLOPS_ROOT_DIR})
			SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
			MESSAGE("The directory 'BUMBLEBEE_DIGICLOPS_ROOT_DIR' does not exists. Turn off BUMBLEBEE support or provide the correct path.")
		ENDIF(NOT EXISTS ${BUMBLEBEE_DIGICLOPS_ROOT_DIR})

		IF(NOT EXISTS ${BUMBLEBEE_DIGICLOPS_ROOT_DIR}/include/digiclops.h)
			SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
			MESSAGE("The directory 'BUMBLEBEE_DIGICLOPS_ROOT_DIR' does not contain include/digiclops.h. Turn off BUMBLEBEE support or provide the correct path.")
		ENDIF(NOT EXISTS ${BUMBLEBEE_DIGICLOPS_ROOT_DIR}/include/digiclops.h)

		IF(NOT EXISTS ${BUMBLEBEE_DIGICLOPS_ROOT_DIR}/lib/digiclops.lib)
			SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
			MESSAGE("The directory 'BUMBLEBEE_DIGICLOPS_ROOT_DIR' does not contain lib/digiclops.h. Turn off BUMBLEBEE support or provide the correct path.")
		ENDIF(NOT EXISTS ${BUMBLEBEE_DIGICLOPS_ROOT_DIR}/lib/digiclops.lib)

		# ----

		IF(NOT EXISTS ${BUMBLEBEE_TRICLOPS_ROOT_DIR})
			SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
			MESSAGE("The directory 'BUMBLEBEE_TRICLOPS_ROOT_DIR' does not exists. Turn off BUMBLEBEE support or provide the correct path.")
		ENDIF(NOT EXISTS ${BUMBLEBEE_TRICLOPS_ROOT_DIR})

		IF(NOT EXISTS ${BUMBLEBEE_TRICLOPS_ROOT_DIR}/include/triclops.h)
			SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
			MESSAGE("The directory 'BUMBLEBEE_TRICLOPS_ROOT_DIR' does not contain include/triclops.h. Turn off BUMBLEBEE support or provide the correct path.")
		ENDIF(NOT EXISTS ${BUMBLEBEE_TRICLOPS_ROOT_DIR}/include/triclops.h)

		IF(NOT EXISTS ${BUMBLEBEE_TRICLOPS_ROOT_DIR}/lib/triclops.lib)
			SET(CMAKE_MRPT_HAS_BUMBLEBEE 0)
			MESSAGE("The directory 'BUMBLEBEE_TRICLOPS_ROOT_DIR' does not contain lib/triclops.lib. Turn off BUMBLEBEE support or provide the correct path.")
		ENDIF(NOT EXISTS ${BUMBLEBEE_TRICLOPS_ROOT_DIR}/lib/triclops.lib)
	ENDIF(UNIX)

ENDIF(MRPT_HAS_BUMBLEBEE)

# Check for Boost:
# ===================================================
FIND_PACKAGE( Boost COMPONENTS program_options)
#SET(Boost_USE_STATIC_LIBS OFF) # CACHE BOOL "Whether to look for static libs")
IF(Boost_FOUND OR "${Boost_INCLUDE_DIRS}")
	INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
	#LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
	LINK_DIRECTORIES("${Boost_INCLUDE_DIR}/lib")

	IF(Boost_LIBRARIES)
		SET(MY_Boost_LIBRARIES ${Boost_LIBRARIES})
	ELSE(Boost_LIBRARIES)
		SET(MY_Boost_LIBRARIES boost_program_options)	
	ENDIF(Boost_LIBRARIES)
	
	#MESSAGE(STATUS "boost libs: ${MY_Boost_LIBRARIES}")
	SET(CMAKE_MRPT_HAS_BOOST 1)
ELSE(Boost_FOUND OR "${Boost_INCLUDE_DIRS}")
	SET(BOOST_ROOT "" CACHE PATH "Path to Boost library")
	SET(CMAKE_MRPT_HAS_BOOST 0)
	MARK_AS_ADVANCED(CLEAR MARK Boost_INCLUDE_DIR)
ENDIF(Boost_FOUND OR "${Boost_INCLUDE_DIRS}")


#   FabMap module for HMT-SLAM? (optional)
# =======================================
FIND_PACKAGE(FabMap QUIET)

# Check for STXXL: (Not yet)
# =====================================
SET(CMAKE_MRPT_HAS_STXXL 0)

# Check for the FTDI headers (Linux only, in win32
#  we use built-in header & dynamic DLL load):
# ===================================================
IF(UNIX)
	FIND_FILE(FTDI_CONFIG_FILE libftdi-config)
	IF(FTDI_CONFIG_FILE)
		SET(CMAKE_MRPT_HAS_FTDI 1)
		SET(CMAKE_MRPT_HAS_FTDI_SYSTEM 1)

		# Get the config params:
		EXECUTE_PROCESS(COMMAND ${FTDI_CONFIG_FILE} --libs
			RESULT_VARIABLE CMAKE_FTDI_CONFIG_RES
			OUTPUT_VARIABLE CMAKE_FTDI_LIBS
			OUTPUT_STRIP_TRAILING_WHITESPACE
			)
		IF(${CMAKE_FTDI_CONFIG_RES})
			MESSAGE("Error invoking FTDI config file:\n ${FTDI_CONFIG_FILE} --libs")
		ENDIF(${CMAKE_FTDI_CONFIG_RES})

		EXECUTE_PROCESS(COMMAND ${FTDI_CONFIG_FILE} --cflags
			RESULT_VARIABLE CMAKE_FTDI_CONFIG_RES
			OUTPUT_VARIABLE CMAKE_FTDI_CFLAGS
			OUTPUT_STRIP_TRAILING_WHITESPACE
			)
		IF(${CMAKE_FTDI_CONFIG_RES})
			MESSAGE("Error invoking FTDI config file:\n ${FTDI_CONFIG_FILE} --cflags")
		ENDIF(${CMAKE_FTDI_CONFIG_RES})

		ADD_DEFINITIONS(${CMAKE_FTDI_CFLAGS})

	ELSE(FTDI_CONFIG_FILE)
		SET(CMAKE_MRPT_HAS_FTDI 0)
	ENDIF(FTDI_CONFIG_FILE)
	# This option will be available only on Linux, hence it's declared here:
	OPTION(DISABLE_FTDI "Do not use the USB driver for FTDI chips" 0)
ELSE(UNIX)
	# In windows we always have FTDI support (at compile time at least...)
	SET(CMAKE_MRPT_HAS_FTDI 1)
ENDIF(UNIX)

# Check for the sys/inotify headers (Linux only, in win32
#  we use the equivalent API for file system monitoring):
# =======================================================
IF(UNIX)
	FIND_FILE(INOTIFY_HEADER_FILE sys/inotify.h)
	IF(INOTIFY_HEADER_FILE)
		SET(CMAKE_MRPT_HAS_INOTIFY 1)
	ELSE(INOTIFY_HEADER_FILE)
		SET(CMAKE_MRPT_HAS_INOTIFY 0)
	ENDIF(INOTIFY_HEADER_FILE)
ELSE(UNIX)
	# In windows there is no INOTIFY api.
	SET(CMAKE_MRPT_HAS_INOTIFY 0)
ENDIF(UNIX)

# Check for the GL,GLUT libraries (Linux only, in
#  Windows use the build in .h & .lib):
# ===================================================
SET(CMAKE_MRPT_DEFINE_FREEGLUT_STATIC "/* #define FREEGLUT_STATIC */")

FIND_PACKAGE(OpenGL)
IF(OPENGL_FOUND AND "${OPENGL_INCLUDE_DIR}")
	INCLUDE_DIRECTORIES("${OPENGL_INCLUDE_DIR}")
ENDIF(OPENGL_FOUND AND "${OPENGL_INCLUDE_DIR}")

IF(UNIX)
	FIND_PACKAGE(GLUT)

	IF(GLUT_FOUND)
		INCLUDE_DIRECTORIES("${GLUT_INCLUDE_DIR}")
		SET(CMAKE_MRPT_HAS_OPENGL_GLUT 1)
	ELSE(GLUT_FOUND)
		MESSAGE(STATUS "**Warning**: OpenGL and/or GLUT not found! OpenGL capabilities will be disabled.")
		SET(CMAKE_MRPT_HAS_OPENGL_GLUT 0)
	ENDIF(GLUT_FOUND)
ELSE(UNIX)
	SET(CMAKE_MRPT_HAS_OPENGL_GLUT 1)
	SET(CMAKE_MRPT_DEFINE_FREEGLUT_STATIC "#define FREEGLUT_STATIC")
ENDIF(UNIX)


# Check for the OpenCV libraries:
#  pkg-config if available (Linux), otherwise CMake module 
# =========================================================
SET(CMAKE_MRPT_HAS_OPENCV 0)
SET(MRPT_OPENCV_VERSION 0.0.0)
SET(MRPT_OPENCV_VERSION_HEX "0x000")
# Invoke pkg-config for getting the configuration:
IF(PKG_CONFIG_FOUND)
	PKG_CHECK_MODULES(OPENCV opencv)
	IF(${OPENCV_FOUND})
		SET(CMAKE_MRPT_HAS_OPENCV 1)
		SET(MRPT_OPENCV_VERSION ${OPENCV_VERSION})
	 
		INCLUDE_DIRECTORIES("${OPENCV_INCLUDEDIR}")
		LINK_DIRECTORIES("${OPENCV_LIBDIR}")
		SET(OpenCV_LIBRARIES ${OPENCV_LIBRARIES})

		MESSAGE(STATUS " opencv include: ${OPENCV_INCLUDE_DIRS} (Version: ${OPENCV_VERSION})")
		INCLUDE_DIRECTORIES(${OPENCV_INCLUDE_DIRS})
	 	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_CFLAGS}")

		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} ${opencv_LDFLAGS}")
	ENDIF(${OPENCV_FOUND})
ENDIF(PKG_CONFIG_FOUND)


# Use CMAKE module if opencv's not been detected yet:
IF(NOT CMAKE_MRPT_HAS_OPENCV)
	LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmakemodules")
	FIND_PACKAGE(OpenCV)
	IF(OpenCV_FOUND)
		# MRPT_OPENCV_VERSION
		#MESSAGE(STATUS "OPENCV_EXE_LINKER_FLAGS: ${OPENCV_EXE_LINKER_FLAGS}")
		#MESSAGE(STATUS "OPENCV_INCLUDE_DIR: ${OPENCV_INCLUDE_DIR}")
		#MESSAGE(STATUS "OpenCV_LIBRARIES: ${OpenCV_LIBRARIES}")
	
		FILE(GLOB_RECURSE CV_VER_H "${OpenCV_CXCORE_INCLUDE_DIR}/cvver.h")
		file(READ "${CV_VER_H}" STR_CV_VERSION)

		STRING(REGEX MATCHALL "[0-9]+.[0-9]+.[0-9]+" MRPT_OPENCV_VERSION "${STR_CV_VERSION}")
		#MESSAGE(STATUS "OpenCV version detected: ${MRPT_OPENCV_VERSION}")

		SET(CMAKE_MRPT_HAS_OPENCV 1)
	ENDIF(OpenCV_FOUND)
ENDIF(NOT CMAKE_MRPT_HAS_OPENCV)

# Opencv version as Hex. number:
STRING(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_VERSION_PARTS "${MRPT_OPENCV_VERSION}")
LIST(GET CMAKE_OPENCV_VERSION_PARTS 0 CMAKE_OPENCV_VERSION_NUMBER_MAJOR)
LIST(GET CMAKE_OPENCV_VERSION_PARTS 1 CMAKE_OPENCV_VERSION_NUMBER_MINOR)
LIST(GET CMAKE_OPENCV_VERSION_PARTS 2 CMAKE_OPENCV_VERSION_NUMBER_PATCH)
SET(MRPT_OPENCV_VERSION_HEX "0x${CMAKE_OPENCV_VERSION_NUMBER_MAJOR}${CMAKE_OPENCV_VERSION_NUMBER_MINOR}${CMAKE_OPENCV_VERSION_NUMBER_PATCH}")

  
# Check for system lib3ds:
# ===================================================
SET(CMAKE_MRPT_HAS_LIB3DS 1)	# Always present: system or built-in

# Check for system zlib:
# ===================================================
SET(CMAKE_MRPT_HAS_ZLIB 1)	# Always present: system or built-in

# Check for system jpeglib:
# ===================================================
SET(CMAKE_MRPT_HAS_JPEG 1)	# Always present: system or built-in

# Check for wxWidgets + GL
#  If it is found, will set CMAKE_MRPT_HAS_WXWIDGETS=1
# ===================================================
# Here you can define what libraries of wxWidgets you need for your application. 
#  You can figure out what libraries you need here;  http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
SET(wxWidgets_MRPT_COMPONENTS_TO_SEARCH "base;core;gl;adv;aui" CACHE STRING "Components to search in wxWidgets")

IF(UNIX)
	# Linux:
	IF(CMAKE_BUILD_TYPE MATCHES "Debug")
		SET(wxWidgets_USE_DEBUG ON)
	ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug")
ELSE(UNIX)
	# Windows configuration of wxWidgets:
	#SET(wxWidgets_USE_REL_AND_DBG ON)
ENDIF(UNIX)


# We need the Find package for wxWidgets to work
FIND_PACKAGE(wxWidgets COMPONENTS "${wxWidgets_MRPT_COMPONENTS_TO_SEARCH}")
# Did we find wxWidgets ? This condition will fail for as long as the internal vars do not point to the proper wxWidgets configuration
IF(wxWidgets_FOUND)
	# Check for non-found debug libs:
	IF(UNIX)
		IF(CMAKE_BUILD_TYPE MATCHES "Debug")
			IF(NOT wxWidgets_USE_DEBUG)
				MESSAGE("Warning: The debug libraries for wxWidgets couldn't be found by CMake. Please install them (libwxbase2.8-dev) or build in release.")
			ENDIF(NOT wxWidgets_USE_DEBUG)
		ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug")
	ENDIF(UNIX)

	# Include wxWidgets macros
	INCLUDE(${wxWidgets_USE_FILE})
	# ${wxWidgets_LIBRARIES}  will contain the libraries that should be added through TARGET_LINK_LIBRARIES(...)
	#MESSAGE(STATUS "wxWidgets_LIBRARIES: ${wxWidgets_LIBRARIES}")
	#MESSAGE(STATUS "wxWidgets_CXX_FLAGS: ${wxWidgets_CXX_FLAGS}")

	LINK_DIRECTORIES(${wxWidgets_LIBRARY_DIRS})

	IF(MSVC)
		ADD_DEFINITIONS(-DwxUSE_NO_MANIFEST=1)
	ENDIF(MSVC)

	# For use in the MRPTconfig.cmake
	SET(CMAKE_MRPT_WX_ROOT_DIR ${wxWidgets_ROOT_DIR})

	SET(CMAKE_MRPT_HAS_WXWIDGETS 1)
ELSE(wxWidgets_FOUND)
	# Monolithic?	
	IF (WX_mono)
		SET(wxWidgets_MRPT_COMPONENTS_TO_SEARCH mono CACHE STRING "Components to search in wxWidgets" FORCE)
		FIND_PACKAGE(wxWidgets COMPONENTS ${wxWidgets_MRPT_COMPONENTS_TO_SEARCH})

		INCLUDE(${wxWidgets_USE_FILE})
		# ${wxWidgets_LIBRARIES}  will contain the libraries that should be added through TARGET_LINK_LIBRARIES(...)
		#MESSAGE(STATUS "wxWidgets_LIBRARIES: ${wxWidgets_LIBRARIES}")
		#MESSAGE(STATUS "wxWidgets_CXX_FLAGS: ${wxWidgets_CXX_FLAGS}")

		LINK_DIRECTORIES(${wxWidgets_LIBRARY_DIRS})

		IF(MSVC)
			ADD_DEFINITIONS(-DwxUSE_NO_MANIFEST=1)
		ENDIF(MSVC)

		# For use in the MRPTconfig.cmake
		SET(CMAKE_MRPT_WX_ROOT_DIR ${wxWidgets_ROOT_DIR})

		SET(CMAKE_MRPT_HAS_WXWIDGETS 1)

	ELSE(WX_mono)
		MESSAGE("wxWidgets was not found automatically. Please, set wxWidgets_ROOT_DIR to the lib directory to enable it in MRPT.")
		SET(CMAKE_MRPT_HAS_WXWIDGETS 0)
	ENDIF(WX_mono)
ENDIF(wxWidgets_FOUND)



# DISABLE_WXWIDGETS
# ---------------------
SET( DISABLE_WXWIDGETS OFF CACHE BOOL "Forces compilation WITHOUT wxWidgets")
IF(DISABLE_WXWIDGETS)
	SET(CMAKE_MRPT_HAS_WXWIDGETS 0)
	SET(wxWidgets_LIBRARIES "")
ENDIF(DISABLE_WXWIDGETS)


# Check for libdc1394-2 (Only in Linux, there is no 
#  Windows version yet...)
# ===================================================
SET(CMAKE_MRPT_HAS_LIBDC1394_2 0)
# Invoke pkg-config for getting the configuration:
IF(PKG_CONFIG_FOUND)
	PKG_CHECK_MODULES(LIBDC1394_2 libdc1394-2)
	IF (LIBDC1394_2_FOUND)
		SET(CMAKE_MRPT_HAS_LIBDC1394_2 1)
		#MESSAGE(STATUS "LIBDC1394_2_LIBRARIES    : ${LIBDC1394_2_LIBRARIES}")
		#MESSAGE(STATUS "LIBDC1394_2_INCLUDE_DIRS : ${LIBDC1394_2_INCLUDE_DIRS}")
		#MESSAGE(STATUS "LIBDC1394_2_LIBRARY_DIRS : ${LIBDC1394_2_LIBRARY_DIRS}")
		#MESSAGE(STATUS "LIBDC1394_2_LDFLAGS      : ${LIBDC1394_2_LDFLAGS}")


		IF ("${LIBDC1394_2_INCLUDE_DIRS}")
			INCLUDE_DIRECTORIES("${LIBDC1394_2_INCLUDE_DIRS}")
		ENDIF ("${LIBDC1394_2_INCLUDE_DIRS}")

		IF ("${LIBDC1394_2_LIBRARY_DIRS}")
			LINK_DIRECTORIES("${LIBDC1394_2_LIBRARY_DIRS}")
		ENDIF ("${LIBDC1394_2_LIBRARY_DIRS}")

		APPEND_MRPT_LIBS( ${LIBDC1394_2_LIBRARIES} )

		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} ${LIBDC1394_2_LDFLAGS}")
	ELSE(LIBDC1394_2_FOUND)
		SET(CMAKE_MRPT_HAS_LIBDC1394_2 0)
	ENDIF (LIBDC1394_2_FOUND)
ENDIF(PKG_CONFIG_FOUND)


# ---------------------------------------------------------------------------
#			OPTIONS
#The options for the user when using "cmakesetup" or "ccmake":
# ---------------------------------------------------------------------------
OPTION(MRPT_ALWAYS_CHECKS_DEBUG "Additional checks even in Release" "OFF")
OPTION(MRPT_ALWAYS_CHECKS_DEBUG_MATRICES "Additional checks even in Release (Only in matrix classes)" "ON")
OPTION(DISABLE_OPENCV "Disable the OpenCV library" "OFF")


# ---------------------------------------------------------------------------
#  Parse the value of options to disable stuff:
# ---------------------------------------------------------------------------
IF(DISABLE_OPENCV)
	SET(${CMAKE_MRPT_HAS_OPENCV} 0)
ENDIF(DISABLE_OPENCV)

# By default, compile this library if the directory exist:
# It will be not present in Debian packages due to legal restrictions:
# ------------------------------------------------------------------------
IF(EXISTS "${CMAKE_SOURCE_DIR}/otherlibs/sift-hess")
	SET( CMAKE_MRPT_HAS_SIFT_HESS 1)
ELSE(EXISTS "${CMAKE_SOURCE_DIR}/otherlibs/sift-hess")
	SET( CMAKE_MRPT_HAS_SIFT_HESS 0)
ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/otherlibs/sift-hess")

OPTION(DISABLE_SIFT_HESS "Disable the Hess' SIFT library" "OFF")
IF(DISABLE_SIFT_HESS)
	SET(CMAKE_MRPT_HAS_SIFT_HESS 0)
ENDIF(DISABLE_SIFT_HESS)



# ---------------------------------------------------------------------------
# Create the minimum list of libraries required by an application that
#  uses the MRPT C++ library. This must be passed to "TARGET_LINK_LIBRARIES"
# NOTE: For the compilers MSVC* & Borland most of the libraries are
#        automatically included through "#pragma"'s ;-)
# ---------------------------------------------------------------------------
IF(WIN32)
    # glut (for windows): Built-in
	INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/glut/")
ENDIF(WIN32)

IF(MSVC OR BORLAND)
	SET(MRPT_LINKER_LIBS "")
	SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "")

	IF(CMAKE_MRPT_HAS_ZLIB)
		INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/otherlibs/zlib/")
		SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0)
	ENDIF(CMAKE_MRPT_HAS_ZLIB)

	IF(CMAKE_MRPT_HAS_JPEG)
	#	INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/otherlibs/jpeg/")
		SET(CMAKE_MRPT_HAS_JPEG_SYSTEM 0)
	ENDIF(CMAKE_MRPT_HAS_JPEG)

	IF(CMAKE_MRPT_HAS_LIB3DS)
		INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/lib3ds/")
		SET(CMAKE_MRPT_HAS_LIB3DS_SYSTEM 0)
	ENDIF(CMAKE_MRPT_HAS_LIB3DS)

ELSE(MSVC OR BORLAND)

	# GL, GLU, glut:
	IF(CMAKE_MRPT_HAS_OPENGL_GLUT)
		APPEND_MRPT_LIBS(${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${GLUT_glut_LIBRARY})
		IF (UNIX)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lGL -lGLU -lglut")
		ELSE(UNIX)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lglut32 -lglut")
		ENDIF(UNIX)
	ENDIF(CMAKE_MRPT_HAS_OPENGL_GLUT)

	# FTDI:
	IF(CMAKE_MRPT_HAS_FTDI)
		IF (UNIX)
			# ${CMAKE_FTDI_LIBS}
			APPEND_MRPT_LIBS(ftdi usb)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lftdi -lusb")
		ELSE(UNIX)
			# Nothing...
		ENDIF(UNIX)
	ENDIF(CMAKE_MRPT_HAS_FTDI)

	# 3ds:
	IF(CMAKE_MRPT_HAS_LIB3DS)
		FIND_FILE(LIB3DS_CONFIG_FILE lib3ds-config)
		IF(LIB3DS_CONFIG_FILE)
			# Get the config params:
			EXECUTE_PROCESS(COMMAND ${LIB3DS_CONFIG_FILE} --prefix
				RESULT_VARIABLE CMAKE_LIB3DS_CONFIG_RES
				OUTPUT_VARIABLE CMAKE_LIB3DS_PREFIX
				OUTPUT_STRIP_TRAILING_WHITESPACE
				)
			IF(${CMAKE_LIB3DS_CONFIG_RES})
				MESSAGE("Error invoking lib3ds config file:\n ${LIB3DS_CONFIG_FILE} --prefix")
			ENDIF(${CMAKE_LIB3DS_CONFIG_RES})

			MESSAGE(STATUS "Found library: lib3ds - Include: ${CMAKE_LIB3DS_PREFIX}/include")

			INCLUDE_DIRECTORIES("${CMAKE_LIB3DS_PREFIX}/include")
			LINK_DIRECTORIES("${CMAKE_LIB3DS_PREFIX}/lib")

			APPEND_MRPT_LIBS(3ds)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -l3ds")

			SET(CMAKE_MRPT_HAS_LIB3DS_SYSTEM 1)
		ELSE(LIB3DS_CONFIG_FILE)
			INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/lib3ds/")

			APPEND_MRPT_LIBS(optimized mrpt-3ds debug mrpt-3ds-dbg)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-3ds")

			SET(CMAKE_MRPT_HAS_LIB3DS_SYSTEM 0)
		ENDIF(LIB3DS_CONFIG_FILE)

	ENDIF(CMAKE_MRPT_HAS_LIB3DS)

	# ZLIB:
	FIND_PACKAGE(ZLIB)
	IF(ZLIB_FOUND)
			MESSAGE(STATUS "Found library: zlib - Include: ${ZLIB_INCLUDE_DIR}")

			INCLUDE_DIRECTORIES("${ZLIB_INCLUDE_DIR}")
			
			APPEND_MRPT_LIBS(z)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lz")

			SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 1)
	ELSE(ZLIB_FOUND)
			INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/otherlibs/zlib/")

			# If we are using a static version of wxWidgets we dont need this... for now check if this is MinGW on Windows...
			IF (NOT WIN32)
				APPEND_MRPT_LIBS(optimized mrpt-zlib debug mrpt-zlib-dbg)
				SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-zlib")
			ENDIF(NOT WIN32)

			SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0)
	ENDIF(ZLIB_FOUND)
	
	# JPEG:
	FIND_PACKAGE(JPEG)
	IF(JPEG_FOUND)
			MESSAGE(STATUS "Found library: jpeg  - Include: ${JPEG_INCLUDE_DIR}")

			INCLUDE_DIRECTORIES("${JPEG_INCLUDE_DIR}")
			
			APPEND_MRPT_LIBS(jpeg)
			SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -ljpeg")

			SET(CMAKE_MRPT_HAS_JPEG_SYSTEM 1)
	ELSE(JPEG_FOUND)
			#INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/otherlibs/jpeg/")
			#SET(MRPT_LINKER_LIBS ${MRPT_LINKER_LIBS} mrpt-jpeg)
			#SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-jpeg")

			SET(CMAKE_MRPT_HAS_JPEG_SYSTEM 0)
	ENDIF(JPEG_FOUND)

	# In Linux, link against librt
	IF(UNIX)
		APPEND_MRPT_LIBS(rt)
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lrt -pthread")
	ENDIF(UNIX)
	
	# In Windows, link against ole32 & uuid & oleaut32, etc...
	IF(MINGW)
		APPEND_MRPT_LIBS(ole32 uuid oleaut32 gdi32)
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lole32 -luuid -loleaut32 -lgdi32")
	ENDIF(MINGW)
	
	# ANN & SIFT-HESS
	APPEND_MRPT_LIBS(optimized mrpt-ann debug mrpt-ann-dbg)
	SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-ann")

	IF(CMAKE_MRPT_HAS_OPENCV AND CMAKE_MRPT_HAS_SIFT_HESS)
		APPEND_MRPT_LIBS(optimized mrpt-sift-hess debug mrpt-sift-hess-dbg)
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} lmrpt-sift-hess")
	ENDIF(CMAKE_MRPT_HAS_OPENCV AND CMAKE_MRPT_HAS_SIFT_HESS)

ENDIF(MSVC OR BORLAND)

# OpenCV (all compilers):
IF(CMAKE_MRPT_HAS_OPENCV)
	INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIR})
	APPEND_MRPT_LIBS(${OpenCV_LIBRARIES})
	
	#MESSAGE(STATUS "OpenCV_LIBRARIES: ${OpenCV_LIBRARIES}")
	
	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXE_LINKER_FLAGS}")

	SET(CMAKE_MRPT_HAS_OPENCV_SYSTEM 1)

	# http://www.mip.informatik.uni-kiel.de/~jw/cmake/CMakeModules/DefineFlags.cmake
	IF(MSVC)
		# required for precompiled OpenCV usage, jw
		STRING_APPEND( CMAKE_EXE_LINKER_FLAGS_DEBUG      "/NODEFAULTLIB:\"libc.lib\"")
		STRING_APPEND( CMAKE_EXE_LINKER_FLAGS_RELEASE    "/NODEFAULTLIB:\"libcd.lib\"")
		STRING_APPEND( CMAKE_SHARED_LINKER_FLAGS_DEBUG   "/NODEFAULTLIB:\"libc.lib\"")
		STRING_APPEND( CMAKE_SHARED_LINKER_FLAGS_RELEASE "/NODEFAULTLIB:\"libcd.lib\"")
	ENDIF(MSVC)

	
ELSE(CMAKE_MRPT_HAS_OPENCV)
	# We NEED some headers anyway:
	INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/opencv/")
ENDIF(CMAKE_MRPT_HAS_OPENCV)


# We have gz-streams is we have zlib:
# ------------------------------------------
SET(CMAKE_MRPT_HAS_GZ_STREAMS ${CMAKE_MRPT_HAS_ZLIB})

# Boost: Add libraries
# ----------------------------------
IF(CMAKE_MRPT_HAS_BOOST)
	APPEND_MRPT_LIBS(${MY_Boost_LIBRARIES})

	FOREACH(BLIB ${MY_Boost_LIBRARIES})
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} ${BLIB}")
	ENDFOREACH(BLIB)
ENDIF(CMAKE_MRPT_HAS_BOOST)

# WXWIDGETS+GL: Add libraries
# -------------------------------------------
IF(CMAKE_MRPT_HAS_WXWIDGETS)
	APPEND_MRPT_LIBS(${wxWidgets_LIBRARIES})

	FOREACH(WXLIB ${wxWidgets_LIBRARIES})
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} ${WXLIB}")
	ENDFOREACH(WXLIB)
ENDIF(CMAKE_MRPT_HAS_WXWIDGETS)


# Save the basic list of libraries (without MRPT-libs):
# -------------------------------------------------------------------------------------
SET(MRPTLIB_LINKER_LIBS ${MRPT_LINKER_LIBS})
#MESSAGE(STATUS "MRPTLIB_LINKER_LIBS: ${MRPTLIB_LINKER_LIBS}")

# If we are building .so libs, don't link every program to all the libs:
IF(BUILD_SHARED_LIBS)
	SET(MRPT_LINKER_LIBS "")
	ENDIF(BUILD_SHARED_LIBS)
 

IF(NOT MSVC AND NOT BORLAND)
    # Core
	APPEND_MRPT_LIBS(optimized mrpt-core debug mrpt-core-dbg)
	SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-core")

	# ARIA:
	IF (BUILD_ARIA)
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-aria")
	ENDIF(BUILD_ARIA)

	# xSens:
	IF (CMAKE_MRPT_HAS_xSENS)
		SET(MRPT_LINKER_LIBS_FOR_PKGCONFIG "${MRPT_LINKER_LIBS_FOR_PKGCONFIG} -lmrpt-xsens")
	ENDIF(CMAKE_MRPT_HAS_xSENS)
ENDIF(NOT MSVC AND NOT BORLAND)

# Save the list of libraries according to the current debug/release build (gcc only)
# -------------------------------------------------------------------------------------
SET(MRPT_LINKER_LIBS_RELorDEB ${MRPT_LINKER_LIBS})

IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
	SET(MRPT_LINKER_LIBS_POSTFIX "${MRPT_DEBUG_POSTFIX}")
ELSE(CMAKE_BUILD_TYPE STREQUAL "Debug")
	SET(MRPT_LINKER_LIBS_POSTFIX "")
ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")

# Detect wordsize:
# -------------------------------------------
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)  # Size in bytes!
	SET(CMAKE_MRPT_WORD_SIZE 64)
ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8)  # Size in bytes!
	SET(CMAKE_MRPT_WORD_SIZE 32)
ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8)


# ---------------------------------------------------------------
#   "Clasic" function & headers detection:
# ---------------------------------------------------------------
INCLUDE (CheckFunctionExists)
INCLUDE (CheckIncludeFile)
#INCLUDE (CheckPrototypeExists) 
#CHECK_PROTOTYPE_EXISTS(isnanl "math.h" HAVE_ISNANL)

CHECK_FUNCTION_EXISTS(timegm HAVE_TIMEGM)
CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
CHECK_FUNCTION_EXISTS(gettid HAVE_GETTID)

CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE("winsock2.h" HAVE_WINSOCK2_H)

#CHECK_FUNCTION_EXISTS(OpenThread HAVE_OPENTHREAD)  # Does not work....
SET(HAVE_OPENTHREAD 0)
IF (MSVC AND NOT MSVC60)
	SET(HAVE_OPENTHREAD 1)
ENDIF (MSVC AND NOT MSVC60)



# ---------------------------------------------------------------
#   detect endian-ness
# ---------------------------------------------------------------
INCLUDE(TestBigEndian)
TEST_BIG_ENDIAN(CMAKE_MRPT_IS_BIG_ENDIAN)


# ----------------------------------------------------------------------------
# Transform the variables MRPT_XXX="ON/OFF" to CMAKE_MRPT_XXX="1/0"
# ----------------------------------------------------------------------------
MACRO(CREATE_CMAKE_MRPT_DEFINE defName)
	IF(${defName} MATCHES "ON")
		SET(CMAKE_${defName} "1")
	ELSE(${defName} MATCHES "ON")
		SET(CMAKE_${defName} "0")
	ENDIF(${defName} MATCHES "ON")
ENDMACRO(CREATE_CMAKE_MRPT_DEFINE)

CREATE_CMAKE_MRPT_DEFINE(MRPT_ALWAYS_CHECKS_DEBUG)
CREATE_CMAKE_MRPT_DEFINE(MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)
CREATE_CMAKE_MRPT_DEFINE(MRPT_HAS_BUMBLEBEE)
CREATE_CMAKE_MRPT_DEFINE(MRPT_HAS_ASSERT)
CREATE_CMAKE_MRPT_DEFINE(MRPT_HAS_STACKED_EXCEPTIONS)
CREATE_CMAKE_MRPT_DEFINE(MRPT_HAS_ASIAN_FONTS)
CREATE_CMAKE_MRPT_DEFINE(CMAKE_MRPT_HAS_INOTIFY)


# ----------------------------------------------------------------------------
#   				UPDATE CONFIG FILES & SCRIPTS:
#
#  CONFIGURE_FILE(InputFile OutputFile [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
# If @ONLY is specified, only variables of the form @VAR@ will be
#  replaces and ${VAR} will be ignored.
#
#  A directory will be created for each platform so the "config.h" file is
#   not overwritten if cmake generates code in the same path.
# ----------------------------------------------------------------------------
SET(MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/mrpt-config/" CACHE PATH "Where to create the platform-dependant config.h")
IF(UNIX)
	SET(MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/mrpt-config/unix/" )
ENDIF(UNIX)
IF (WIN32)
	SET(MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/mrpt-config/win32/")
ENDIF(WIN32)

FILE(MAKE_DIRECTORY  "${MRPT_CONFIG_FILE_INCLUDE_DIR}")
FILE(MAKE_DIRECTORY  "${MRPT_CONFIG_FILE_INCLUDE_DIR}/mrpt")

#MESSAGE(STATUS "Parsing 'config.h.in'")
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/mrpt/config.h.in" "${MRPT_CONFIG_FILE_INCLUDE_DIR}/mrpt/config.h")

# ----------------------------------------------------------------------------
#  Update the library version header file
#    FILE_TO_PARSE="SRC/include/mrpt/MRPT_version.h.in"
#    TARGET_FILE  ="MRPT_version.h"
# ----------------------------------------------------------------------------
SET(CMAKE_MRPT_COMPLETE_NAME "MRPT ${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}.${CMAKE_MRPT_VERSION_NUMBER_PATCH} ${CMAKE_MRPT_SVNVERSION}")

# Build a three digits version code, eg. 0.5.1 -> 051,  1.2.0 -> 120
SET(CMAKE_MRPT_VERSION_CODE "0x${CMAKE_MRPT_VERSION_NUMBER_MAJOR}${CMAKE_MRPT_VERSION_NUMBER_MINOR}${CMAKE_MRPT_VERSION_NUMBER_PATCH}")

#MESSAGE(STATUS "Parsing 'version.h.in'")
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mrpt/version.h.in "${MRPT_CONFIG_FILE_INCLUDE_DIR}/mrpt/version.h")


# ---------------------------------------------------------------------------
# The C++ include & link directories:
# ---------------------------------------------------------------------------
INCLUDE_DIRECTORIES(".")
INCLUDE_DIRECTORIES("${MRPT_CONFIG_FILE_INCLUDE_DIR}")
INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/include")
#INCLUDE_DIRECTORIES("${MRPT_SOURCE_DIR}/apps")

LINK_DIRECTORIES("${CMAKE_SOURCE_DIR}/lib" "${CMAKE_SOURCE_DIR}/lib/otherlibs")
LINK_DIRECTORIES("${CMAKE_BINARY_DIR}/lib")

IF(CMAKE_MRPT_HAS_BUMBLEBEE)
	INCLUDE_DIRECTORIES("${BUMBLEBEE_DIGICLOPS_ROOT_DIR}/include")
	INCLUDE_DIRECTORIES("${BUMBLEBEE_TRICLOPS_ROOT_DIR}/include")

	LINK_DIRECTORIES("${BUMBLEBEE_DIGICLOPS_ROOT_DIR}/lib")
	LINK_DIRECTORIES("${BUMBLEBEE_TRICLOPS_ROOT_DIR}/lib")
ENDIF(CMAKE_MRPT_HAS_BUMBLEBEE)

IF(CMAKE_MRPT_HAS_VLD)
	INCLUDE_DIRECTORIES("${ROOT_VISUAL_LEAK_DETECTOR}/include")
	LINK_DIRECTORIES("${ROOT_VISUAL_LEAK_DETECTOR}/lib")
ENDIF(CMAKE_MRPT_HAS_VLD)

IF(CMAKE_MRPT_HAS_xSENS)
	INCLUDE_DIRECTORIES("${ROOT_xSENS}")
ENDIF(CMAKE_MRPT_HAS_xSENS)

# Add user supplied extra options (optimization, etc...)
# ==========================================================
SET(USER_EXTRA_CPP_FLAGS "" CACHE STRING "Put extra compiler options here if desired")

# ----------------------------------------------------------------------------
# 			Set the maximum level of warnings:
# ----------------------------------------------------------------------------
SET( MRPT_EXTRA_WARNINGS OFF CACHE BOOL "Enable extra warnings apart from -Wall")

# Should be set to true for development
SET( MRPT_WARNINGS_ARE_ERRORS OFF CACHE BOOL "Treat warnings as errors")

# Whole program optimization?
SET( MRPT_WHOLE_PROGRAM_OPTIMIZATION OFF CACHE BOOL "Flags for whole program optimization.")

# Include Asian fonts in utils::CMRPTCanvas ?
SET( MRPT_HAS_ASIAN_FONTS OFF CACHE BOOL "Enable Asian fonts in utils::CMRPTCanvas (increases library size).")

IF(MSVC)
	SET(EXTRA_CPP_FLAGS "/W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE")
	# 64-bit portability warnings, in MSVC8+
	IF(MSVC80)
		SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} /Wp64 ")
	ENDIF(MSVC80)

	# Whole program optimization
	IF(MRPT_WHOLE_PROGRAM_OPTIMIZATION AND MSVC80)
		SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} /GL")
		SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG ")
		SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG ")
		SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /LTCG ")
		SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG ")
	ENDIF(MRPT_WHOLE_PROGRAM_OPTIMIZATION AND MSVC80)

	# Remove unreferenced functions: function level linking
	SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} /Gy")

	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 ")
ENDIF(MSVC)

IF(CMAKE_COMPILER_IS_GNUCXX)
	# High level of warnings. 
	# The -Wno-long-long is required in 64bit systems when including sytem headers.
 	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CONFIGURE_CFLAGS} -Wall -pedantic -Wno-long-long -Wno-write-strings")
 	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CONFIGURE_CFLAGS} -Wall -pedantic -Wno-long-long -Wno-write-strings")

	# We need pthread's
	IF (UNIX)
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
	ENDIF(UNIX)

	IF(MRPT_WARNINGS_ARE_ERRORS)
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
	ENDIF(MRPT_WARNINGS_ARE_ERRORS)


	# Whole program optimization
	IF(MRPT_WHOLE_PROGRAM_OPTIMIZATION)
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --combine")

		SET(MRPT_EXES_CXX_FLAGS "${MRPT_EXES_CXX_FLAGS} -fwhole-program --combine")
	ENDIF(MRPT_WHOLE_PROGRAM_OPTIMIZATION)


	# "-mtune=native" generates code optimized for the detected current processor.
	IF (CMAKE_MRPT_GCC_VERSION GREATER 41)
		SET( MRPT_OPTIMIZE_NATIVE ON CACHE BOOL "GCC optimizations for current processor (-mtune=native). Requires GCC 4.2+")
	ELSE (CMAKE_MRPT_GCC_VERSION GREATER 41)
		SET( MRPT_OPTIMIZE_NATIVE OFF CACHE BOOL "GCC optimizations for current processor (-mtune=native). Requires GCC 4.2+")
	ENDIF (CMAKE_MRPT_GCC_VERSION GREATER 41)

	IF(CMAKE_BUILD_TYPE STREQUAL "Debug")  # Not in debug!
		SET(MRPT_OPTIMIZE_NATIVE OFF)
	ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")

	IF(CMAKE_MRPT_USE_DEB_POSTFIXS)
		# If we're building a Debian package, just DO NOT use -mtune=native
		SET(EXTRA_CPP_FLAGS ${CFLAGS})
	ELSE(CMAKE_MRPT_USE_DEB_POSTFIXS)
		IF(MRPT_OPTIMIZE_NATIVE AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
			SET(EXTRA_CPP_FLAGS "-O3 -mtune=native")
		ENDIF(MRPT_OPTIMIZE_NATIVE AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
	ENDIF(CMAKE_MRPT_USE_DEB_POSTFIXS)

	# "-ffast-math"
	SET( MRPT_OPTIMIZE_FFAST-MATH OFF CACHE BOOL "GCC optimization for floating math (-ffast-math).")
	IF(MRPT_OPTIMIZE_FFAST-MATH)
		SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} -ffast-math")
	ENDIF(MRPT_OPTIMIZE_FFAST-MATH)

	# Profiling?
	IF(MRPT_ENABLE_PROFILING)
		SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} -pg -g")
	ELSEIF(MRPT_ENABLE_PROFILING)
		# Remove unreferenced functions: function level linking
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections")
	ENDIF(MRPT_ENABLE_PROFILING)

	# Parallel stdlibc++?
	IF(MRPT_ENABLE_LIBSTD_PARALLEL_MODE)
		SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} -D_GLIBCXX_PARALLEL -fopenmp")
	ENDIF(MRPT_ENABLE_LIBSTD_PARALLEL_MODE)

	IF(CMAKE_BUILD_TYPE MATCHES "Debug")
		# This is to enable stack walker:
		SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} -g")
		ADD_DEFINITIONS( -D_DEBUG)
		ADD_DEFINITIONS( -DDEBUG)
	ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug")

	# Cross compiling Linux 64bits -> 32 bits?
	IF(UNIX)
		# Are we in a 64 bit Linux?
		IF(CMAKE_SIZEOF_VOID_P EQUAL 8)  # Size in bytes!
			SET( MRPT_CROSS_COMPILE_64_TO_32 OFF CACHE BOOL "Build 32 bit executables (Default=OFF, native 64 bit)")
			IF(MRPT_CROSS_COMPILE_64_TO_32)
				SET(EXTRA_CPP_FLAGS "${EXTRA_CPP_FLAGS} -m32")
				SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
				SET(CMAKE_MRPT_64BIT_COMPILE_MODE "32 bit cross-compiling")

				SET(CMAKE_MRPT_WORD_SIZE 32)	# Fake wordsize
			ELSE(MRPT_CROSS_COMPILE_64_TO_32)
				SET(CMAKE_MRPT_64BIT_COMPILE_MODE "64 bit native")
			ENDIF(MRPT_CROSS_COMPILE_64_TO_32)
		ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
	ENDIF(UNIX)


ENDIF(CMAKE_COMPILER_IS_GNUCXX)

# Even more warnings: "Scott Meyers' Effective C++ book"
IF(MRPT_EXTRA_WARNINGS)
	IF(CMAKE_COMPILER_IS_GNUCXX)
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++")  # -Wold-style-cast  -Woverloaded-virtual
	ENDIF(CMAKE_COMPILER_IS_GNUCXX)
ENDIF(MRPT_EXTRA_WARNINGS)



# Add user supplied extra options (optimization, etc...)
# ==========================================================

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CPP_FLAGS} ${USER_EXTRA_CPP_FLAGS}")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CPP_FLAGS} ${USER_EXTRA_CPP_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${EXTRA_CPP_FLAGS} ${USER_EXTRA_CPP_FLAGS}")

IF(CMAKE_COMPILER_IS_GNUCXX)
	# --as-needed: Avoid unnecesary libraries (.so dependencies):
	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
	SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

IF ("${CMAKE_CONFIGURE_LDFLAGS}")
	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")
ENDIF ("${CMAKE_CONFIGURE_LDFLAGS}")

#MESSAGE(STATUS "Final CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
#MESSAGE(STATUS "Final CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")
#MESSAGE(STATUS "Final CMAKE_SHARED_LINKER_FLAGS: ${CMAKE_SHARED_LINKER_FLAGS}")
#MESSAGE(STATUS "Final MRPTLIB_LINKER_LIBS: ${MRPTLIB_LINKER_LIBS}")

# ----------------------------------------------------------------------------
#      					PROCESS SUBDIRECTORIES:
# ----------------------------------------------------------------------------
#MESSAGE(STATUS "CMAKE_CONFIGURATION_TYPES: ${CMAKE_CONFIGURATION_TYPES}")

# Save libs and executables in the same place
SET( LIBRARY_OUTPUT_PATH ${MRPT_BINARY_DIR}/lib CACHE PATH "Output directory for libraries" )
SET( EXECUTABLE_OUTPUT_PATH ${MRPT_BINARY_DIR}/bin CACHE PATH "Output directory for applications" )

#-----------------------------------
#  Build the hardware drivers?
#-----------------------------------
SET( BUILD_HWDRIVERS ON CACHE BOOL "Build hardware drivers (library apps/lib_hwdrivers)?.")


#--------------------------------------------------------------
# If we are building the final step of the Debian package,
#  save each library files in the corresponding directories:
#--------------------------------------------------------------
IF(CMAKE_MRPT_USE_DEB_POSTFIXS)
    MESSAGE(STATUS "mrpt cmake: Using Debian post-fix for install directories.")
    SET(libmrpt_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-core${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}/usr/")
    SET(libmrpt_ann_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-ann${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}/usr/")
#    SET(libmrpt_sift_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-sift-hess${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}/usr/")
    SET(libmrpt_aria_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-aria${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}/usr/")
    SET(libmrpt_hwdrivers_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-hwdrivers${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}/usr/")
    SET(libmrpt_reactivenav_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-reactivenav${CMAKE_MRPT_VERSION_NUMBER_MAJOR}.${CMAKE_MRPT_VERSION_NUMBER_MINOR}/usr/")
    SET(libmrpt_dev_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmrpt-dev/usr/")
    SET(mrpt_apps_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/mrpt-apps/usr/")
    SET(mrpt_doc_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/mrpt-doc/usr/")
ELSE(CMAKE_MRPT_USE_DEB_POSTFIXS)
    SET(libmrpt_INSTALL_PREFIX "")
    SET(libmrpt_ann_INSTALL_PREFIX "")
    SET(libmrpt_sift_INSTALL_PREFIX "")
    SET(libmrpt_aria_INSTALL_PREFIX "")
    SET(libmrpt_hwdrivers_INSTALL_PREFIX "")
    SET(libmrpt_reactivenav_INSTALL_PREFIX "")
    SET(libmrpt_dev_INSTALL_PREFIX "")
    SET(mrpt_apps_INSTALL_PREFIX "")
    SET(mrpt_doc_INSTALL_PREFIX "")
ENDIF(CMAKE_MRPT_USE_DEB_POSTFIXS)


# ==========================================================
#  RPath handling (UNIX only)
# http://www.cmake.org/Wiki/CMake_RPATH_handling
# ==========================================================
#IF(UNIX)
    # use, i.e. don't skip the full RPATH for the build tree
#    SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
    # when building, don't use the install RPATH already
    # (but later on when installing)
#    SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

    # the RPATH to be used when installing
#    IF (${libmrpt_INSTALL_PREFIX})
#        SET(CMAKE_INSTALL_RPATH "${libmrpt_INSTALL_PREFIX}/lib")
#    ELSE (${libmrpt_INSTALL_PREFIX})
#        SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#    ENDIF(${libmrpt_INSTALL_PREFIX})
    # add the automatically determined parts of the RPATH
    # which point to directories outside the build tree to the install RPATH
#    SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
#ENDIF(UNIX)


#-----------------------------------
# The third-party libraries
#-----------------------------------
add_subdirectory(otherlibs)

#-----------------------------------
# The MRPT C++ libraries:
#-----------------------------------
add_subdirectory(src)

#-----------------------------------
# The samples:
#-----------------------------------
SET( BUILD_EXAMPLES OFF CACHE BOOL "Build examples?")
IF(BUILD_EXAMPLES)
	SET(CMAKE_MRPT_EXAMPLES_BASE_DIRECTORY "${CMAKE_SOURCE_DIR}/samples/")
	# Fix "\" --> "\\" for windows:
	string(REPLACE "\\" "\\\\" CMAKE_MRPT_EXAMPLES_BASE_DIRECTORY ${CMAKE_MRPT_EXAMPLES_BASE_DIRECTORY})

	MESSAGE(STATUS "Parsing 'examples_config.h.in'")
	CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mrpt/examples_config.h.in "${MRPT_CONFIG_FILE_INCLUDE_DIR}/mrpt/examples_config.h")

	# Generate CMakeLists.txt from the template project file for examples:
	MESSAGE(STATUS "Generating CMakefiles.txt for examples...")

	# ---------------------------------------------------------------
	#  MACRO for samples directories
	# ---------------------------------------------------------------
	MACRO(GENERATE_CMAKE_FILES_SAMPLES_DIRECTORY) #CURRENT_SAMPLES_DIR)
		FOREACH(CMAKE_MRPT_EXAMPLE_NAME ${LIST_EXAMPLES_IN_THIS_DIR})
			#MESSAGE(STATUS "Example: ${CMAKE_MRPT_EXAMPLE_NAME}")
			# Generate project file:
			CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/samples/CMakeLists_template.txt.in ${CMAKE_SOURCE_DIR}/samples/${CMAKE_MRPT_EXAMPLE_NAME}/CMakeLists.txt @ONLY)

			SET(CMAKE_COMMANDS_INCLUDE_EXAMPLE_DIRS_ROOT "${CMAKE_COMMANDS_INCLUDE_EXAMPLE_DIRS_ROOT}\nadd_subdirectory(${CMAKE_MRPT_EXAMPLE_NAME})")
		ENDFOREACH(CMAKE_MRPT_EXAMPLE_NAME)
	ENDMACRO(GENERATE_CMAKE_FILES_SAMPLES_DIRECTORY)
	# ---------------------------------------------------------------
	#  END OF MACRO for samples directories
	# ---------------------------------------------------------------

	# -----------------------------------------------------------------
	# This loop is generic, do not modify it...
	#  modify the above variable and/or the list_examples.txt files!
	# -----------------------------------------------------------------
	SET(CMAKE_COMMANDS_INCLUDE_EXAMPLE_DIRS_ROOT "")

	# === UTILS ===
	#  list of examples for each directory:
	SET(LIST_EXAMPLES_IN_THIS_DIR
		db
		display3D
		imageBasics
		imageCorrelation
		random
		SocketsTest
		times
		directoryExplorer
		imageConvolutionFFT
		imageFFT
		matrix
		rejectionSampling
		stringList
		exceptionDemo
		benchmark-matrix
		bayesianTracking
		displayPlots
		threadsTest
		critSectionDeadLock
		textFonts
		fileSystemWatcher
		optimize-lm
		geometry3D
		icp
		poses
		RangeOnlyLocalization_RejectionSampling
		consistent_global_optimization
		benchmark-gridmaps
		gridMapLikelihoodCharacterization
		pathPlanning
		gridRawlogSimulator
		captureVideo
		captureVideo1394
		gauss_and_DOG_convolution
		trackVideoFeatures
		test-compress
		spline_interpolation
		gravity3d
		resampling-test
		feature_extraction
		gps-coordinates
		sog-merge
		laserProjectionInImages
		)
	SET(CMAKE_EXAMPLE_DEPS mrpt-core)
	SET(CMAKE_EXAMPLE_LINK_LIBS ${MRPT_LINKER_LIBS})
	GENERATE_CMAKE_FILES_SAMPLES_DIRECTORY()

	# === HWDRIVERS ===
	IF(BUILD_HWDRIVERS)
		#  list of examples for each directory:
		SET(LIST_EXAMPLES_IN_THIS_DIR
			GPS_test
			sonar_SRF10_test
			eNoses_test
			SerialPort_test
			FTDI_USB_enumerate_test
			SICK_laser_test
			HOKUYO_laser_test
			joystick
			pioneerRobotDemo
			ptuDPerception
			ptuHokuyo
			)
		SET(CMAKE_EXAMPLE_DEPS mrpt-core mrpt-hwdrivers)
		SET(CMAKE_EXAMPLE_LINK_LIBS ${MRPT_LINKER_LIBS} optimized mrpt-hwdrivers debug mrpt-hwdrivers)
		GENERATE_CMAKE_FILES_SAMPLES_DIRECTORY()
	ENDIF(BUILD_HWDRIVERS)

	# Generate the CMakeLists.txt in the "/samples" directory
	SET(CMAKE_COMMANDS_INCLUDE_EXAMPLE_DIRS ${CMAKE_COMMANDS_INCLUDE_EXAMPLE_DIRS_ROOT})
	CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/samples/CMakeLists_list_template.txt.in "${CMAKE_SOURCE_DIR}/samples/CMakeLists.txt" )

	add_subdirectory(samples)
ENDIF(BUILD_EXAMPLES)

#-----------------------------------
# The applications:
#-----------------------------------
add_subdirectory(apps)

#-----------------------------------
# Documentation targets:
#-----------------------------------
add_subdirectory(doc)

IF(UNIX)
	add_subdirectory(man-pages)
ENDIF(UNIX)

# ----------------------------------------------------------------------------
#   Generate the .pc file(s) for pkg-config
# ----------------------------------------------------------------------------
IF(UNIX)
	MESSAGE(STATUS "Generating libmrpt.pc file for pkg-config...")
	CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/pkgconfig/libmrpt.pc.in "${CMAKE_BINARY_DIR}/pkgconfig/libmrpt.pc" @ONLY)
ENDIF(UNIX)

# ----------------------------------------------------------------------------
#   Generate the MRPTConfig.cmake file
# ----------------------------------------------------------------------------
SET(THE_MRPT_SOURCE_DIR "${MRPT_SOURCE_DIR}")
SET(THE_CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}")
SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "${MRPT_CONFIG_FILE_INCLUDE_DIR}")

CONFIGURE_FILE("${MRPT_SOURCE_DIR}/MRPTConfig.cmake.in"
               "${MRPT_BINARY_DIR}/MRPTConfig.cmake" @ONLY IMMEDIATE )

# ----------------------------------------------------------------------------
#   Generate the MRPTConfig.cmake file for unix
#      installation in CMAKE_INSTALL_PREFIX
# ----------------------------------------------------------------------------
SET(THE_MRPT_SOURCE_DIR "\${THIS_MRPT_CONFIG_PATH}")
SET(THE_CMAKE_BINARY_DIR "\${THIS_MRPT_CONFIG_PATH}")
SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "\${THIS_MRPT_CONFIG_PATH}/include/mrpt/")

CONFIGURE_FILE("${MRPT_SOURCE_DIR}/MRPTConfig.cmake.in"
               "${MRPT_BINARY_DIR}/unix-install/MRPTConfig.cmake" @ONLY IMMEDIATE )

# ----------------------------------------------------------------------------
#   Uninstall target, for "make uninstall"
# ----------------------------------------------------------------------------
CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  IMMEDIATE @ONLY)

ADD_CUSTOM_TARGET(uninstall
  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")


# ----------------------------------------------------------------------------
#  Hide some variables to the user, just show the important variables:
# ----------------------------------------------------------------------------
MARK_AS_ADVANCED(FORCE
	CMAKE_BACKWARDS_COMPATIBILITY
	wxWidgets_CONFIGURATION
	wxWidgets_LIB_DIR
#	wxWidgets_ROOT_DIR
	wxWidgets_USE_REL_AND_DBG
	wxWidgets_wxrc_EXECUTABLE
)

# ----------------------------------------------------------------------------
#   An auxiliary function to show messages:
# ----------------------------------------------------------------------------
MACRO(SHOW_CONFIG_LINE MSG_TEXT VALUE_BOOL)
	IF(${VALUE_BOOL})
		SET(VAL_TEXT "Yes")
	ELSE(${VALUE_BOOL})
		SET(VAL_TEXT " No")
	ENDIF(${VALUE_BOOL})
	MESSAGE(STATUS " ${MSG_TEXT} : ${VAL_TEXT}")
ENDMACRO(SHOW_CONFIG_LINE)

MACRO(SHOW_CONFIG_LINE_SYSTEM MSG_TEXT VALUE_BOOL)
	IF(${VALUE_BOOL})
		IF(${VALUE_BOOL}_SYSTEM)
			SET(VAL_TEXT "Yes (System)")
		ELSE(${VALUE_BOOL}_SYSTEM)
			SET(VAL_TEXT "Yes (Built-in)")
		ENDIF(${VALUE_BOOL}_SYSTEM)
	ELSE(${VALUE_BOOL})
		SET(VAL_TEXT " No")
	ENDIF(${VALUE_BOOL})
	MESSAGE(STATUS " ${MSG_TEXT} : ${VAL_TEXT} ${ARGV2}")
ENDMACRO(SHOW_CONFIG_LINE_SYSTEM)


# ----------------------------------------------------------------------------
#   TESTS
# ----------------------------------------------------------------------------
SET( BUILD_TESTING ON CACHE BOOL "Build MRPT tests")
IF( BUILD_TESTING)
    enable_testing()
    add_subdirectory(tests)
ENDIF( BUILD_TESTING)



# ----------------------------------------------------------------------------
#   More installation commands:
# ----------------------------------------------------------------------------
IF(EXISTS "${MRPT_BINARY_DIR}/pkgconfig/libmrpt.pc")
	INSTALL(FILES "${MRPT_BINARY_DIR}/pkgconfig/libmrpt.pc" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}lib/pkgconfig)
ENDIF(EXISTS "${MRPT_BINARY_DIR}/pkgconfig/libmrpt.pc")

# CMake will look for MRPTConfig.cmake at: /usr/share|lib/mrpt
IF(WIN32)
	INSTALL(FILES "${MRPT_BINARY_DIR}/unix-install/MRPTConfig.cmake" DESTINATION ./ )
ELSE(WIN32)
	INSTALL(FILES "${MRPT_BINARY_DIR}/unix-install/MRPTConfig.cmake" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}share/mrpt )
ENDIF(WIN32)

# Docs, examples and the rest of files:
IF(WIN32)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/doc" DESTINATION ./ PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/cmakemodules" DESTINATION ./ PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/makefiles" DESTINATION ./ PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/man-pages" DESTINATION ./ PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/otherlibs" DESTINATION ./ PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/pkgconfig" DESTINATION ./ PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/samples" DESTINATION ./  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/share" DESTINATION ./  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/scripts" DESTINATION ./  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/tests" DESTINATION ./  PATTERN ".svn" EXCLUDE)

	# Extra optional DLLs to be installed in the "bin" folder:
	file(TO_CMAKE_PATH "$ENV{MRPT_EXTRA_DLLS_TO_INSTALL}" MRPT_EXTRA_DLLS_TO_INSTALL)
	string(LENGTH "${MRPT_EXTRA_DLLS_TO_INSTALL}" MRPT_EXTRA_DLLS_TO_INSTALL_LEN)

	IF (${MRPT_EXTRA_DLLS_TO_INSTALL_LEN} GREATER 0)
		INSTALL(FILES ${MRPT_EXTRA_DLLS_TO_INSTALL} DESTINATION bin)
	ENDIF(${MRPT_EXTRA_DLLS_TO_INSTALL_LEN} GREATER 0)
	
ELSE(WIN32)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/doc/html" DESTINATION ${mrpt_doc_INSTALL_PREFIX}share/doc/mrpt-doc/  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/samples" DESTINATION ${mrpt_doc_INSTALL_PREFIX}share/doc/mrpt-doc/  PATTERN ".svn" EXCLUDE)
	INSTALL(FILES "${MRPT_SOURCE_DIR}/doc/mrpt_example1.tar.gz" DESTINATION ${mrpt_doc_INSTALL_PREFIX}share/doc/mrpt-doc/ )
	IF(EXISTS "${MRPT_SOURCE_DIR}/doc/mrpt-book.ps.gz")
		INSTALL(FILES "${MRPT_SOURCE_DIR}/doc/mrpt-book.ps.gz" DESTINATION ${mrpt_doc_INSTALL_PREFIX}share/doc/mrpt-doc/ )
	ENDIF(EXISTS "${MRPT_SOURCE_DIR}/doc/mrpt-book.ps.gz")
	
	# applications config files
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/share/applications" DESTINATION ${mrpt_apps_INSTALL_PREFIX}share PATTERN ".svn" EXCLUDE)
	#INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/share/menu" DESTINATION ${mrpt_apps_INSTALL_PREFIX}share  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/share/mime" DESTINATION ${mrpt_apps_INSTALL_PREFIX}share  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/share/mrpt" DESTINATION ${mrpt_apps_INSTALL_PREFIX}share  PATTERN ".svn" EXCLUDE)
	INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/share/pixmaps" DESTINATION ${mrpt_apps_INSTALL_PREFIX}share  PATTERN ".svn" EXCLUDE)
ENDIF(WIN32)

# headers
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/bayes" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/compress" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/gui" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/math" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/opengl" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/poses" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/random" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/scan_matching" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/slam" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/synch" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/system" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/utils" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/vision" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/topography" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt  PATTERN ".svn" EXCLUDE)

# separate .h files:
FILE(GLOB aux_hdrs "${MRPT_SOURCE_DIR}/include/mrpt/*.h")
INSTALL(FILES ${aux_hdrs} DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/ )
INSTALL(FILES "${MRPT_CONFIG_FILE_INCLUDE_DIR}/mrpt/config.h" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/ )

# Otherlibs:
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/stlplus" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/otherlibs/  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/ann" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/otherlibs/  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/aria" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/otherlibs/  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/mathplot" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/otherlibs/  PATTERN ".svn" EXCLUDE)
INSTALL(DIRECTORY "${MRPT_SOURCE_DIR}/include/mrpt/otherlibs/xSens" DESTINATION ${libmrpt_dev_INSTALL_PREFIX}include/mrpt/otherlibs/  PATTERN ".svn" EXCLUDE)



# ----------------------------------------------------------------------------
#   Sumary:
# ----------------------------------------------------------------------------
MESSAGE(STATUS "")
MESSAGE(STATUS "Resulting configuration for ${CMAKE_MRPT_COMPLETE_NAME}:")
MESSAGE(STATUS "-----------------------------------------------------------------")
SHOW_CONFIG_LINE("Will MRPT be built as a shared library? " CMAKE_MRPT_BUILD_SHARED_LIB_ONOFF)
SHOW_CONFIG_LINE("Additional checks even in Release       " CMAKE_MRPT_ALWAYS_CHECKS_DEBUG)
SHOW_CONFIG_LINE("Additional matrix checks                " CMAKE_MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)
IF(CMAKE_MRPT_64BIT_COMPILE_MODE)
	MESSAGE(STATUS   " 64 bit compilation mode                  : ${CMAKE_MRPT_64BIT_COMPILE_MODE}")
ENDIF(CMAKE_MRPT_64BIT_COMPILE_MODE)

MESSAGE(STATUS   " Is system big endian?                    : ${CMAKE_MRPT_IS_BIG_ENDIAN}")

MESSAGE(STATUS "")

SHOW_CONFIG_LINE("Has Bumblebee stereo camera             " CMAKE_MRPT_HAS_BUMBLEBEE)
SHOW_CONFIG_LINE("Has wxWidgets incl. OpenGL classes      " CMAKE_MRPT_HAS_WXWIDGETS)
SHOW_CONFIG_LINE("Has OpenGL & GLUT:                      " CMAKE_MRPT_HAS_OPENGL_GLUT)
SHOW_CONFIG_LINE("Has xSENS MTi library (inertial sensor) " CMAKE_MRPT_HAS_xSENS)
SHOW_CONFIG_LINE("Has boost                               " CMAKE_MRPT_HAS_BOOST)
SHOW_CONFIG_LINE("Has libdc1394-2 (FireWire capture)      " CMAKE_MRPT_HAS_LIBDC1394_2)
SHOW_CONFIG_LINE_SYSTEM("Has OpenCV (Image manipulation)         " CMAKE_MRPT_HAS_OPENCV "Version: ${MRPT_OPENCV_VERSION}")
SHOW_CONFIG_LINE_SYSTEM("Has lib3ds (3DStudio scenes)            " CMAKE_MRPT_HAS_LIB3DS)
SHOW_CONFIG_LINE_SYSTEM("Has zlib (compression)                  " CMAKE_MRPT_HAS_ZLIB)
SHOW_CONFIG_LINE_SYSTEM("Has libjpeg (jpeg)                      " CMAKE_MRPT_HAS_JPEG)


IF(UNIX)
	SHOW_CONFIG_LINE_SYSTEM("Has libftdi (USB)                       " CMAKE_MRPT_HAS_FTDI)
ENDIF(UNIX)
MESSAGE(STATUS "")

MESSAGE(STATUS "  C++ config header : ${MRPT_CONFIG_FILE_INCLUDE_DIR}")
MESSAGE(STATUS "-----------------------------------------------------------------")

MESSAGE(STATUS "")

