Commit 2f32bd36 authored by Laurent Claustre's avatar Laurent Claustre

Merge branch '95-enhancement-of-limatools-cmake' into 'master'

Resolve "enhancement of LimaTools.cmake"

Closes #95

See merge request !135
parents b0844943 4aac84b7
Pipeline #12927 passed with stages
in 41 minutes and 58 seconds
......@@ -84,31 +84,8 @@ endif()
# Enable python binding code compilation using sip generator
if(LIMA_ENABLE_PYTHON)
find_package(PythonInterp)
find_package(PythonLibs)
if(${PYTHONINTERP_FOUND})
# python site-packages folder
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
OUTPUT_VARIABLE _PYTHON_SITE_PACKAGES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
message(FATAL_ERROR "No python found, please install or disable LIMA_ENABLE_PYTHON")
endif()
set(PYTHON_SITE_PACKAGES_DIR ${_PYTHON_SITE_PACKAGES_DIR} CACHE PATH "where should python modules be installed?")
find_package(SIP REQUIRED)
include(SIPMacros)
if(WIN32)
set(SIP_TAGS WIN32_PLATFORM)
elseif(UNIX)
set(SIP_TAGS POSIX_PLATFORM)
endif(WIN32)
set(SIP_EXTRA_OPTIONS -e -g)
find_package(NumPy REQUIRED)
endif()
limatools_find_python_and_sip()
endif()
#--------------------------------------------------------------------------------
# Define source files
......
......@@ -39,9 +39,6 @@ if(DEFINED ENV{LIMACAMERA_BASLER})
else()
set(LIMACAMERA_BASLER OFF CACHE BOOL "compile basler?")
endif()
if(LIMACAMERA_BASLER)
add_subdirectory(camera/basler)
endif(LIMACAMERA_BASLER)
#META
if(DEFINED ENV{LIMACAMERA_META})
......@@ -49,9 +46,6 @@ if(DEFINED ENV{LIMACAMERA_META})
else()
set(LIMACAMERA_META ON CACHE BOOL "compile meta?")
endif()
if(LIMACAMERA_META)
add_subdirectory(camera/common/meta)
endif(LIMACAMERA_META)
#PCO
if(DEFINED ENV{LIMACAMERA_PCO})
......@@ -345,7 +339,10 @@ if(LIMACAMERA_ROPERSCIENTIFIC)
add_subdirectory(camera/roperscientific)
endif(LIMACAMERA_ROPERSCIENTIFIC)
#META
if(LIMACAMERA_META)
add_subdirectory(camera/common/meta)
endif(LIMACAMERA_META)
#CAMERA ONLY WORKING ON LINUX
if(UNIX)
......
# -- Check for the presence of NumPy --
#
# The following variables are set when NumPy is found:
#
# NUMPY_FOUND = Set to true, if all components of NUMPY have been found.
# NUMPY_INCLUDE_DIRS = Include path for the header files of NUMPY
# NUMPY_LIBRARIES = Link these to use NUMPY
# NUMPY_LFLAGS = Linker flags (optional)
#
#-------------------------------------------------------------------------------
# Copyright (c) 2013, Lars Baehren <lbaehren@gmail.com>
# All rights reserved.
#
......@@ -29,100 +22,111 @@
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
if (NOT NUMPY_ROOT_DIR)
set (NUMPY_ROOT_DIR ${CMAKE_INSTALL_PREFIX})
endif (NOT NUMPY_ROOT_DIR)
if (NOT PYTHONINTERP_FOUND)
find_package(PythonInterp)
endif (NOT PYTHONINTERP_FOUND)
##
## Check for the header files
message(STATUS "#### NUMPY ${PYTHON_EXECUTABLE}" )
#-------------------------------------------------------------------------------
## Use Python to determine the include directory
execute_process (
COMMAND ${PYTHON_EXECUTABLE} -c import\ numpy\;\ print\(numpy.get_include\(\)\);
ERROR_VARIABLE NUMPY_FIND_ERROR
RESULT_VARIABLE NUMPY_FIND_RESULT
OUTPUT_VARIABLE NUMPY_FIND_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# - Check for the presence of NumPy
#
# The following variables are set when NumPy is found:
# NUMPY_FOUND = Set to true, if all components of NUMPY have been found.
# NUMPY_INCLUDE_DIRS = Include path for the header files of NUMPY
# NUMPY_LIBRARIES = Link these to use NUMPY
# NUMPY_LFLAGS = Linker flags (optional)
## process the output from the execution of the command
if (NOT NUMPY_FIND_RESULT)
set (NUMPY_INCLUDE_DIRS ${NUMPY_FIND_OUTPUT})
endif (NOT NUMPY_FIND_RESULT)
if (NOT NUMPY_FOUND)
##
## Check for the library
if (NOT NUMPY_ROOT_DIR)
set (NUMPY_ROOT_DIR ${CMAKE_INSTALL_PREFIX})
endif (NOT NUMPY_ROOT_DIR)
if (PYTHON_SITE_PACKAGES_DIR)
find_library (NUMPY_NPYMATH_LIBRARY npymath
HINTS ${PYTHON_SITE_PACKAGES_DIR}/numpy/core
PATH_SUFFIXES lib
)
if (NUMPY_NPYMATH_LIBRARY)
list (APPEND NUMPY_LIBRARIES ${NUMPY_NPYMATH_LIBRARY})
endif (NUMPY_NPYMATH_LIBRARY)
endif (PYTHON_SITE_PACKAGES_DIR)
if (NOT PYTHON_FOUND)
find_package (PythonInterp)
endif (NOT PYTHON_FOUND)
##
## Get API version of NumPy from 'numpy/numpyconfig.h'
##__________________________________________________________________________
## Check for the header files
if (PYTHON_EXECUTABLE)
## Use Python to determine the include directory
execute_process (
COMMAND ${PYTHON_EXECUTABLE} -c import\ numpy\;\ print\(numpy.__version__\);
ERROR_VARIABLE NUMPY_API_VERSION_ERROR
RESULT_VARIABLE NUMPY_API_VERSION_RESULT
OUTPUT_VARIABLE NUMPY_API_VERSION
COMMAND ${PYTHON_EXECUTABLE} -c import\ numpy\;\ print\(numpy.get_include\(\)\);
ERROR_VARIABLE NUMPY_FIND_ERROR
RESULT_VARIABLE NUMPY_FIND_RESULT
OUTPUT_VARIABLE NUMPY_FIND_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
else ()
## Backup procedure: extract version number directly from the header file
if (NUMPY_INCLUDE_DIRS)
find_file (HAVE_NUMPYCONFIG_H numpy/numpyconfig.h
HINTS ${NUMPY_INCLUDE_DIRS}
## process the output from the execution of the command
if (NOT NUMPY_FIND_RESULT)
set (NUMPY_INCLUDE_DIRS ${NUMPY_FIND_OUTPUT})
endif (NOT NUMPY_FIND_RESULT)
##__________________________________________________________________________
## Check for the library
unset (NUMPY_LIBRARIES)
if (PYTHON_SITE_PACKAGES_DIR)
find_library (NUMPY_NPYMATH_LIBRARY npymath
HINTS ${PYTHON_SITE_PACKAGES_DIR}/numpy/core
PATH_SUFFIXES lib
)
if (NUMPY_NPYMATH_LIBRARY)
list (APPEND NUMPY_LIBRARIES ${NUMPY_NPYMATH_LIBRARY})
endif (NUMPY_NPYMATH_LIBRARY)
endif (PYTHON_SITE_PACKAGES_DIR)
##__________________________________________________________________________
## Get API version of NumPy from 'numpy/numpyconfig.h'
if (PYTHON_EXECUTABLE)
execute_process (
COMMAND ${PYTHON_EXECUTABLE} -c import\ numpy\;\ print\(numpy.__version__\);
ERROR_VARIABLE NUMPY_API_VERSION_ERROR
RESULT_VARIABLE NUMPY_API_VERSION_RESULT
OUTPUT_VARIABLE NUMPY_API_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif (NUMPY_INCLUDE_DIRS)
endif ()
## Dissect full version number into major, minor and patch version
if (NUMPY_API_VERSION)
string (REGEX REPLACE "\\." ";" _tmp ${NUMPY_API_VERSION})
list (GET _tmp 0 NUMPY_API_VERSION_MAJOR)
list (GET _tmp 1 NUMPY_API_VERSION_MINOR)
list (GET _tmp 2 NUMPY_API_VERSION_PATCH)
endif (NUMPY_API_VERSION)
##
## Actions taken when all components have been found
find_package_handle_standard_args (NUMPY DEFAULT_MSG NUMPY_INCLUDE_DIRS)
if (NUMPY_FOUND)
if (NOT NUMPY_FIND_QUIETLY)
message (STATUS "Found components for NumPy")
message (STATUS "NUMPY_ROOT_DIR = ${NUMPY_ROOT_DIR}")
message (STATUS "NUMPY_INCLUDE_DIRS = ${NUMPY_INCLUDE_DIRS}")
message (STATUS "NUMPY_LIBRARIES = ${NUMPY_LIBRARIES}")
message (STATUS "NUMPY_API_VERSION = ${NUMPY_API_VERSION}")
endif (NOT NUMPY_FIND_QUIETLY)
else (NUMPY_FOUND)
if (NUMPY_FIND_REQUIRED)
message (FATAL_ERROR "Could not find NUMPY!")
endif (NUMPY_FIND_REQUIRED)
endif (NUMPY_FOUND)
##
## Mark advanced variables
mark_as_advanced (
NUMPY_ROOT_DIR
NUMPY_INCLUDE_DIRS
NUMPY_LIBRARIES
)
else ()
## Backup procedure: extract version number directly from the header file
if (NUMPY_INCLUDE_DIRS)
find_file (HAVE_NUMPYCONFIG_H numpy/numpyconfig.h
HINTS ${NUMPY_INCLUDE_DIRS}
)
endif (NUMPY_INCLUDE_DIRS)
endif ()
## Dissect full version number into major, minor and patch version
if (NUMPY_API_VERSION)
string (REGEX REPLACE "\\." ";" _tmp ${NUMPY_API_VERSION})
list (GET _tmp 0 NUMPY_API_VERSION_MAJOR)
list (GET _tmp 1 NUMPY_API_VERSION_MINOR)
list (GET _tmp 2 NUMPY_API_VERSION_PATCH)
endif (NUMPY_API_VERSION)
##__________________________________________________________________________
## Actions taken when all components have been found
find_package_handle_standard_args (NUMPY DEFAULT_MSG NUMPY_INCLUDE_DIRS)
if (NUMPY_FOUND)
if (NOT NUMPY_FIND_QUIETLY)
message (STATUS "Found components for NumPy")
message (STATUS "NUMPY_ROOT_DIR = ${NUMPY_ROOT_DIR}")
message (STATUS "NUMPY_INCLUDE_DIRS = ${NUMPY_INCLUDE_DIRS}")
message (STATUS "NUMPY_LIBRARIES = ${NUMPY_LIBRARIES}")
message (STATUS "NUMPY_API_VERSION = ${NUMPY_API_VERSION}")
endif (NOT NUMPY_FIND_QUIETLY)
else (NUMPY_FOUND)
if (NUMPY_FIND_REQUIRED)
message (FATAL_ERROR "Could not find NUMPY!")
endif (NUMPY_FIND_REQUIRED)
endif (NUMPY_FOUND)
##__________________________________________________________________________
## Mark advanced variables
mark_as_advanced (
NUMPY_ROOT_DIR
NUMPY_INCLUDE_DIRS
NUMPY_LIBRARIES
)
endif (NOT NUMPY_FOUND)
......@@ -115,3 +115,59 @@ function(limatools_run_sip_for_camera camera)
target_link_libraries(python_module_${MODULE_NAME} PUBLIC ${camera} limacore ${NUMPY_LIBRARIES})
endfunction()
# this macro is used to check python/sip to build python binding
macro (limatools_find_python_and_sip)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
# python site-packages folder
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
OUTPUT_VARIABLE _PYTHON_SITE_PACKAGES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(PYTHON_SITE_PACKAGES_DIR ${_PYTHON_SITE_PACKAGES_DIR} CACHE PATH "where should python modules be installed?")
# numpy required
find_package(NumPy REQUIRED)
# sip required and some options to be set
find_package(SIP REQUIRED)
include(SIPMacros)
if(WIN32)
set(SIP_TAGS WIN32_PLATFORM)
elseif(UNIX)
set(SIP_TAGS POSIX_PLATFORM)
endif(WIN32)
set(SIP_EXTRA_OPTIONS -e -g)
endmacro()
# This macro installs the camera tango plugin to the python third-party directory
# it must be called from the camera tango/ sub-directory CMakeLists.txt file
# 'files' argument is a string containing files separeted by space i.e:
# limatols_install_camera_tango("Basler.py Basler_sub.py")
macro (limatools_install_camera_tango files)
if (NOT PYTHONINTERP_FOUND)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
# python site-packages folder
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
OUTPUT_VARIABLE _PYTHON_SITE_PACKAGES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(PYTHON_SITE_PACKAGES_DIR ${_PYTHON_SITE_PACKAGES_DIR} CACHE PATH "where should python modules be installed?")
endif()
set(file_list ${files})
separate_arguments(file_list)
foreach(file ${file_list})
install (
FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file}
DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/Lima/Server/camera"
)
endforeach()
endmacro()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment