2015-11-29 18:39:20 -05:00
cmake_minimum_required ( VERSION 2.8.5 )
2011-10-25 15:48:19 +00:00
2015-05-20 16:55:56 -04:00
# Detect if it is called by catkin
2017-10-09 19:11:41 -04:00
IF ( CATKIN_TOPLEVEL OR CATKIN_BUILD_BINARY_PACKAGE OR CATKIN_SKIP_TESTING OR CATKIN_ENABLE_TESTING OR CATKIN_DEVEL_PREFIX )
2016-05-08 16:34:41 -04:00
SET ( CATKIN_BUILD TRUE )
2017-10-09 19:11:41 -04:00
ENDIF ( CATKIN_TOPLEVEL OR CATKIN_BUILD_BINARY_PACKAGE OR CATKIN_SKIP_TESTING OR CATKIN_ENABLE_TESTING OR CATKIN_DEVEL_PREFIX )
2016-05-08 16:34:41 -04:00
MESSAGE ( STATUS "CATKIN_BUILD=${CATKIN_BUILD}" )
2015-05-20 15:21:17 -04:00
2015-05-20 14:50:25 -04:00
IF ( NOT CATKIN_BUILD )
#Standalone build
PROJECT ( Find-Object )
ELSE ( )
2015-05-20 16:55:56 -04:00
#ROS catkin build
2015-05-20 14:50:25 -04:00
PROJECT ( find_object_2d )
2014-07-31 20:59:25 +00:00
ENDIF ( )
2011-10-25 15:48:19 +00:00
2015-11-29 18:39:20 -05:00
# Catkin doesn't support multiarch library path,
# fix to "lib" if not set by user.
IF ( NOT DEFINED CMAKE_INSTALL_LIBDIR )
set ( CMAKE_INSTALL_LIBDIR "lib" )
ENDIF ( NOT DEFINED CMAKE_INSTALL_LIBDIR )
INCLUDE ( GNUInstallDirs )
2018-07-30 15:27:03 -04:00
####### local cmake modules #######
SET ( CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules" )
2018-07-30 15:54:01 -04:00
# Policy CMP0043 introduced in cmake version 3.0 IGNORES the use of COMPILE_DEFINITIONS suffixed variables, e.g. COMPILE_DEFINITIONS_DEBUG
# Set to OLD behavior until minimum cmake version >= 2.8.10 (version that COMPILE_DEFINITIONS can be set by generator expressions instead)
if ( POLICY CMP0043 )
cmake_policy ( SET CMP0043 OLD )
endif ( POLICY CMP0043 )
# Policy CMP0042 introduced in cmake version 3.0 enables the use of @rpath in an install name via MACOSX_RPATH by default
# Set to OLD behavior so that all versions use the same behavior, or until minimum cmake version >= 2.8.12 (version where @rpath is available)
if ( POLICY CMP0042 )
cmake_policy ( SET CMP0042 OLD )
endif ( POLICY CMP0042 )
2018-07-30 15:27:03 -04:00
2011-11-09 19:01:46 +00:00
#######################
# VERSION
#######################
2017-11-07 11:07:35 -05:00
SET ( PROJECT_VERSION "0.6.2" )
2015-05-20 14:50:25 -04:00
SET ( PROJECT_PREFIX find_object )
2011-11-09 19:01:46 +00:00
STRING ( REGEX MATCHALL "[0-9]" PROJECT_VERSION_PARTS "${PROJECT_VERSION}" )
LIST ( GET PROJECT_VERSION_PARTS 0 PROJECT_VERSION_MAJOR )
LIST ( GET PROJECT_VERSION_PARTS 1 PROJECT_VERSION_MINOR )
LIST ( GET PROJECT_VERSION_PARTS 2 PROJECT_VERSION_PATCH )
2015-05-20 14:50:25 -04:00
ADD_DEFINITIONS ( -DPROJECT_PREFIX= "${PROJECT_PREFIX}" )
ADD_DEFINITIONS ( -DPROJECT_VERSION= "${PROJECT_VERSION}" )
ADD_DEFINITIONS ( -DPROJECT_NAME= "${PROJECT_NAME}" )
2014-07-31 20:11:46 +00:00
2020-01-15 16:39:22 -05:00
CONFIGURE_FILE ( snap/snapcraft.yaml.in ${ PROJECT_SOURCE_DIR } /snap/snapcraft.yaml )
message ( STATUS "\" snap/snapcraft.yaml\ " has been generated with version \" ${ PROJECT_VERSION } \". To create a snap, do \"snapcraft\" in find-object's root directory. " )
2011-10-25 15:48:19 +00:00
####### DEPENDENCIES #######
FIND_PACKAGE ( OpenCV REQUIRED ) # tested on 2.3.1
2015-11-29 18:39:20 -05:00
2019-06-17 11:43:26 -04:00
IF ( OpenCV_VERSION_MAJOR EQUAL 4 )
IF ( NOT MSVC )
include ( CheckCXXCompilerFlag )
CHECK_CXX_COMPILER_FLAG ( "-std=c++11" COMPILER_SUPPORTS_CXX11 )
CHECK_CXX_COMPILER_FLAG ( "-std=c++0x" COMPILER_SUPPORTS_CXX0X )
IF ( COMPILER_SUPPORTS_CXX11 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
ELSEIF ( COMPILER_SUPPORTS_CXX0X )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" )
ELSE ( )
message ( STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler." )
ENDIF ( )
ENDIF ( NOT MSVC )
ENDIF ( OpenCV_VERSION_MAJOR EQUAL 4 )
2016-05-06 16:54:18 -04:00
# look for Qt5 before Qt4
FIND_PACKAGE ( Qt5 COMPONENTS Widgets Core Gui Network QUIET )
IF ( NOT Qt5_FOUND )
2015-11-29 18:39:20 -05:00
FIND_PACKAGE ( Qt4 COMPONENTS QtCore QtGui QtNetwork REQUIRED )
2016-05-06 16:54:18 -04:00
ENDIF ( NOT Qt5_FOUND )
2014-07-08 19:55:03 +00:00
ADD_DEFINITIONS ( -DQT_NO_KEYWORDS ) # To avoid conflicts with boost signals used in ROS
2011-10-25 15:48:19 +00:00
2018-07-30 15:27:03 -04:00
FIND_PACKAGE ( Tcmalloc QUIET )
2018-09-10 18:57:51 -04:00
FIND_PACKAGE ( ZLIB REQUIRED QUIET )
2019-06-17 11:43:26 -04:00
SET ( NONFREE 1 )
IF ( NOT ( OPENCV_NONFREE_FOUND OR OPENCV_XFEATURES2D_FOUND ) )
SET ( NONFREE 0 )
ELSEIF ( OpenCV_VERSION VERSION_GREATER "3.4.2" )
FIND_FILE ( OpenCV_MODULES_HPP opencv2/opencv_modules.hpp
P A T H S $ { O p e n C V _ I N C L U D E _ D I R S }
N O _ D E F A U L T _ P A T H )
FILE ( READ ${ OpenCV_MODULES_HPP } TMPTXT )
STRING ( FIND "${TMPTXT}" "#define OPENCV_ENABLE_NONFREE" matchres )
IF ( ${ matchres } EQUAL -1 )
SET ( NONFREE 0 )
ENDIF ( ${ matchres } EQUAL -1 )
ENDIF ( )
2015-06-23 16:38:47 -04:00
2014-11-28 21:47:02 +00:00
CONFIGURE_FILE ( Version.h.in ${ PROJECT_SOURCE_DIR } /include/ ${ PROJECT_PREFIX } /Version.h )
2014-10-24 02:46:03 +00:00
2015-05-20 14:50:25 -04:00
IF ( NOT CATKIN_BUILD )
#Standalone build
IF ( WIN32 AND NOT MINGW )
ADD_DEFINITIONS ( "-wd4251" )
ELSE ( )
ADD_DEFINITIONS ( "-Wall" )
ENDIF ( )
#ADD_DEFINITIONS("-DUNICODE") # to test with UNICODE projects
####### COMPILATION PARAMS #######
# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
IF ( ${ CMAKE_GENERATOR } MATCHES ".*Makefiles" )
IF ( "${CMAKE_BUILD_TYPE}" STREQUAL "" )
set ( CMAKE_BUILD_TYPE Release )
ENDIF ( "${CMAKE_BUILD_TYPE}" STREQUAL "" )
ENDIF ( ${ CMAKE_GENERATOR } MATCHES ".*Makefiles" )
SET ( CMAKE_DEBUG_POSTFIX "d" )
####### Build libraries as shared or static #######
OPTION ( BUILD_SHARED_LIBS "Set to OFF to build static libraries" ON )
####### OUTPUT DIR #######
SET ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ PROJECT_SOURCE_DIR } /bin )
SET ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ PROJECT_SOURCE_DIR } /bin )
SET ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ PROJECT_SOURCE_DIR } /lib )
####### INSTALL DIR #######
# Offer the user the choice of overriding the installation directories
set ( INSTALL_INCLUDE_DIR include/ ${ PROJECT_PREFIX } - ${ PROJECT_VERSION_MAJOR } . ${ PROJECT_VERSION_MINOR } CACHE PATH
" I n s t a l l a t i o n d i r e c t o r y f o r h e a d e r f i l e s " )
if ( WIN32 AND NOT CYGWIN )
set ( DEF_INSTALL_CMAKE_DIR CMake )
else ( )
2015-11-29 18:39:20 -05:00
set ( DEF_INSTALL_CMAKE_DIR ${ CMAKE_INSTALL_LIBDIR } / ${ PROJECT_PREFIX } - ${ PROJECT_VERSION_MAJOR } . ${ PROJECT_VERSION_MINOR } )
2015-05-20 14:50:25 -04:00
endif ( )
set ( INSTALL_CMAKE_DIR ${ DEF_INSTALL_CMAKE_DIR } CACHE PATH
" I n s t a l l a t i o n d i r e c t o r y f o r C M a k e f i l e s " )
2014-07-31 20:11:46 +00:00
2011-11-09 19:01:46 +00:00
2015-05-20 14:50:25 -04:00
####### OSX BUNDLE CMAKE_INSTALL_PREFIX #######
IF ( APPLE )
OPTION ( BUILD_AS_BUNDLE "Set to ON to build as bundle (DragNDrop)" OFF )
ENDIF ( APPLE )
IF ( APPLE AND BUILD_AS_BUNDLE )
# Required when packaging, and set CMAKE_INSTALL_PREFIX to "/".
SET ( CPACK_SET_DESTDIR TRUE )
SET ( CMAKE_BUNDLE_NAME
" $ { P R O J E C T _ N A M E } " )
SET ( CMAKE_BUNDLE_LOCATION "/" )
# make sure CMAKE_INSTALL_PREFIX ends in /
SET ( CMAKE_INSTALL_PREFIX
" / $ { C M A K E _ B U N D L E _ N A M E } . a p p / C o n t e n t s " )
ENDIF ( APPLE AND BUILD_AS_BUNDLE )
####### SOURCES (Projects) #######
ADD_SUBDIRECTORY ( src )
ADD_SUBDIRECTORY ( app )
ADD_SUBDIRECTORY ( tools )
IF ( NONFREE )
ADD_SUBDIRECTORY ( example )
ENDIF ( NONFREE )
#######################
# Uninstall target, for "make uninstall"
#######################
CONFIGURE_FILE (
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e "
I M M E D I A T E @ O N L Y )
ADD_CUSTOM_TARGET ( uninstall
" $ { C M A K E _ C O M M A N D } " - P " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e " )
#######################
# Setup FindObjectConfig.cmake
#######################
# Create the FindObjectConfig.cmake and FindObjectConfigVersion files
file ( RELATIVE_PATH REL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}" "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}" )
2015-11-29 18:39:20 -05:00
file ( RELATIVE_PATH REL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}" "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" )
2015-05-20 14:50:25 -04:00
# ... for the build tree
set ( CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" )
set ( CONF_LIB_DIR "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}" )
configure_file ( FindObjectConfig.cmake.in
" $ { P R O J E C T _ B I N A R Y _ D I R } / F i n d O b j e c t C o n f i g . c m a k e " @ O N L Y )
# ... for the install tree
set ( CONF_INCLUDE_DIRS "\${FindObject_CMAKE_DIR}/${REL_INCLUDE_DIR}" )
set ( CONF_LIB_DIR "\${FindObject_CMAKE_DIR}/${REL_LIB_DIR}" )
configure_file ( FindObjectConfig.cmake.in
" $ { P R O J E C T _ B I N A R Y _ D I R } $ { C M A K E _ F I L E S _ D I R E C T O R Y } / F i n d O b j e c t C o n f i g . c m a k e " @ O N L Y )
# ... for both
configure_file ( FindObjectConfigVersion.cmake.in
" $ { P R O J E C T _ B I N A R Y _ D I R } / F i n d O b j e c t C o n f i g V e r s i o n . c m a k e " @ O N L Y )
# Install the FindObjectConfig.cmake and FindObjectConfigVersion.cmake
install ( FILES
" $ { P R O J E C T _ B I N A R Y _ D I R } $ { C M A K E _ F I L E S _ D I R E C T O R Y } / F i n d O b j e c t C o n f i g . c m a k e "
" $ { P R O J E C T _ B I N A R Y _ D I R } / F i n d O b j e c t C o n f i g V e r s i o n . c m a k e "
D E S T I N A T I O N " $ { I N S T A L L _ C M A K E _ D I R } " C O M P O N E N T d e v e l )
####
#######################
# CPACK (Packaging)
#######################
INCLUDE ( InstallRequiredSystemLibraries )
SET ( CPACK_PACKAGE_NAME "${PROJECT_NAME}" )
SET ( CPACK_PACKAGE_VENDOR "${PROJECT_NAME} project" )
SET ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Find-Object" )
SET ( CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" )
SET ( CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}" )
SET ( CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}" )
SET ( CPACK_PACKAGE_CONTACT "matlabbe@gmail.com" )
set ( CPACK_SOURCE_IGNORE_FILES
" \ \ \ \ . s v n / "
" $ { P R O J E C T _ S O U R C E _ D I R } / b u i l d / [ a - z A - Z 0 - 9 _ ] + "
" ~ $ "
" $ { P R O J E C T _ S O U R C E _ D I R } / b i n / . * $ { P R O J E C T _ P R E F I X } "
" $ { P R O J E C T _ S O U R C E _ D I R } / b i n / . * $ { P R O J E C T _ N A M E } "
" \ \ \ \ . D S _ S t o r e "
)
IF ( WIN32 )
SET ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE" )
IF ( CMAKE_CL_64 )
SET ( CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64" )
ELSE ( )
SET ( CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES" )
ENDIF ( )
SET ( CPACK_GENERATOR "ZIP;NSIS" )
SET ( CPACK_SOURCE_GENERATOR "ZIP" )
SET ( CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME}" )
SET ( ICON_PATH "${PROJECT_SOURCE_DIR}/app/${PROJECT_NAME}.ico" )
SET ( CPACK_NSIS_MUI_ICON ${ ICON_PATH } )
SET ( CPACK_NSIS_MUI_UNIICON ${ ICON_PATH } )
SET ( CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME}" )
SET ( CPACK_NSIS_CONTACT ${ CPACK_PACKAGE_CONTACT } )
# Set the icon used for the Windows "Add or Remove Programs" tool.
SET ( CPACK_NSIS_INSTALLED_ICON_NAME bin\\\\ ${ PROJECT_NAME } .exe )
SET ( CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PROJECT_NAME}" ${ CPACK_PACKAGE_EXECUTABLES } )
SET ( CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}" ${ CPACK_CREATE_DESKTOP_LINKS } )
SET ( CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}" )
ELSEIF ( APPLE )
IF ( BUILD_AS_BUNDLE )
# On APPLE and if BUILD_AS_BUNDLE=ON, the project is created as a bundle
# over the main app (see ./src).Here we package only this bundle. Note
# that we set CMAKE_INSTALL_PREFIX to "/" when packaging to DragNDrop...
SET ( CPACK_GENERATOR "DragNDrop" )
ELSE ( )
SET ( CPACK_GENERATOR "PackageMaker;TBZ2" )
ENDIF ( )
SET ( CPACK_SOURCE_GENERATOR "TBZ2" )
SET ( CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/app/${PROJECT_NAME}.icns" )
ELSE ( )
SET ( CPACK_SOURCE_GENERATOR "ZIP" )
ENDIF ( )
INCLUDE ( CPack )
#######################
# OUTPUT INFO
#######################
MESSAGE ( STATUS "--------------------------------------------" )
MESSAGE ( STATUS "Info :" )
MESSAGE ( STATUS " CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}" )
MESSAGE ( STATUS " CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}" )
2015-07-10 14:27:11 -04:00
MESSAGE ( STATUS " PROJECT_VERSION = ${PROJECT_VERSION}" )
2015-06-23 16:38:47 -04:00
IF ( OpenCV_VERSION_MAJOR EQUAL 2 )
IF ( OPENCV_NONFREE_FOUND )
MESSAGE ( STATUS " With OpenCV 2 nonfree module (SIFT/SURF) = YES" )
ELSE ( )
MESSAGE ( STATUS " With OpenCV 2 nonfree module (SIFT/SURF) = NO (not found)" )
ENDIF ( )
2015-05-20 14:50:25 -04:00
ELSE ( )
2015-06-23 16:38:47 -04:00
IF ( OPENCV_XFEATURES2D_FOUND )
2019-06-17 11:43:26 -04:00
MESSAGE ( STATUS " With OpenCV ${OpenCV_VERSION_MAJOR} xfeatures2d module (SIFT/SURF/BRIEF/FREAK) = YES" )
2015-06-23 16:38:47 -04:00
ELSE ( )
2019-06-17 11:43:26 -04:00
MESSAGE ( STATUS " With OpenCV ${OpenCV_VERSION_MAJOR} xfeatures2d module (SIFT/SURF/BRIEF/FREAK) = NO (not found)" )
2015-06-23 16:38:47 -04:00
ENDIF ( )
2015-05-20 14:50:25 -04:00
ENDIF ( )
2015-06-23 16:38:47 -04:00
2015-11-29 18:39:20 -05:00
IF ( QT4_FOUND )
2016-05-06 16:54:18 -04:00
MESSAGE ( STATUS " With Qt4 = YES" )
2015-11-29 18:39:20 -05:00
ELSEIF ( Qt5_FOUND )
2016-05-06 16:54:18 -04:00
MESSAGE ( STATUS " With Qt5 = YES" )
2015-11-29 18:39:20 -05:00
ELSE ( )
2016-05-06 16:54:18 -04:00
MESSAGE ( STATUS " With Qt = NO (Qt not found)" )
2015-11-29 18:39:20 -05:00
ENDIF ( )
2018-07-30 15:27:03 -04:00
IF ( Tcmalloc_FOUND )
MESSAGE ( STATUS " With tcmalloc = YES" )
ELSE ( )
MESSAGE ( STATUS " With tcmalloc = NO (tcmalloc not found)" )
ENDIF ( Tcmalloc_FOUND )
2015-05-20 14:50:25 -04:00
IF ( APPLE )
2018-07-30 15:27:03 -04:00
MESSAGE ( STATUS " BUILD_AS_BUNDLE = ${BUILD_AS_BUNDLE}" )
2015-05-20 14:50:25 -04:00
ENDIF ( APPLE )
MESSAGE ( STATUS "--------------------------------------------" )
2011-11-09 19:01:46 +00:00
2014-10-24 02:46:03 +00:00
ELSE ( )
2015-05-20 14:50:25 -04:00
#ROS Catkin build
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package ( catkin REQUIRED COMPONENTS
2019-03-31 17:42:05 -04:00
c v _ b r i d g e r o s c p p r o s p y s e n s o r _ m s g s s t d _ m s g s i m a g e _ t r a n s p o r t m e s s a g e _ f i l t e r s t f m e s s a g e _ g e n e r a t i o n
2015-05-20 14:50:25 -04:00
)
## Generate messages in the 'msg' folder
add_message_files (
F I L E S
O b j e c t s S t a m p e d . m s g
2018-11-21 14:11:28 -05:00
D e t e c t i o n I n f o . m s g
2015-05-20 14:50:25 -04:00
)
## Generate added messages and services with any dependencies listed here
generate_messages (
D E P E N D E N C I E S
s t d _ m s g s
s e n s o r _ m s g s
)
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package (
2019-03-31 17:42:05 -04:00
C A T K I N _ D E P E N D S c v _ b r i d g e r o s c p p r o s p y s e n s o r _ m s g s s t d _ m s g s i m a g e _ t r a n s p o r t m e s s a g e _ f i l t e r s t f m e s s a g e _ r u n t i m e
2015-05-20 14:50:25 -04:00
)
###########
## Build ##
###########
ADD_SUBDIRECTORY ( src )
#############
## Install ##
#############
## Mark other files for installation (e.g. launch and bag files, etc.)
install ( FILES
l a u n c h / f i n d _ o b j e c t _ 2 d _ g u i . l a u n c h
l a u n c h / f i n d _ o b j e c t _ 2 d . l a u n c h
l a u n c h / f i n d _ o b j e c t _ 3 d . l a u n c h
D E S T I N A T I O N $ { C A T K I N _ P A C K A G E _ S H A R E _ D E S T I N A T I O N } / l a u n c h
)
2014-10-24 02:46:03 +00:00
ENDIF ( )
2015-05-20 14:50:25 -04:00