diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
commit | e6918187568dbd01842d8d1d2c808ce16a894239 (patch) | |
tree | 64f88b554b444a49f656b6c656111a145cbbaa28 /src/pybind/mgr/dashboard/frontend/CMakeLists.txt | |
parent | Initial commit. (diff) | |
download | ceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip |
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/CMakeLists.txt')
-rw-r--r-- | src/pybind/mgr/dashboard/frontend/CMakeLists.txt | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/CMakeLists.txt b/src/pybind/mgr/dashboard/frontend/CMakeLists.txt new file mode 100644 index 000000000..2527ef23e --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/CMakeLists.txt @@ -0,0 +1,145 @@ +include(CMakeParseArguments) +function(add_npm_command) + set(options NODEENV) + set(single_kw OUTPUT COMMENT WORKING_DIRECTORY) + set(multi_kw COMMAND DEPENDS) + cmake_parse_arguments(NC "${options}" "${single_kw}" "${multi_kw}" ${ARGN}) + string(REPLACE ";" " " command "${NC_COMMAND}") + if(NC_NODEENV) + string(REGEX REPLACE + "^(([^ ]+=[^ ]+ )*npm .*)$" + ". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate" + command ${command}) + else() + string(REGEX REPLACE + "^([^ ]=[^ ] )*npm (.*)$" + "\\1${NPM_EXECUTABLE} \\2" + command ${command}) + endif() + string(REPLACE " " ";" command "${command}") + add_custom_command( + OUTPUT "${NC_OUTPUT}" + COMMAND ${command} + DEPENDS ${NC_DEPENDS} + WORKING_DIRECTORY "${NC_WORKING_DIRECTORY}" + COMMENT ${NC_COMMENT}) + set_property(DIRECTORY APPEND + PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${NC_OUTPUT}") +endfunction(add_npm_command) + +function(add_npm_options) + set(commands) + cmake_parse_arguments(NC "" "NODEENV_DIR;TARGET" "OPTION" ${ARGN}) + foreach(opt ${NC_OPTION}) + string(REPLACE "=" ";" opt ${opt}) + list(GET opt 0 key) + list(GET opt 1 value) + list(APPEND commands + COMMAND + . ${NC_NODEENV_DIR}/bin/activate && + npm config set ${key} ${value} --userconfig ${NC_NODEENV_DIR}/.npmrc && + deactivate) + endforeach() + set(npm_config_python ${MGR_PYTHON_EXECUTABLE}) + add_custom_target(${NC_TARGET} + ${commands} + DEPENDS ${NC_NODEENV_DIR}/bin/npm + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +endfunction(add_npm_options) + +if(WITH_SYSTEM_NPM) + set(mgr-dashboard-nodeenv-dir ) + set(nodeenv "") + add_custom_target(mgr-dashboard-frontend-deps + DEPENDS node_modules + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +else(WITH_SYSTEM_NPM) + set(mgr-dashboard-nodeenv-dir ${CMAKE_CURRENT_BINARY_DIR}/node-env) + set(nodeenv NODEENV) + set(mgr-dashboard-userconfig --userconfig ${mgr-dashboard-nodeenv-dir}/.npmrc) + if(DEFINED ENV{NODE_MIRROR}) + set(node_mirror_opt "--mirror=$ENV{NODE_MIRROR}") + endif() + add_custom_command( + OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm" + COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir} + COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv + COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=18.17.0 + COMMAND mkdir ${mgr-dashboard-nodeenv-dir}/.npm + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "dashboard nodeenv is being installed") + if(DEFINED ENV{NPM_REGISTRY}) + set(npm_registry_opts "OPTION" "registry=$ENV{NPM_REGISTRY}") + endif() + add_npm_options( + NODEENV_DIR ${mgr-dashboard-nodeenv-dir} + TARGET mgr-dashboard-nodeenv + OPTION cache=${mgr-dashboard-nodeenv-dir}/.npm + ${npm_registry_opts}) + add_custom_target(mgr-dashboard-frontend-deps + DEPENDS node_modules mgr-dashboard-nodeenv + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +endif(WITH_SYSTEM_NPM) + +add_npm_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/node_modules" + COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false npm ci -f ${mgr-dashboard-userconfig} + DEPENDS package.json + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "dashboard frontend dependencies are being installed" + ${nodeenv}) + +# Glob some frontend files. +file( + GLOB_RECURSE frontend_src + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + src/*.ts + src/*.html) + +# these files are generated during build +list(REMOVE_ITEM frontend_src + src/environments/environment.prod.ts + src/environments/environment.ts) + +execute_process( + COMMAND bash -c "jq -r .config.locale ${CMAKE_CURRENT_SOURCE_DIR}/package.json" + OUTPUT_VARIABLE default_lang + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(frontend_dist_dir "${CMAKE_CURRENT_BINARY_DIR}/dist") +set(npm_args "--output-path ${frontend_dist_dir}") +if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) + string(APPEND npm_args " --configuration=production --progress=false") +else() + string(APPEND npm_args " --progress=false") +endif() + +add_npm_command( + OUTPUT "${frontend_dist_dir}" + COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" npm run build:localize -- ${npm_args} + DEPENDS ${frontend_src} node_modules + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "dashboard frontend is being created" + ${nodeenv}) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/package.json + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/package.json + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_CURRENT_SOURCE_DIR}/package.json + ${CMAKE_CURRENT_BINARY_DIR}/package.json) + +add_custom_target(mgr-dashboard-frontend-build + ALL + DEPENDS + ${frontend_dist_dir} + ${CMAKE_CURRENT_BINARY_DIR}/package.json + mgr-dashboard-frontend-deps + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + +add_dependencies(tests mgr-dashboard-frontend-build) + +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist + DESTINATION ${CEPH_INSTALL_DATADIR}/mgr/dashboard/frontend) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/package.json + DESTINATION ${CEPH_INSTALL_DATADIR}/mgr/dashboard/frontend) |