diff --git a/CMakeLists.txt b/CMakeLists.txt index 5417493e6d..1ec2e26ce9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,21 +64,32 @@ if(BUILD_CONTRIB) endif() if(BUILD_MODELS) - # We don't really "build" the models, just pzip them - file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/models/maps/" - DESTINATION "${PROJECT_BINARY_DIR}/models/maps") run_pzip(models "${CMAKE_CURRENT_SOURCE_DIR}/models/" - "${PROJECT_BINARY_DIR}/models" + "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/models" *.egg) - file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/" - DESTINATION "${PROJECT_BINARY_DIR}/models" - FILES_MATCHING PATTERN *.rgb PATTERN *.png PATTERN *.jpg PATTERN *.wav) run_pzip(dmodels "${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/" - "${PROJECT_BINARY_DIR}/models" + "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/models" *.egg) - install(DIRECTORY "${PROJECT_BINARY_DIR}/models" + + add_custom_command(TARGET models + POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DSOURCE="${CMAKE_CURRENT_SOURCE_DIR}/models/maps/" + -DDESTINATION="${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/models/maps" + -P ${PROJECT_SOURCE_DIR}/cmake/scripts/CopyPattern.cmake + COMMENT "Copying models/maps") + add_custom_command(TARGET dmodels + POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DSOURCE="${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/" + -DDESTINATION="${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/models" + -DFILES_MATCHING="PATTERN;*.rgb;PATTERN;*.png;PATTERN;*.jpg;PATTERN;*.wav" + -P ${PROJECT_SOURCE_DIR}/cmake/scripts/CopyPattern.cmake + COMMENT "Copying dmodels' assets") + + install(DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/models" COMPONENT Models DESTINATION share/panda3d) endif() diff --git a/cmake/scripts/CopyPattern.cmake b/cmake/scripts/CopyPattern.cmake new file mode 100644 index 0000000000..52b66cb91c --- /dev/null +++ b/cmake/scripts/CopyPattern.cmake @@ -0,0 +1,27 @@ +# Filename: CopyPattern.cmake +# +# Description: This is a standalone version of CMake's file(COPY) command so we +# can use all of its features during build-time instead of +# config-time. +# +# Usage: +# This script is invoked via add_custom_target, like this: +# cmake -D SOURCE=[source directory] +# -D DESTINATION=[destination directory] +# -D FILES_MATCHING="[globbing patterns passed to file(COPY)]" +# -P CopyPattern.cmake +if(NOT DEFINED SOURCE OR NOT DEFINED DESTINATION) + message(SEND_ERROR "CopyPattern.cmake requires SOURCE and DESTINATION to be +defined.") +endif() + +if(DEFINED FILES_MATCHING) + separate_arguments(FILES_MATCHING UNIX_COMMAND ${FILES_MATCHING}) + + file(COPY "${SOURCE}" + DESTINATION "${DESTINATION}" + FILES_MATCHING ${FILES_MATCHING}) +else() + file(COPY "${SOURCE}" + DESTINATION "${DESTINATION}") +endif()