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")
|
2015-05-20 12:07:48 -07:00
|
|
|
set (NODE_PATH "/usr/local/lib/node_modules" CACHE PATH "Path to node modules")
|
2014-12-01 10:21:49 -02:00
|
|
|
|
|
|
|
# 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
|
|
|
|
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
COMMENT "Generating API documentation with Doxygen" VERBATIM
|
|
|
|
)
|
|
|
|
endif (DOXYGEN_FOUND)
|
2015-05-18 11:08:19 -07:00
|
|
|
# check if Sphinx is installed and add target to generate API documentation
|
2015-05-14 08:30:24 -07:00
|
|
|
find_package (Sphinx)
|
|
|
|
if(SPHINX_FOUND)
|
2015-05-18 11:08:19 -07:00
|
|
|
# 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)
|
|
|
|
set (SITE_PACKAGES ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
|
|
|
|
|
|
|
|
# throw a warning if site-packages doesn't exist, might need a more robust way on adding make install dependency and paths
|
|
|
|
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${SITE_PACKAGES})
|
|
|
|
message( WARNING " - Sphinx documentation 'pydoc' target depends on python libs generated by 'install' target. Run that first!")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/pydoc/conf.py @ONLY)
|
2015-05-21 11:48:55 -07:00
|
|
|
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/index.rst ${CMAKE_CURRENT_BINARY_DIR}/pydoc/index.rst COPYONLY)
|
2015-05-18 11:08:19 -07:00
|
|
|
add_custom_target (pydoc
|
|
|
|
${SPHINX_API_EXECUTABLE} -f -o pydoc ${SITE_PACKAGES}
|
|
|
|
# todo: use a separate cmake FILE module for string replacement instead
|
|
|
|
COMMAND sed -i.bak s|site-packages|sensor-drivers|g pydoc/modules.rst
|
|
|
|
COMMAND ${SPHINX_EXECUTABLE} -b html pydoc html/python
|
|
|
|
COMMAND sed -i.bak s|\">pyupm_|\">|g html/python/index.html html/python/modules.html
|
|
|
|
COMMAND sed -i.bak s|[[:space:]]module</a>|</a>|g html/python/index.html html/python/modules.html
|
|
|
|
# cleanup .pyc files
|
|
|
|
COMMAND find ${SITE_PACKAGES} -name *.pyc -exec rm {} \;
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
COMMENT "Generating API documentation with Sphinx" VERBATIM
|
|
|
|
)
|
2015-05-14 08:30:24 -07:00
|
|
|
endif()
|
2015-05-20 10:58:45 -07:00
|
|
|
# check if Yuidoc is installed and add target for API documentation
|
|
|
|
find_package(Yuidoc)
|
|
|
|
if(YUIDOC_FOUND)
|
|
|
|
# node required for Yuidoc documentation
|
2015-05-20 12:07:48 -07:00
|
|
|
find_package(Node)
|
2015-05-21 11:48:55 -07:00
|
|
|
file(GLOB_RECURSE JSDOC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/doxy/node doxy/node/*)
|
|
|
|
foreach(JSDOC_FILE ${JSDOC_FILES})
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxy/node/${JSDOC_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${JSDOC_FILE} COPYONLY)
|
|
|
|
endforeach()
|
2015-05-20 10:58:45 -07:00
|
|
|
add_custom_target(jsdoc
|
2015-05-20 12:07:48 -07:00
|
|
|
NODE_PATH=${NODE_PATH} ${NODE_EXECUTABLE} docgen -m upm -i xml
|
2015-05-20 10:58:45 -07:00
|
|
|
COMMAND ${YUIDOC_EXECUTABLE} -C --no-sort --config generators/yuidoc/conf.json -o html/node jsdoc/yuidoc/upm
|
2015-05-20 12:07:48 -07:00
|
|
|
COMMAND NODE_PATH=${NODE_PATH} ${NODE_EXECUTABLE} tolower -i html/node
|
|
|
|
DEPENDS doc
|
2015-05-20 10:58:45 -07:00
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
COMMENT "Generating API documentation with Yuidoc" VERBATIM
|
|
|
|
)
|
|
|
|
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
|
|
|
|
"${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH}${upm_PACKAGE_ON_TAG}${VERSION_COMMIT}")
|
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++)
|