/config/FindVIGRANUMPY_DEPENDENCIES.cmake

https://github.com/cbecker/vigra · CMake · 137 lines · 85 code · 13 blank · 39 comment · 7 complexity · 1aa2d248411a5e10a3decbba3980d9dc MD5 · raw file

  1. # - Find VIGRANUMPY_DEPENDENCIES
  2. #
  3. MESSAGE(STATUS "Checking VIGRANUMPY_DEPENDENCIES")
  4. FIND_PACKAGE(PythonInterp)
  5. IF(PYTHONINTERP_FOUND)
  6. VIGRA_FIND_PACKAGE( Boost 1.40.0 COMPONENTS python )
  7. FIND_PACKAGE(PythonLibs)
  8. IF(NOT PYTHONLIBS_FOUND)
  9. # fallback when standard search does not work
  10. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  11. "import sys; skip = 2 if sys.platform.startswith('win') else 1; print 'python' + sys.version[0:3:skip]"
  12. OUTPUT_VARIABLE PYTHON_LIBRARY_NAME OUTPUT_STRIP_TRAILING_WHITESPACE)
  13. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  14. "import sys; print sys.exec_prefix"
  15. OUTPUT_VARIABLE PYTHON_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
  16. FIND_LIBRARY(PYTHON_LIBRARIES ${PYTHON_LIBRARY_NAME} "${PYTHON_PREFIX}/libs")
  17. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  18. "from distutils.sysconfig import *; print get_python_inc()"
  19. OUTPUT_VARIABLE PYTHON_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE)
  20. SET(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE}
  21. CACHE PATH "Path to Python include files"
  22. FORCE)
  23. IF(PYTHON_LIBRARIES AND PYTHON_INCLUDE_PATH)
  24. SET(PYTHONLIBS_FOUND TRUE)
  25. ENDIF()
  26. ENDIF()
  27. ######################################################################
  28. #
  29. # find default install directory for Python modules
  30. # (usually PYTHONDIR/Lib/site-packages)
  31. #
  32. ######################################################################
  33. IF(NOT DEFINED VIGRANUMPY_INSTALL_DIR OR VIGRANUMPY_INSTALL_DIR MATCHES "^$")
  34. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  35. "from distutils.sysconfig import *; print get_python_lib(1)"
  36. OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
  37. FILE(TO_CMAKE_PATH ${PYTHON_SITE_PACKAGES} VIGRANUMPY_INSTALL_DIR)
  38. ENDIF()
  39. SET(VIGRANUMPY_INSTALL_DIR ${VIGRANUMPY_INSTALL_DIR}
  40. CACHE PATH "where to install the VIGRA Python package" FORCE)
  41. # this is the install path relative to CMAKE_INSTALL_PREFIX,
  42. # use this in INSTALL() commands to get packaging right
  43. FILE(RELATIVE_PATH VIGRANUMPY_INSTALL_DIR ${CMAKE_INSTALL_PREFIX} ${VIGRANUMPY_INSTALL_DIR})
  44. ######################################################################
  45. #
  46. # find numpy include directory
  47. # (usually below PYTHONDIR/Lib/site-packages/numpy)
  48. #
  49. ######################################################################
  50. IF(NOT PYTHON_NUMPY_INCLUDE_DIR)
  51. # Note: we must suppress possible output of the 'from numpy... import *' command,
  52. # because the output cannot be interpreted correctly otherwise
  53. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  54. "import sys, os; sys.stdout = open(os.devnull, 'w'); from numpy.distutils.misc_util import *; sys.__stdout__.write(' '.join(get_numpy_include_dirs()))"
  55. RESULT_VARIABLE PYTHON_NUMPY_NOT_FOUND
  56. OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR
  57. OUTPUT_STRIP_TRAILING_WHITESPACE)
  58. IF(NOT PYTHON_NUMPY_NOT_FOUND)
  59. FILE(TO_CMAKE_PATH ${PYTHON_NUMPY_INCLUDE_DIR} PYTHON_NUMPY_INCLUDE_DIR)
  60. ELSE()
  61. SET(PYTHON_NUMPY_INCLUDE_DIR "PYTHON_NUMPY_INCLUDE_DIR-NOTFOUND")
  62. ENDIF()
  63. ENDIF()
  64. SET(PYTHON_NUMPY_INCLUDE_DIR ${PYTHON_NUMPY_INCLUDE_DIR}
  65. CACHE PATH "Path to numpy include files" FORCE)
  66. IF(PYTHON_NUMPY_INCLUDE_DIR)
  67. MESSAGE(STATUS "Searching for Python numpy: ok")
  68. ELSE()
  69. MESSAGE(STATUS "Could NOT find Python numpy ('import numpy.distutils.misc_util' failed)")
  70. ENDIF()
  71. ######################################################################
  72. #
  73. # check if nosetests are installed
  74. #
  75. ######################################################################
  76. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  77. "import nose"
  78. RESULT_VARIABLE PYTHON_NOSETESTS_NOT_FOUND)
  79. IF(NOT PYTHON_NOSETESTS_NOT_FOUND)
  80. MESSAGE(STATUS "Searching for Python nosetests: ok")
  81. ELSE()
  82. MESSAGE(STATUS "Could NOT find Python nosetests ('import nose' failed)")
  83. ENDIF()
  84. ######################################################################
  85. #
  86. # check if sphinx documentation generator is installed
  87. #
  88. ######################################################################
  89. find_program(PYTHON_SPHINX sphinx-build "${PYTHON_PREFIX}/Scripts")
  90. IF(NOT PYTHON_SPHINX)
  91. MESSAGE(STATUS "Could NOT find sphinx documentation generator")
  92. ELSE()
  93. MESSAGE(STATUS "Searching for sphinx documentation generator: ok")
  94. ENDIF()
  95. ######################################################################
  96. #
  97. # find Python platform
  98. #
  99. ######################################################################
  100. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
  101. "import sys; p = sys.platform; print 'windows' if p.startswith('win') else p"
  102. OUTPUT_VARIABLE PYTHON_PLATFORM OUTPUT_STRIP_TRAILING_WHITESPACE)
  103. ######################################################################
  104. #
  105. # set outputs
  106. #
  107. ######################################################################
  108. INCLUDE(FindPackageHandleStandardArgs)
  109. FIND_PACKAGE_HANDLE_STANDARD_ARGS(VIGRANUMPY_DEPENDENCIES DEFAULT_MSG
  110. PYTHONINTERP_FOUND PYTHONLIBS_FOUND
  111. Boost_PYTHON_FOUND PYTHON_NUMPY_INCLUDE_DIR VIGRANUMPY_INSTALL_DIR)
  112. IF(NOT VIGRANUMPY_INCLUDE_DIRS OR VIGRANUMPY_INCLUDE_DIRS MATCHES "-NOTFOUND")
  113. SET(VIGRANUMPY_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH} ${Boost_INCLUDE_DIR} ${PYTHON_NUMPY_INCLUDE_DIR})
  114. ENDIF()
  115. SET(VIGRANUMPY_INCLUDE_DIRS ${VIGRANUMPY_INCLUDE_DIRS}
  116. CACHE PATH "include directories needed by VIGRA Python bindings"
  117. FORCE)
  118. IF(NOT VIGRANUMPY_LIBRARIES OR VIGRANUMPY_LIBRARIES MATCHES "-NOTFOUND")
  119. SET(VIGRANUMPY_LIBRARIES ${PYTHON_LIBRARIES} ${Boost_PYTHON_LIBRARIES})
  120. ENDIF()
  121. SET(VIGRANUMPY_LIBRARIES ${VIGRANUMPY_LIBRARIES}
  122. CACHE FILEPATH "libraries needed by VIGRA Python bindings"
  123. FORCE)
  124. ENDIF()