Skip to content
Snippets Groups Projects
Commit 812e5f8a authored by Mattia Mancini's avatar Mattia Mancini
Browse files

OSB-29: changed cmake script to take track of each and every file

parent e2c5c7ee
No related branches found
No related tags found
2 merge requests!89Monitoring maintenance Epic branch merge,!1Resolve OSB-13 "Monitoringmaintenance "
......@@ -40,6 +40,24 @@
find_package(NPM)
function(extract_relative_path OUTPUT_FILE_LIST BASE_PATH ARGC)
set(OUTPUT "")
foreach(FILE ${ARGC})
file(RELATIVE_PATH RELPATH ${BASE_PATH} "${FILE}")
list(APPEND OUTPUT "${RELPATH}")
endforeach(FILE)
set(${OUTPUT_FILE_LIST} ${OUTPUT} PARENT_SCOPE)
endfunction(extract_relative_path)
function(append_basepath_to_file OUTPUT_FILE_LIST BASE_PATH ARGC)
set(OUTPUT "")
foreach(FILE ${ARGC})
set(ITEM "${BASE_PATH}/${FILE}")
list(APPEND OUTPUT "${ITEM}")
endforeach(FILE)
set(${OUTPUT_FILE_LIST} ${OUTPUT} PARENT_SCOPE)
endfunction(append_basepath_to_file)
#
# function npm_install
#
......@@ -70,7 +88,7 @@ function(npm_install NPM_PACKAGE_SPECIFICATION)
get_filename_component(WEBSITE_PUBLIC_DIR "${NPM_INSTALL_PUBLIC}" REALPATH)
get_filename_component(WEBSITE_SOURCE_DIR "${NPM_INSTALL_SOURCE}" REALPATH)
get_filename_component(JSON_PACKAGE_SPECIFICATION "${NPM_PACKAGE_SPECIFICATION}" REALPATH)
get_filename_component(NPM_BINARY_DIR "${NPM_BINARY_DIR}" REALPATH)
# Checks if the directories public and source are actually present in the disk
if(EXISTS WEBSITE_PUBLIC_DIR)
message(FATAL_ERROR "public directory \"${NPM_INSTALL_PUBLIC}\" cannot be found.")
......@@ -82,49 +100,76 @@ function(npm_install NPM_PACKAGE_SPECIFICATION)
get_filename_component(NPM_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH)
add_custom_target(copy_src_public_${PACKAGE_NAME} SOURCES "${NPM_BINARY_DIR}/public" "${NPM_BINARY_DIR}/src")
add_custom_target(copy_package_json_${PACKAGE_NAME} SOURCES "${NPM_BINARY_DIR}/package.json")
add_custom_target(download_npm_dependencies_${PACKAGE_NAME} SOURCES "${NPM_BINARY_DIR}/node_modules" "${NPM_BINARY_DIR}/package-lock.json" DEPENDS copy_src_public_${PACKAGE_NAME} copy_package_json_${PACKAGE_NAME})
add_custom_target(packing_javascript_files_${PACKAGE_NAME} ALL SOURCES ${NPM_BINARY_DIR}/build)
add_custom_target(start_development_server_${PACKAGE_NAME} SOURCES "${NPM_BINARY_DIR}/node_modules" "${NPM_BINARY_DIR}/package-lock.json" "${NPM_BINARY_DIR}/package.json"
COMMENT "Start start_development_server for ${PACKAGE_NAME}")
file(GLOB_RECURSE SOURCE_FILES_PATH ${WEBSITE_SOURCE_DIR} "${WEBSITE_SOURCE_DIR}/*")
file(GLOB_RECURSE PUBLIC_FILES_PATH ${WEBSITE_PUBLIC_DIR} "${WEBSITE_PUBLIC_DIR}/*")
extract_relative_path(SOURCE_FILES ${WEBSITE_SOURCE_DIR} "${SOURCE_FILES_PATH}")
extract_relative_path(PUBLIC_FILES ${WEBSITE_PUBLIC_DIR} "${PUBLIC_FILES_PATH}")
append_basepath_to_file(INSTALLED_SOURCE_FILES "${NPM_BINARY_DIR}/src" "${SOURCE_FILES}")
append_basepath_to_file(INSTALLED_PUBLIC_FILES "${NPM_BINARY_DIR}/public" "${PUBLIC_FILES}")
add_custom_command(
OUTPUT "${NPM_BINARY_DIR}/package.json"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${JSON_PACKAGE_SPECIFICATION} ${NPM_BINARY_DIR}/package.json
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${JSON_PACKAGE_SPECIFICATION}" "${NPM_BINARY_DIR}/package.json"
DEPENDS ${JSON_PACKAGE_SPECIFICATION}
COMMENT "Copying ${JSON_PACKAGE_SPECIFICATION} to ${NPM_BINARY_DIR}/package.json for ${PACKAGE_NAME}")
foreach(file ${SOURCE_FILES})
add_custom_command(OUTPUT "${NPM_BINARY_DIR}/src/${file}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${WEBSITE_SOURCE_DIR}/${file} ${NPM_BINARY_DIR}/src/${file}
DEPENDS "${WEBSITE_SOURCE_DIR}/${file}"
COMMENT "Copying file from ${WEBSITE_SOURCE_DIR}/${file} to ${NPM_BINARY_DIR}/src/${file}")
endforeach(file)
foreach(file ${PUBLIC_FILES})
add_custom_command(OUTPUT "${NPM_BINARY_DIR}/public/${file}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${WEBSITE_PUBLIC_DIR}/${file}" "${NPM_BINARY_DIR}/public/${file}"
DEPENDS "${WEBSITE_PUBLIC_DIR}/${file}"
COMMENT "Copying file from ${WEBSITE_PUBLIC_DIR}/${file} to ${NPM_BINARY_DIR}/src/${file}")
endforeach(file)
add_custom_target(copy_package_json_${PACKAGE_NAME} SOURCES "${JSON_PACKAGE_SPECIFICATION}")
add_custom_target(download_npm_dependencies_${PACKAGE_NAME} SOURCES "${NPM_BINARY_DIR}/package.json")
add_custom_target(packing_javascript_files_${PACKAGE_NAME} ALL
SOURCES "${INSTALLED_SOURCE_FILES}" "${INSTALLED_PUBLIC_FILES}" "${NPM_BINARY_DIR}/node_modules" "${NPM_BINARY_DIR}/package-lock.json")
add_custom_target(start_development_server_${PACKAGE_NAME}
SOURCES "${NPM_BINARY_DIR}/node_modules" "${NPM_BINARY_DIR}/package-lock.json" "${NPM_BINARY_DIR}/package.json"
COMMENT "Start start_development_server for ${PACKAGE_NAME}")
add_custom_command(
OUTPUT "${NPM_BINARY_DIR}/src"
COMMAND ${CMAKE_COMMAND} -E copy_directory
${WEBSITE_SOURCE_DIR} ${NPM_BINARY_DIR}/src
COMMENT "Copying javascript src directory from ${WEBSITE_SOURCE_DIR} to ${NPM_BINARY_DIR}/src for ${PACKAGE_NAME}")
COMMAND ${CMAKE_COMMAND} -E make_directory ${NPM_BINARY_DIR}/src
COMMENT "Creating javascript src directory in ${NPM_BINARY_DIR}/src for ${PACKAGE_NAME}")
add_custom_command(
OUTPUT "${NPM_BINARY_DIR}/public"
COMMAND ${CMAKE_COMMAND} -E copy_directory
${WEBSITE_PUBLIC_DIR} ${NPM_BINARY_DIR}/public
COMMENT "Copying public directory ${WEBSITE_PUBLIC_DIR} to ${NPM_BINARY_DIR}/public for ${PACKAGE_NAME}")
OUTPUT "${NPM_BINARY_DIR}/public"
COMMAND ${CMAKE_COMMAND} -E make_directory ${NPM_BINARY_DIR}/public
COMMENT "Creating public directory ${NPM_BINARY_DIR}/public for ${PACKAGE_NAME}")
add_custom_command(
OUTPUT "${NPM_BINARY_DIR}/node_modules" "${NPM_BINARY_DIR}/package-lock.json"
COMMAND npm install
DEPENDS "package.json"
WORKING_DIRECTORY ${NPM_BINARY_DIR}
DEPENDS "${NPM_BINARY_DIR}/package.json"
WORKING_DIRECTORY "${NPM_BINARY_DIR}"
COMMENT "Downloading npm dependencies for ${NPM_BINARY_DIR}/package.json")
add_custom_command(
TARGET start_development_server_${PACKAGE_NAME}
COMMAND npm start
WORKING_DIRECTORY ${NPM_BINARY_DIR}
DEPENDS ${INSTALLED_SOURCE_FILES} ${INSTALLED_PUBLIC_FILES}
WORKING_DIRECTORY "${NPM_BINARY_DIR}"
COMMENT "Starting development server for ${PACKAGE_NAME}")
add_custom_command(
OUTPUT "${NPM_BINARY_DIR}/build"
TARGET packing_javascript_files_${PACKAGE_NAME}
COMMAND npm run build
DEPENDS copy_src_public_${PACKAGE_NAME} download_npm_dependencies_${PACKAGE_NAME}
DEPENDS "${INSTALLED_SOURCE_FILES}" "${INSTALLED_PUBLIC_FILES}"
WORKING_DIRECTORY "${NPM_BINARY_DIR}"
COMMENT "Packing javascript files for ${PACKAGE_NAME} into ${NPM_BINARY_DIR}/build for deployment")
install(DIRECTORY ${NPM_BINARY_DIR}/build/ DESTINATION ${NPM_INSTALL_DESTINATION})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment