Browse Source

CMake: Move copying of models to build-time.

Donny Lawrence 6 years ago
parent
commit
f0c9772396
2 changed files with 47 additions and 9 deletions
  1. 20 9
      CMakeLists.txt
  2. 27 0
      cmake/scripts/CopyPattern.cmake

+ 20 - 9
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()
 

+ 27 - 0
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()