2014-06-11 13:54:19 +01:00
cmake_minimum_required ( VERSION 2.8.11 )
2014-04-25 14:48:43 +01:00
project ( upm )
2015-01-29 09:29:58 +01:00
if ( "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}" )
message ( "WARNING: building into sources dir can be risky, prefer other directory" )
endif ( )
2014-04-30 18:43:32 +01:00
find_package ( SWIG )
if ( SWIG_FOUND )
include ( ${ SWIG_USE_FILE } )
endif ( )
2014-04-25 14:48:43 +01:00
2014-05-08 14:39:21 +01:00
find_package ( Threads REQUIRED )
2014-04-30 14:58:11 +01:00
find_package ( PkgConfig REQUIRED )
2015-04-23 14:07:26 -07:00
2015-05-14 08:30:24 -07:00
# force a libmraa search and minimum required version every time a config is generated
2015-04-23 14:07:26 -07:00
unset ( MRAA_FOUND CACHE )
2015-02-19 13:06:04 -08:00
pkg_check_modules ( MRAA REQUIRED mraa>=0.6.0 )
2014-06-25 10:05:27 +01:00
message ( INFO " found libmraa version: ${MRAA_VERSION}" )
2014-04-25 14:48:43 +01:00
2014-06-09 17:10:44 +01:00
# Appends the cmake/modules path to MAKE_MODULE_PATH variable.
set ( CMAKE_MODULE_PATH ${ CMAKE_CURRENT_SOURCE_DIR } /cmake/modules ${ CMAKE_MODULE_PATH } )
2014-12-01 10:21:49 -02:00
set ( LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries" )
# Set CMAKE_LIB_INSTALL_DIR if not defined
include ( GNUInstallDirs )
2014-06-09 17:10:44 +01:00
# Make a version file containing the current version from git.
include ( GetGitRevisionDescription )
git_describe ( VERSION "--tags" )
if ( "x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" )
2014-06-25 10:05:27 +01:00
message ( WARNING " - Install git to compile a production libmraa!" )
2015-04-21 12:55:36 -07:00
set ( VERSION "v0.2.0-dirty" )
2014-06-09 17:10:44 +01:00
endif ( )
message ( INFO " - UPM Version ${VERSION}" )
#parse the version information into pieces.
string ( REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}" )
string ( REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}" )
string ( REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}" )
string ( REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${VERSION}" )
string ( REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-[0-9]+\\-(.*)" "\\1" VERSION_SHA1 "${VERSION}" )
2014-06-09 19:22:52 +01:00
if ( "${VERSION_COMMIT}" MATCHES "^v.*" )
set ( VERSION_COMMIT "" )
endif ( )
2014-06-09 17:10:44 +01:00
set ( upm_VERSION_MAJOR ${ VERSION_MAJOR } )
set ( upm_VERSION_MINOR ${ VERSION_MINOR } )
set ( upm_VERSION_PATCH ${ VERSION_PATCH } )
2014-06-11 13:54:19 +01:00
set ( upm_VERSION_STRING ${ upm_VERSION_MAJOR } . ${ upm_VERSION_MINOR } . ${ upm_VERSION_PATCH } )
2014-06-09 17:10:44 +01:00
2014-04-25 14:48:43 +01:00
set ( CMAKE_SWIG_FLAGS "" )
2014-06-09 17:10:44 +01:00
option ( IPK "Generate IPK using CPack" OFF )
2014-06-11 09:13:15 +01:00
option ( BUILDDOC "Build all doc." OFF )
2014-06-11 13:54:19 +01:00
option ( BUILDSWIG "Build swig modules." ON )
option ( BUILDSWIGPYTHON "Build swig python modules." ON )
option ( BUILDSWIGNODE "Build swig node modules." ON )
2014-06-09 17:10:44 +01:00
2014-06-11 09:13:15 +01:00
if ( BUILDDOC )
# add a target to generate API documentation with Doxygen
find_package ( Doxygen )
if ( DOXYGEN_FOUND )
2015-03-19 14:50:41 -07:00
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /doxy/Doxyfile.in ${ CMAKE_CURRENT_BINARY_DIR } /Doxyfile @ONLY )
2014-06-11 09:13:15 +01:00
add_custom_target ( doc
$ { D O X Y G E N _ E X E C U T A B L E } $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / D o x y f i l e
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
C O M M E N T " G e n e r a t i n g A P I d o c u m e n t a t i o n w i t h D o x y g e n " V E R B A T I M
)
endif ( DOXYGEN_FOUND )
2015-05-14 08:30:24 -07:00
# check if sphinx is installed
find_package ( Sphinx )
if ( SPHINX_FOUND )
# python required for sphinx build
find_package ( PythonLibs )
string ( REPLACE "." ";" PYTHON_VERSION_LIST ${ PYTHONLIBS_VERSION_STRING } )
list ( GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR )
list ( GET PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR )
# check if site-packages exists, might need a more robust way on adding make install dependency and paths
if ( EXISTS ${ CMAKE_INSTALL_LIBDIR } /python ${ PYTHON_VERSION_MAJOR } . ${ PYTHON_VERSION_MINOR } /site-packages/ )
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /doxy/conf.py.in ${ CMAKE_CURRENT_BINARY_DIR } /pydoc/conf.py @ONLY )
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /doxy/index.rst ${ CMAKE_CURRENT_BINARY_DIR } /pydoc/index.rst )
add_custom_target ( pydoc
$ { S P H I N X _ A P I _ E X E C U T A B L E } - f - o p y d o c $ { C M A K E _ I N S T A L L _ L I B D I R } / p y t h o n $ { P Y T H O N _ V E R S I O N _ M A J O R } . $ { P Y T H O N _ V E R S I O N _ M I N O R } / s i t e - p a c k a g e s /
#use a separate cmake FILE module for string replacement instead
C O M M A N D s e d - i . b a k s | s i t e - p a c k a g e s | s e n s o r - d r i v e r s | g p y d o c / m o d u l e s . r s t
C O M M A N D $ { S P H I N X _ E X E C U T A B L E } - b h t m l p y d o c h t m l / p y t h o n
C O M M A N D s e d - i . b a k s | \ " > p y u p m _ | \ " > | g h t m l / p y t h o n / i n d e x . h t m l h t m l / p y t h o n / m o d u l e s . h t m l
C O M M A N D s e d - i . b a k s | \ \ s m o d u l e < / a > | < / a > | g h t m l / p y t h o n / i n d e x . h t m l h t m l / p y t h o n / m o d u l e s . h t m l
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
C O M M E N T " G e n e r a t i n g A P I d o c u m e n t a t i o n w i t h S p h i n x " V E R B A T I M
)
else ( )
message ( WARNING " - Sphinx documentation depends on python libs generated by 'install' target. Run cmake again after installation to create 'pydoc' target!" )
endif ( )
endif ( )
2014-06-11 09:13:15 +01:00
endif ( )
2014-04-30 15:47:12 +01:00
2014-06-09 17:10:44 +01:00
if ( IPK )
include ( TargetArch )
target_architecture ( DETECTED_ARCH )
message ( INFO " - Target arch is ${DETECTED_ARCH}" )
2014-09-05 15:04:16 +01:00
set ( CPACK_GENERATOR "DEB" "TGZ" )
2014-06-09 17:10:44 +01:00
set ( OPKG_ARCH ${ DETECTED_ARCH } )
set ( CPACK_BINARY_DIR ${ CMAKE_BINARY_DIR } )
set ( CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit" ) #required
2014-06-09 19:22:52 +01:00
set ( upm_PACKAGE_ON_TAG "." )
if ( "${VERSION_COMMIT}" STREQUAL "" )
set ( upm_PACKAGE_ON_TAG "" )
endif ( )
set ( CPACK_PACKAGE_VERSION
" $ { u p m _ V E R S I O N _ M A J O R } . $ { u p m _ V E R S I O N _ M I N O R } . $ { u p m _ V E R S I O N _ P A T C H } $ { u p m _ P A C K A G E _ O N _ T A G } $ { V E R S I O N _ C O M M I T } " )
2014-06-10 11:48:34 +01:00
set ( CPACK_PACKAGE_NAME "upm" )
2014-06-09 17:10:44 +01:00
set ( CPACK_DEBIAN_PACKAGE_SECTION "libs" )
set ( CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ DETECTED_ARCH } )
set ( CPACK_SYSTEM_NAME ${ DETECTED_ARCH } )
2014-06-25 10:05:27 +01:00
set ( CPACK_DEBIAN_PACKAGE_DEPENDS "libmraa0 (>= ${MRAA_VERSION})" )
2014-06-10 11:48:34 +01:00
set ( CPACK_DEBIAN_PACKAGE_PROVIDES "upm-dev, upm-dbg, upm-doc" )
2014-06-09 19:22:52 +01:00
set ( CPACK_DEBIAN_PACKAGE_REPLACES ${ CPACK_DEBIAN_PACKAGE_PROVIDES } )
set ( CPACK_DEBIAN_PACKAGE_CONFLICTS ${ CPACK_DEBIAN_PACKAGE_PROVIDES } )
2014-06-09 17:10:44 +01:00
set ( WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}" )
include ( CPack )
endif ( )
2014-04-25 14:48:43 +01:00
add_subdirectory ( src )
2015-03-02 15:34:56 -08:00
add_subdirectory ( examples/c++ )