forked from codilime/veles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.cmake
143 lines (122 loc) · 5.23 KB
/
server.cmake
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
set(SERVER_DIR "${CMAKE_CURRENT_BINARY_DIR}/veles-server")
set(SERVER_OUTPUT_STARTUP_SCRIPT_FILE "${SERVER_DIR}/srv.py")
add_custom_target(
copy-server-files ALL
COMMAND cmake -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/python" "${CMAKE_CURRENT_BINARY_DIR}/python"
)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_STARTUP_SCRIPT_FILE}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_BINARY_DIR}/python/srv.py"
"${SERVER_OUTPUT_STARTUP_SCRIPT_FILE}"
COMMENT "Copying server script"
)
if(WIN32)
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
set(BASEPYEXE py.exe -3)
else()
set(BASEPYEXE py.exe -3.6-32)
endif()
set(SERVER_PYTHON_DIR "${SERVER_DIR}/python")
set(SERVER_DIR_DESTINATION "/")
file(TO_NATIVE_PATH ${SERVER_PYTHON_DIR} SERVER_PYTHON_DIR_NATIVE)
if(NOT EMBED_PYTHON_ARCHIVE_PATH)
set(EMBED_PYTHON_URL "https://www.python.org/ftp/python/3.6.1/python-3.6.1-embed-win32.zip")
set(EMBED_PYTHON_ARCHIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/python-3.6.1-embed-win32.zip")
set(EMBED_PYTHON_SHA256 "1b1adada30ccaf8b001d83f3008408df6bfc98beb2c5e42cd341cbe484386a50")
file(DOWNLOAD ${EMBED_PYTHON_URL} ${EMBED_PYTHON_ARCHIVE_PATH} EXPECTED_HASH SHA256=${EMBED_PYTHON_SHA256})
endif()
# assume that at least six is present in python/requirements.txt
set(SERVER_OUTPUT_REQUIRMENTS_FILE "${SERVER_PYTHON_DIR}/six.py")
set(SERVER_OUTPUT_EMBED_PYTHON_FILE "${SERVER_PYTHON_DIR}/python.exe")
set(SERVER_OUTPUT_VELES_LIB_FILE "${SERVER_PYTHON_DIR}/veles/__init__.py")
add_custom_command(
OUTPUT ${SERVER_OUTPUT_REQUIRMENTS_FILE}
COMMAND ${BASEPYEXE} -m pip install -r "${CMAKE_CURRENT_BINARY_DIR}/python/requirements.txt" -t ${SERVER_DIR}/python
COMMENT "Installing veles python lib requirements"
)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_EMBED_PYTHON_FILE}
COMMAND ${CMAKE_COMMAND} -E tar xzf ${EMBED_PYTHON_ARCHIVE_PATH}
WORKING_DIRECTORY ${SERVER_PYTHON_DIR}
COMMENT "Installing server embed python"
)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_VELES_LIB_FILE}
COMMAND ${BASEPYEXE} setup.py install --install-lib ${SERVER_PYTHON_DIR_NATIVE}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/
COMMENT "Installing veles python lib"
)
add_custom_target(
server
DEPENDS ${SERVER_OUTPUT_REQUIRMENTS_FILE}
DEPENDS ${SERVER_OUTPUT_EMBED_PYTHON_FILE}
DEPENDS ${SERVER_OUTPUT_VELES_LIB_FILE}
DEPENDS ${SERVER_OUTPUT_STARTUP_SCRIPT_FILE}
)
endif()
if(CMAKE_HOST_UNIX AND NOT CMAKE_HOST_APPLE)
set(BASEPYEXE python3)
set(SERVER_DIR_DESTINATION share)
# create venv with dependencies after installation and remove it when removing package
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
${CMAKE_CURRENT_SOURCE_DIR}/resources/install/postinst
${CMAKE_CURRENT_SOURCE_DIR}/resources/install/prerm
)
set(SERVER_OUTPUT_REQUIRMENTS_FILE ${SERVER_DIR}/requirements.txt)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_REQUIRMENTS_FILE}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_BINARY_DIR}/python/requirements.txt"
"${SERVER_DIR}/requirements.txt"
COMMENT "Copying server script"
)
set(SERVER_OUTPUT_VELES_LIB_FILE "${SERVER_PYTHON_DIR}/veles")
add_custom_command(
OUTPUT ${SERVER_OUTPUT_VELES_LIB_FILE}
COMMAND ${BASEPYEXE} setup.py sdist --dist-dir ${SERVER_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/
COMMENT "Installing veles python lib"
)
add_custom_target(server
DEPENDS ${SERVER_OUTPUT_REQUIRMENTS_FILE}
DEPENDS ${SERVER_OUTPUT_STARTUP_SCRIPT_FILE}
DEPENDS ${SERVER_OUTPUT_VELES_LIB_FILE}
)
endif()
if(CMAKE_HOST_APPLE)
set(BASEPYEXE python3)
set(SERVER_DIR_DESTINATION "veles.app/Contents/Resources/")
set(SERVER_PYTHON_VENV_DIR ${SERVER_DIR}/venv)
set(SERVER_OUTPUT_VELES_VENV_PYTHON ${SERVER_DIR}/venv/bin/python3)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_VELES_VENV_PYTHON}
COMMAND ${BASEPYEXE} -m venv ${SERVER_PYTHON_VENV_DIR}
COMMENT "Creating veles python virtual environment"
)
set(SERVER_OUTPUT_VELES_LIB_FILE ${SERVER_DIR}/veleslib)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_VELES_LIB_FILE}
COMMAND ${SERVER_OUTPUT_VELES_VENV_PYTHON} setup.py install
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/
DEPENDS ${SERVER_OUTPUT_VELES_VENV_PYTHON}
COMMENT "Installing veles python lib"
)
set(SERVER_OUTPUT_VELES_LIB_REQUIRMENTS ${SERVER_DIR}/requirements)
add_custom_command(
OUTPUT ${SERVER_OUTPUT_VELES_LIB_REQUIRMENTS}
COMMAND ${SERVER_OUTPUT_VELES_VENV_PYTHON} -m pip install -r requirements.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/
DEPENDS ${SERVER_OUTPUT_VELES_VENV_PYTHON}
COMMENT "Installing veles python lib requirements"
)
add_custom_target(
server
DEPENDS ${SERVER_OUTPUT_STARTUP_SCRIPT_FILE}
DEPENDS ${SERVER_OUTPUT_VELES_LIB_FILE}
DEPENDS ${SERVER_OUTPUT_VELES_LIB_REQUIRMENTS}
)
endif()
# Prepare server environment only in `install` target.
install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target server)")
install(DIRECTORY ${SERVER_DIR} DESTINATION ${SERVER_DIR_DESTINATION} COMPONENT "server")