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