]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | include(CMakeParseArguments) |
2 | function(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}) | |
18 | endfunction(add_npm_command) | |
19 | ||
11fdf7f2 TL |
20 | if(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 | ) | |
27 | else() | |
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 | ) | |
47 | endif() | |
48 | ||
49 | add_npm_command( | |
50 | OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/node_modules" | |
9f95a23c | 51 | COMMAND NG_CLI_ANALYTICS=false 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") | |
61 | file( | |
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 |
77 | list(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 | ||
81 | execute_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 | ||
86 | if(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() | |
98 | else(DASHBOARD_FRONTEND_LANGS) | |
99 | set(build_target ":${default_lang}") | |
100 | endif(DASHBOARD_FRONTEND_LANGS) | |
101 | ||
11fdf7f2 | 102 | if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) |
eafe8130 | 103 | set(npm_args "-- --prod --progress=false") |
11fdf7f2 | 104 | else() |
eafe8130 | 105 | set(npm_args "-- --progress=false") |
11fdf7f2 TL |
106 | endif() |
107 | ||
108 | add_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 | ) | |
116 | add_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 | 121 | add_dependencies(tests mgr-dashboard-frontend-build) |
9f95a23c TL |
122 | |
123 | if(WITH_TESTS) | |
124 | include(AddCephTest) | |
125 | add_tox_test(mgr-dashboard TOX_ENVS lint check) | |
126 | endif() |