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