Browse Source

CMake: When zlib isn't available, run_pzip() should copy at build-time

This prevents copying to configurations that the user isn't going
to build, and also plays nice with multi-configuration generators
where the configuration isn't known until build-time.
Sam Edwards 6 years ago
parent
commit
6cb62d1d18
1 changed files with 19 additions and 16 deletions
  1. 19 16
      cmake/macros/RunPzip.cmake

+ 19 - 16
cmake/macros/RunPzip.cmake

@@ -1,13 +1,4 @@
 function(run_pzip target_name source destination glob)
-  if(NOT TARGET host_pzip)
-    # If pzip isn't built, we just copy instead.
-    file(COPY "${source}"
-      DESTINATION "${destination}"
-      FILES_MATCHING PATTERN "${glob}")
-
-    return()
-  endif()
-
   file(GLOB_RECURSE files RELATIVE "${source}" "${source}/${glob}")
 
   set(dstfiles "")
@@ -16,14 +7,26 @@ function(run_pzip target_name source destination glob)
 
     get_filename_component(dstdir "${destination}/${filename}" DIRECTORY)
 
-    set(dstfile "${filename}.pz")
-    list(APPEND dstfiles "${destination}/${dstfile}")
+    if(TARGET host_pzip)
+      set(dstfile "${filename}.pz")
+      list(APPEND dstfiles "${destination}/${dstfile}")
+
+      add_custom_command(OUTPUT "${destination}/${dstfile}"
+        COMMAND ${CMAKE_COMMAND} -E make_directory "${dstdir}"
+        COMMAND host_pzip -c > "${destination}/${dstfile}" < "${source}/${filename}"
+        DEPENDS host_pzip
+        COMMENT "")
+
+    else()
+      # If pzip isn't built, we just copy instead.
+      list(APPEND dstfiles "${destination}/${filename}")
+
+      add_custom_command(OUTPUT "${destination}/${filename}"
+        COMMAND ${CMAKE_COMMAND} -E
+          copy_if_different "${source}/${filename}" "${destination}/${filename}"
+        COMMENT "")
 
-    add_custom_command(OUTPUT "${destination}/${dstfile}"
-      COMMAND ${CMAKE_COMMAND} -E make_directory "${dstdir}"
-      COMMAND host_pzip -c > "${destination}/${dstfile}" < "${source}/${filename}"
-      DEPENDS host_pzip
-      COMMENT "")
+    endif()
 
   endforeach(filename)