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