]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/CMakeLists.txt
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / pybind / CMakeLists.txt
CommitLineData
7c673cae
FG
1include(Distutils)
2
3set(CYTHON_MODULE_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cython_modules)
4
5# Keep the default version last
6if(WITH_PYTHON3)
11fdf7f2
TL
7 list(APPEND py_vers 3)
8endif()
9if(WITH_PYTHON2)
10 list(APPEND py_vers 2)
11endif()
12if(NOT py_vers)
13 message(FATAL_ERROR "No Python binding enabled. Please enable WITH_PYTHON2 and/or WITH_PYTHON3.")
7c673cae 14endif()
7c673cae
FG
15
16foreach(python_version ${py_vers})
17 if(${python_version} EQUAL 2)
18 set(PYTHON_VERSION "")
19 else(${python_version} EQUAL 2)
20 set(PYTHON_VERSION ${python_version})
21 endif(${python_version} EQUAL 2)
22
23 find_package(Cython REQUIRED)
24
25 add_subdirectory(rados rados${PYTHON_VERSION})
26 add_custom_target(cython${PYTHON_VERSION}_modules ALL
27 DEPENDS cython${PYTHON_VERSION}_rados)
28
29 if(WITH_RBD)
30 add_subdirectory(rbd rbd${PYTHON_VERSION})
31 add_dependencies(cython${PYTHON_VERSION}_modules cython${PYTHON_VERSION}_rbd)
32 endif()
33 if(WITH_CEPHFS)
34 add_subdirectory(cephfs cephfs${PYTHON_VERSION})
35 add_dependencies(cython${PYTHON_VERSION}_modules cython${PYTHON_VERSION}_cephfs)
36 endif()
37 if(WITH_RADOSGW)
38 add_subdirectory(rgw rgw${PYTHON_VERSION})
39 add_dependencies(cython${PYTHON_VERSION}_modules cython${PYTHON_VERSION}_rgw)
40 endif()
41
42 # if CMAKE_INSTALL_PREFIX is an empty string, must replace
43 # it with "/" to make PYTHON_INSTALL_TEMPLATE an absolute path to be
44 # consistent with all other installation paths.
45 if(CMAKE_INSTALL_PREFIX)
46 set(PYTHON_INSTALL_TEMPLATE "${CMAKE_INSTALL_PREFIX}")
47 else(CMAKE_INSTALL_PREFIX)
48 set(PYTHON_INSTALL_TEMPLATE "/")
49 endif(CMAKE_INSTALL_PREFIX)
50
51 execute_process(
52 COMMAND
53 ${PYTHON${PYTHON_VERSION}_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(prefix='${PYTHON_INSTALL_TEMPLATE}'))"
54 OUTPUT_VARIABLE "PYTHON${PYTHON_VERSION}_INSTDIR"
55 OUTPUT_STRIP_TRAILING_WHITESPACE)
56
57 install(FILES
58 ${CMAKE_CURRENT_SOURCE_DIR}/ceph_argparse.py
59 ${CMAKE_CURRENT_SOURCE_DIR}/ceph_daemon.py
60 ${CMAKE_CURRENT_SOURCE_DIR}/ceph_volume_client.py
61 DESTINATION ${PYTHON${PYTHON_VERSION}_INSTDIR})
62endforeach()
63
7c673cae 64if(WITH_MGR)
11fdf7f2
TL
65 if(NOT WITH_PYTHON2 AND MGR_PYTHON_VERSION_MAJOR EQUAL 2)
66 message(FATAL_ERROR "mgr plugins require python2 binding")
67 elseif(NOT WITH_PYTHON3 AND MGR_PYTHON_VERSION_MAJOR EQUAL 3)
68 message(FATAL_ERROR "mgr plugins require python3 binding")
69 endif()
70
71 if(USE_OPENSSL)
72 execute_process(
73 COMMAND ${PYTHON${PYTHON_VERSION}_EXECUTABLE} -c "import ssl; print('.'.join(map(str,ssl.OPENSSL_VERSION_INFO[0:3])))"
74 RESULT_VARIABLE PYSSL_RESULT
75 OUTPUT_VARIABLE PYSSL_VER
76 ERROR_QUIET)
77 if (NOT ${PYSSL_RESULT})
78 # the ideal way to get the soversion is to parse the suffix of file name of
79 # `/lib/x86_64-linux-gnu/libssl.so.1.0.0`, but since we're lazy, and will just
80 # trust the version number here.
81 macro(get_openssl_soversion version prefix)
82 string(REPLACE "." ";" ssl_version_list ${version})
83 list(GET ssl_version_list 0 ssl_version_major)
84 list(GET ssl_version_list 1 ssl_version_minor)
85 set(${prefix}_SOVERSION ${ssl_version_major}.${ssl_version_minor})
86 unset(ssl_version_list)
87 unset(ssl_version_major)
88 unset(ssl_version_minor)
89 endmacro()
90 get_openssl_soversion(${OPENSSL_VERSION} OPENSSL)
91 get_openssl_soversion(${PYSSL_VER} PYSSL)
92 if(NOT (OPENSSL_SOVERSION VERSION_EQUAL PYSSL_SOVERSION))
93 message(FATAL_ERROR "Python and Ceph link to different OpenSSL versions: ${PYSSL_VER} vs ${OPENSSL_VERSION}")
94 endif()
95 else()
96 message(WARNING "could not determine ssl version of python crypto lib")
97 endif()
98 endif(USE_OPENSSL)
99 add_subdirectory(mgr)
7c673cae 100endif(WITH_MGR)