]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | include(Distutils) |
2 | ||
3 | set(CYTHON_MODULE_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cython_modules) | |
4 | ||
5 | # Keep the default version last | |
6 | if(WITH_PYTHON3) | |
11fdf7f2 TL |
7 | list(APPEND py_vers 3) |
8 | endif() | |
9 | if(WITH_PYTHON2) | |
10 | list(APPEND py_vers 2) | |
11 | endif() | |
12 | if(NOT py_vers) | |
13 | message(FATAL_ERROR "No Python binding enabled. Please enable WITH_PYTHON2 and/or WITH_PYTHON3.") | |
7c673cae | 14 | endif() |
7c673cae FG |
15 | |
16 | foreach(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}) | |
62 | endforeach() | |
63 | ||
7c673cae | 64 | if(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 | 100 | endif(WITH_MGR) |