summaryrefslogtreecommitdiff
path: root/src/cython/CMakeLists.txt
blob: 23305e6324a3f1744ef32752d9722c9b1d96a83e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
cmake_minimum_required(VERSION 2.8)
project(Cython)

FIND_PROGRAM( PYTHON_PATH python )
FIND_PROGRAM( CYTHON_PATH cython )

if(PYTHON_PATH AND CYTHON_PATH)
  if(MSVC)
    message("++ MSVC")
  else()
    message("++ NOT MSVC")
    set(GUDHI_CYTHON_EXTRA_COMPILE_ARGS "${GUDHI_CYTHON_EXTRA_COMPILE_ARGS}'-std=c++11', ")
  endif()
  
  find_package(Eigen3 3.1.0)
  
  if (EIGEN3_FOUND)
    message("++ EIGEN3_FOUND")
    # No problem, even if no CGAL found
    set(GUDHI_CYTHON_EXTRA_COMPILE_ARGS "${GUDHI_CYTHON_EXTRA_COMPILE_ARGS}'-DCGAL_EIGEN3_ENABLED', ")
    set(GUDHI_CYTHON_INCLUDE_DIRS "${GUDHI_CYTHON_INCLUDE_DIRS}'${EIGEN3_INCLUDE_DIR}', ")
  endif (EIGEN3_FOUND)
  
  # Copy recursively src and test repositories before packages finding
  # Some tests files are removed in case some packages are not found
  file(COPY src DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  file(COPY test DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  
  if (CGAL_FOUND)
    if (NOT CGAL_VERSION VERSION_LESS 4.7.0)
      # If CGAL_VERSION >= 4.7.0, include alpha complex
      set(GUDHI_CYTHON_LIBRARIES "${GUDHI_CYTHON_LIBRARIES}'CGAL', ")
      set(GUDHI_CYTHON_LIBRARY_DIRS "${GUDHI_CYTHON_LIBRARY_DIRS}'${CGAL_LIBRARIES_DIR}', ")
      # GMP and GMPXX are not required, but if present, CGAL will link with them.
      if(GMP_FOUND)
        set(GUDHI_CYTHON_EXTRA_COMPILE_ARGS "${GUDHI_CYTHON_EXTRA_COMPILE_ARGS}'-DCGAL_USE_GMP', ")
        set(GUDHI_CYTHON_LIBRARIES "${GUDHI_CYTHON_LIBRARIES}'gmp', ")
        set(GUDHI_CYTHON_LIBRARY_DIRS "${GUDHI_CYTHON_LIBRARY_DIRS}'${GMP_LIBRARIES_DIR}', ")
        if(GMPXX_FOUND)
          set(GUDHI_CYTHON_EXTRA_COMPILE_ARGS "${GUDHI_CYTHON_EXTRA_COMPILE_ARGS}'-DCGAL_USE_GMPXX', ")
          set(GUDHI_CYTHON_LIBRARIES "${GUDHI_CYTHON_LIBRARIES}'gmpxx', ")
          set(GUDHI_CYTHON_LIBRARY_DIRS "${GUDHI_CYTHON_LIBRARY_DIRS}'${GMPXX_LIBRARIES_DIR}', ")
        endif(GMPXX_FOUND)
      endif(GMP_FOUND)
  
      set(GUDHI_CYTHON_ALPHA_COMPLEX "include 'src/cython/alpha_complex.pyx'")
    else (NOT CGAL_VERSION VERSION_LESS 4.7.0)
      # Remove alpha complex unitary tests
      file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test/test_alpha_complex.py)
    endif (NOT CGAL_VERSION VERSION_LESS 4.7.0)
  endif (CGAL_FOUND)
  
  # Loop on INCLUDE_DIRECTORIES PROPERTY
  get_property(GUDHI_INCLUDE_DIRECTORIES DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
  foreach(GUDHI_INCLUDE_DIRECTORY ${GUDHI_INCLUDE_DIRECTORIES})
    message(STATUS "dir='${GUDHI_INCLUDE_DIRECTORY}'")
    set(GUDHI_CYTHON_INCLUDE_DIRS "${GUDHI_CYTHON_INCLUDE_DIRS}'${GUDHI_INCLUDE_DIRECTORY}', ")
  endforeach()
  set(GUDHI_CYTHON_INCLUDE_DIRS "${GUDHI_CYTHON_INCLUDE_DIRS}'${CMAKE_SOURCE_DIR}/${GUDHI_CYTHON_PATH}/src/cpp', ")
  
  # Generate cythonize_gudhi.py file to cythonize Gudhi
  configure_file(cythonize_gudhi.py.in "${CMAKE_CURRENT_BINARY_DIR}/cythonize_gudhi.py" @ONLY)
  
  # Generate gudhi.pyx - Gudhi cython file 
  configure_file(gudhi.pyx.in "${CMAKE_CURRENT_BINARY_DIR}/gudhi.pyx" @ONLY)
  
  add_custom_command(
      OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gudhi.so"
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
      COMMAND python "${CMAKE_CURRENT_BINARY_DIR}/cythonize_gudhi.py" "build_ext" "--inplace")
  
  add_custom_target(cythonize_gudhi ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/gudhi.so")

  FIND_PROGRAM( PYTEST_PATH py.test )
  if(PYTEST_PATH)
    add_test(
        NAME gudhi_cython_py_test
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        COMMAND ${PYTEST_PATH})
  endif(PYTEST_PATH)

endif(PYTHON_PATH AND CYTHON_PATH)