diff --git a/cmake/CopyResources.cmake b/cmake/CopyResources.cmake index 8dbd8c900c54..db23dcec7ae5 100644 --- a/cmake/CopyResources.cmake +++ b/cmake/CopyResources.cmake @@ -11,19 +11,28 @@ ## MACRO(ADD_QGIS_RESOURCES SOURCE_PREFIX TARGET_PREFIX DEST_FILES SOURCE_FILE_PATHS) -# On build copy all resource files to build folder +# Create a list of all copy commands, source paths and destination paths +SET(ALL_COPY_COMMANDS "") +SET(ALL_SOURCE_FILES "") FOREACH(RESOURCE_FILE ${SOURCE_FILE_PATHS}) - ADD_CUSTOM_COMMAND( - OUTPUT "${CMAKE_BINARY_DIR}/output/data/${TARGET_PREFIX}/${RESOURCE_FILE}" + LIST(APPEND ALL_COPY_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_PREFIX}/${RESOURCE_FILE}" "${CMAKE_BINARY_DIR}/output/data/${TARGET_PREFIX}/${RESOURCE_FILE}" - DEPENDS "${SOURCE_PREFIX}/${RESOURCE_FILE}" ) + LIST(APPEND ALL_SOURCE_FILES "${SOURCE_PREFIX}/${RESOURCE_FILE}") LIST(APPEND ${DEST_FILES} "${CMAKE_BINARY_DIR}/output/data/${TARGET_PREFIX}/${RESOURCE_FILE}") ENDFOREACH(RESOURCE_FILE) +# Add a single custom command to install all resources to system resource folder +ADD_CUSTOM_COMMAND( + OUTPUT ${${DEST_FILES}} + ${ALL_COPY_COMMANDS} + COMMENT "Copying '${TARGET_PREFIX}' resources" + DEPENDS ${ALL_SOURCE_FILES} +) + # Install resources to system resource folder FOREACH(RESOURCE_FILE ${SOURCE_FILE_PATHS}) GET_FILENAME_COMPONENT(PATH_NAME "${TARGET_PREFIX}/${RESOURCE_FILE}" PATH) diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index f3eec6ec0d2c..fdac9c286247 100644 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -29,9 +29,10 @@ if (HAVE_OPENCL) endif() # Server, also install server subdirectory +set(SERVER_DEST_RESOURCE_FILES "") if (WITH_SERVER) file(GLOB_RECURSE SERVER_RESOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} server/*) - set(RESOURCES_FILES ${RESOURCES_FILES} ${SERVER_RESOURCE_FILES}) + add_qgis_resources("${CMAKE_CURRENT_SOURCE_DIR}" resources SERVER_DEST_RESOURCE_FILES "${SERVER_RESOURCE_FILES}") endif() # Server landingpage webapp @@ -43,6 +44,32 @@ if (WITH_SERVER_LANDINGPAGE_WEBAPP) add_custom_target (server_landingpage ALL DEPENDS ${LANDINGPAGE_OUTPUT_PATH}/landingpage.stamp) + # add_custom_command does not support OUTPUT_QUIET, so we need to make a cmake subcommand first: + file(WRITE ${CMAKE_BINARY_DIR}/yarn_commands.cmake + "execute_process( + COMMAND ${YARN} install --frozen-lockfile + WORKING_DIRECTORY ${LANDINGPAGE_OUTPUT_PATH} + OUTPUT_QUIET + ERROR_FILE ${CMAKE_BINARY_DIR}/yarn_error.log + RESULT_VARIABLE YARN_RESULT + ) + if(NOT YARN_RESULT EQUAL 0) + file(READ ${CMAKE_BINARY_DIR}/yarn_error.log ERROR_CONTENTS) + message(FATAL_ERROR \${ERROR_CONTENTS}) + endif() + + execute_process( + COMMAND ${YARN} build + WORKING_DIRECTORY ${LANDINGPAGE_OUTPUT_PATH} + OUTPUT_QUIET + ERROR_FILE ${CMAKE_BINARY_DIR}/yarn_error.log + RESULT_VARIABLE YARN_RESULT + ) + if(NOT YARN_RESULT EQUAL 0) + file(READ ${CMAKE_BINARY_DIR}/yarn_error.log ERROR_CONTENTS) + message(FATAL_ERROR \${ERROR_CONTENTS}) + endif() + ") add_custom_command( POST_BUILD OUTPUT ${LANDINGPAGE_OUTPUT_PATH}/landingpage.stamp @@ -51,7 +78,7 @@ if (WITH_SERVER_LANDINGPAGE_WEBAPP) ${CMAKE_CURRENT_SOURCE_DIR}/server/src/landingpage/ ${LANDINGPAGE_OUTPUT_PATH}/ COMMAND ${CMAKE_COMMAND} -E touch ${LANDINGPAGE_OUTPUT_PATH}/landingpage.stamp - COMMAND cd ${LANDINGPAGE_OUTPUT_PATH} && ${YARN} install --frozen-lockfile && ${YARN} build + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/yarn_commands.cmake ) endif() @@ -77,4 +104,5 @@ list(APPEND DEST_RESOURCE_FILES "${CMAKE_CURRENT_BINARY_DIR}/srs.db") install(FILES ${SRSDB} DESTINATION ${QGIS_DATA_DIR}/resources RENAME srs.db) +list(APPEND DEST_RESOURCE_FILES ${SERVER_DEST_RESOURCE_FILES}) add_custom_target(resources ALL DEPENDS ${DEST_RESOURCE_FILES})