]> git.proxmox.com Git - ceph.git/blob - ceph/cmake/modules/Distutils.cmake
d6de8da27e8fc096a7e0f570d1ee82d7cd4eded3
[ceph.git] / ceph / cmake / modules / Distutils.cmake
1 include(CMakeParseArguments)
2
3 function(distutils_install_module name)
4 set(py_srcs setup.py README.rst requirements.txt test-requirements.txt ${name})
5 foreach(src ${py_srcs})
6 list(APPEND py_clone ${CMAKE_CURRENT_BINARY_DIR}/${src})
7 add_custom_command(
8 OUTPUT ${src}
9 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${src}
10 COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${src})
11 endforeach()
12 add_custom_target(${name}-clone ALL
13 DEPENDS ${py_clone})
14 cmake_parse_arguments(DU "" INSTALL_SCRIPT "" ${ARGN})
15 install(CODE "
16 set(options --prefix=${CMAKE_INSTALL_PREFIX})
17 if(DEFINED ENV{DESTDIR})
18 if(EXISTS /etc/debian_version)
19 list(APPEND options --install-layout=deb)
20 endif()
21 list(APPEND options --root=\$ENV{DESTDIR})
22 if(NOT \"${DU_INSTALL_SCRIPT}\" STREQUAL \"\")
23 list(APPEND options --install-script=${DU_INSTALL_SCRIPT})
24 endif()
25 endif()
26 execute_process(
27 COMMAND ${PYTHON${PYTHON_VERSION}_EXECUTABLE}
28 setup.py install \${options}
29 WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")")
30 endfunction(distutils_install_module)
31
32 function(distutils_add_cython_module name src)
33 get_property(compiler_launcher GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
34 get_property(link_launcher GLOBAL PROPERTY RULE_LAUNCH_LINK)
35 set(PY_CC \"${compiler_launcher} ${CMAKE_C_COMPILER}\")
36 set(PY_CXX \"${compiler_launcher} ${CMAKE_CXX_COMPILER}\")
37 set(PY_LDSHARED \"${link_launcher} ${CMAKE_C_COMPILER} -shared\")
38 add_custom_target(${name} ALL
39 COMMAND
40 env
41 CC=${PY_CC}
42 CXX=${PY_CXX}
43 LDSHARED=${PY_LDSHARED}
44 OPT=\"-DNDEBUG -g -fwrapv -O2 -w\"
45 LDFLAGS=-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
46 CYTHON_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
47 CEPH_LIBDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
48 CFLAGS=\"-iquote${CMAKE_SOURCE_DIR}/src/include -w\"
49 ${PYTHON${PYTHON_VERSION}_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/setup.py
50 build --verbose --build-base ${CYTHON_MODULE_DIR}
51 --build-platlib ${CYTHON_MODULE_DIR}/lib.${PYTHON${PYTHON_VERSION}_VERSION_MAJOR}
52 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
53 DEPENDS ${src})
54 endfunction(distutils_add_cython_module)
55
56 function(distutils_install_cython_module name)
57 install(CODE "
58 set(options --prefix=${CMAKE_INSTALL_PREFIX})
59 if(DEFINED ENV{DESTDIR})
60 if(EXISTS /etc/debian_version)
61 list(APPEND options --install-layout=deb)
62 endif()
63 list(APPEND options --root=\$ENV{DESTDIR})
64 else()
65 list(APPEND options --root=/)
66 endif()
67 execute_process(
68 COMMAND env
69 CYTHON_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
70 CEPH_LIBDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
71 CC=${CMAKE_C_COMPILER}
72 CPPFLAGS=\"-iquote${CMAKE_SOURCE_DIR}/src/include\"
73 LDFLAGS=\"-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}\"
74 ${PYTHON${PYTHON_VERSION}_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/setup.py
75 build --verbose --build-base ${CYTHON_MODULE_DIR}
76 --build-platlib ${CYTHON_MODULE_DIR}/lib.${PYTHON${PYTHON_VERSION}_VERSION_MAJOR}
77 build_ext --cython-c-in-temp --build-temp ${CMAKE_CURRENT_BINARY_DIR} --cython-include-dirs ${PROJECT_SOURCE_DIR}/src/pybind/rados
78 install \${options} --single-version-externally-managed --record /dev/null
79 egg_info --egg-base ${CMAKE_CURRENT_BINARY_DIR}
80 --verbose
81 WORKING_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}\"
82 RESULT_VARIABLE install_res)
83 if(NOT \"\${install_res}\" STREQUAL 0)
84 message(FATAL_ERROR \"Failed to build and install ${name} python module\")
85 endif()
86 ")
87 endfunction(distutils_install_cython_module)