]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/CMakeLists.txt
import ceph 14.2.5
[ceph.git] / ceph / src / pybind / mgr / dashboard / CMakeLists.txt
1 set(MGR_DASHBOARD_VIRTUALENV ${CEPH_BUILD_VIRTUALENV}/mgr-dashboard-virtualenv)
2
3 add_custom_target(mgr-dashboard-test-venv
4 COMMAND
5 ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${MGR_DASHBOARD_VIRTUALENV}
6 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard
7 COMMENT "dashboard tests virtualenv is being created")
8 add_dependencies(tests mgr-dashboard-test-venv)
9
10 include(CMakeParseArguments)
11 function(add_npm_command)
12 set(options NODEENV)
13 set(single_kw OUTPUT COMMENT WORKING_DIRECTORY)
14 set(multi_kw COMMAND DEPENDS)
15 cmake_parse_arguments(NC "${options}" "${single_kw}" "${multi_kw}" ${ARGN})
16 string(REPLACE ";" " " command "${NC_COMMAND}")
17 if(NC_NODEENV)
18 string(REGEX REPLACE "^(.*(npm|npx) .*)$" ". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate" command ${command})
19 endif()
20 string(REPLACE " " ";" command "${command}")
21 add_custom_command(
22 OUTPUT "${NC_OUTPUT}"
23 COMMAND ${command}
24 DEPENDS ${NC_DEPENDS}
25 WORKING_DIRECTORY "${NC_WORKING_DIRECTORY}"
26 COMMENT ${NC_COMMENT})
27 endfunction(add_npm_command)
28
29 if(WITH_MGR_DASHBOARD_FRONTEND AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM")
30
31 if(WITH_SYSTEM_NPM)
32 set(mgr-dashboard-nodeenv-dir )
33 set(nodeenv "")
34 add_custom_target(mgr-dashboard-frontend-deps
35 DEPENDS frontend/node_modules
36 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
37 )
38 else()
39 set(mgr-dashboard-nodeenv-dir ${CMAKE_CURRENT_BINARY_DIR}/node-env)
40 set(nodeenv NODEENV)
41
42 add_custom_command(
43 OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
44 COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
45 COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
46 COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv -p --node=10.13.0
47 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
48 COMMENT "dashboard nodeenv is being installed"
49 )
50 add_custom_target(mgr-dashboard-nodeenv
51 DEPENDS ${mgr-dashboard-nodeenv-dir}/bin/npm
52 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
53 )
54 add_custom_target(mgr-dashboard-frontend-deps
55 DEPENDS frontend/node_modules mgr-dashboard-nodeenv
56 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
57 )
58 endif()
59
60 add_npm_command(
61 OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/node_modules"
62 COMMAND npm ci
63 DEPENDS frontend/package.json
64 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
65 COMMENT "dashboard frontend dependencies are being installed"
66 ${nodeenv}
67 )
68
69 # Glob some frontend files. With CMake 3.6, this can be simplified
70 # to *.ts *.html. Just add:
71 # list(FILTER frontend_src INCLUDE REGEX "frontend/src")
72 file(
73 GLOB_RECURSE frontend_src
74 frontend/src/*.ts
75 frontend/src/*.html
76 frontend/src/*/*.ts
77 frontend/src/*/*.html
78 frontend/src/*/*/*.ts
79 frontend/src/*/*/*.html
80 frontend/src/*/*/*/*.ts
81 frontend/src/*/*/*/*.html
82 frontend/src/*/*/*/*/*.ts
83 frontend/src/*/*/*/*/*.html
84 frontend/src/*/*/*/*/*/*.ts
85 frontend/src/*/*/*/*/*/*.html)
86
87 # these files are generated during build
88 list(REMOVE_ITEM frontend_src
89 ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/src/environments/environment.prod.ts
90 ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/src/environments/environment.ts)
91
92 execute_process(
93 COMMAND bash -c "jq -r .config.locale ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/package.json"
94 OUTPUT_VARIABLE default_lang
95 OUTPUT_STRIP_TRAILING_WHITESPACE)
96
97 if(DASHBOARD_FRONTEND_LANGS)
98 string(STRIP "${DASHBOARD_FRONTEND_LANGS}" DASHBOARD_FRONTEND_LANGS)
99 if(DASHBOARD_FRONTEND_LANGS STREQUAL "ALL")
100 set(build_target ":*")
101 else()
102 string(FIND "${DASHBOARD_FRONTEND_LANGS}" "${default_lang}" default_idx)
103 if (default_idx EQUAL -1)
104 # default language must be always built
105 string(CONCAT DASHBOARD_FRONTEND_LANGS "${DASHBOARD_FRONTEND_LANGS}" ",${default_lang}")
106 endif()
107 set(build_target ":\{${DASHBOARD_FRONTEND_LANGS}\}")
108 endif()
109 else(DASHBOARD_FRONTEND_LANGS)
110 set(build_target ":${default_lang}")
111 endif(DASHBOARD_FRONTEND_LANGS)
112
113 if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
114 set(npm_args "-- --prod --progress=false")
115 else()
116 set(npm_args "-- --progress=false")
117 endif()
118
119 add_npm_command(
120 OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/dist"
121 COMMAND npx npm-run-all --print-label --parallel --max-parallel 2 "\"build${build_target} -- ${npm_args}\""
122 DEPENDS ${frontend_src} frontend/node_modules
123 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
124 COMMENT "dashboard frontend is being created"
125 ${nodeenv}
126 )
127 add_custom_target(mgr-dashboard-frontend-build
128 ALL
129 DEPENDS frontend/dist mgr-dashboard-frontend-deps
130 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend)
131
132 add_dependencies(tests mgr-dashboard-frontend-build)
133 endif(WITH_MGR_DASHBOARD_FRONTEND AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM")