Am 04.09.2014 15:11, schrieb Adam Strzelecki:
It makes whole executable process quicker on UNIX, especially for large bundles containing many files, since using find narrows results to only files having
executable flags then all further tests follow.
---
 Modules/BundleUtilities.cmake | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake
index 0046c97..7e2b173 100644
--- a/Modules/BundleUtilities.cmake
+++ b/Modules/BundleUtilities.cmake
@@ -378,7 +378,24 @@ endfunction()
 function(get_bundle_all_executables bundle exes_var)
   set(exes "")

-  file(GLOB_RECURSE file_list "${bundle}/*")
+  if(UNIX)
+    find_program(find_cmd "find")
+    mark_as_advanced(find_cmd)
+  endif()
+
+ # find command is much quicker than checking every file one by one on Unix + # which can take long time for large bundles, and since anyway we expect + # executable to have execute flag set we can narrow the list much quicker.
+  if(find_cmd)
+ execute_process(COMMAND "${find_cmd}" "${bundle}" -type f -perm +0111
+      OUTPUT_VARIABLE file_list
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+    string(REPLACE "\n" ";" file_list ${file_list})
+  else()
+    file(GLOB_RECURSE file_list "${bundle}/*")
+  endif()
+
   foreach(f ${file_list})
     is_file_executable("${f}" is_executable)
     if(is_executable)
--

I wonder if the "right" solution would instead be to add some additional flags to GLOB/GLOB_RECURSE where one could e.g. specify that the file is executable, or is a directory. Looking at GetPrerequisites.cmake, FindDoxygen.cmake, and CMakeDetermineCompilerId.cmake this could be a good idea for other places, too.

Eike
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers

Reply via email to