aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/dists/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/dists/cmake')
-rwxr-xr-xcmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake54
-rw-r--r--cmake/dists/cmake/Modules/FileUtils.cmake28
2 files changed, 81 insertions, 1 deletions
diff --git a/cmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake b/cmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake
new file mode 100755
index 00000000..004879da
--- /dev/null
+++ b/cmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake
@@ -0,0 +1,54 @@
+# otool: Mac OS X object file displaying tool
+find_program(OTOOL otool)
+
+function(extract_dylib_deps dylib deplist_name)
+ execute_process(
+ COMMAND ${OTOOL} -L ${dylib}
+ OUTPUT_VARIABLE otool_out
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ string(REPLACE "\n" ";" otool_out ${otool_out})
+ set(deplist "")
+ foreach(line ${otool_out})
+ if(line MATCHES version)
+ # extract dylib-name
+ string(REGEX REPLACE "^[\t ]*([^ ]+) .*" "\\1" libname "${line}")
+ # filter out system libs
+ if(NOT libname MATCHES ^/usr/lib AND
+ NOT libname MATCHES ^/System/Library)
+ list(APPEND deplist ${libname})
+ endif()
+ endif()
+ endforeach()
+ set(${deplist_name} "${deplist}" PARENT_SCOPE)
+endfunction(extract_dylib_deps)
+
+function(ANALYZE_DYLIB_DEPS module deplist_name)
+ # init queue (contains libs to analyze)
+ set(queue "")
+ # add module as first "lib" to analyze
+ list(APPEND queue ${module})
+
+ # init dep_list
+ set(deps "")
+
+ # analyze each lib enqueued until queue is empty
+ while(queue)
+ # dequeue front element
+ list(GET queue 0 current_lib)
+ list(REMOVE_AT queue 0)
+
+ # get dependencies of current dylib
+ extract_dylib_deps(${current_lib} current_deps)
+ # extract dependencies not already in the deps list
+ foreach(lib ${current_deps})
+ list(FIND deps ${lib} lib_in_deps)
+ if(lib_in_deps EQUAL -1)
+ list(APPEND queue ${lib})
+ list(APPEND deps ${lib})
+ endif()
+ endforeach()
+ endwhile()
+
+ set(${deplist_name} "${deps}" PARENT_SCOPE)
+endfunction(ANALYZE_DYLIB_DEPS)
diff --git a/cmake/dists/cmake/Modules/FileUtils.cmake b/cmake/dists/cmake/Modules/FileUtils.cmake
index 51707d5a..856bb2e1 100644
--- a/cmake/dists/cmake/Modules/FileUtils.cmake
+++ b/cmake/dists/cmake/Modules/FileUtils.cmake
@@ -17,7 +17,7 @@ endfunction(FILE_SYMLINK)
function(FILE_COPY_DIR src dst)
if(NOT EXISTS ${src})
- message(FATAL_ERROR "File \"${src}\" does not exist!")
+ message(FATAL_ERROR "Directory \"${src}\" does not exist!")
endif(NOT EXISTS ${src})
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy_directory "${src}" "${dst}"
@@ -27,3 +27,29 @@ function(FILE_COPY_DIR src dst)
message(FATAL_ERROR "Copy \"${src}\" to \"${dst}\" failed!")
endif(result)
endfunction(FILE_COPY_DIR)
+
+function(FILE_COPY src dst)
+ if(NOT EXISTS ${src})
+ message(FATAL_ERROR "File \"${src}\" does not exist!")
+ endif(NOT EXISTS ${src})
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy "${src}" "${dst}"
+ RESULT_VARIABLE result
+ )
+ if(result)
+ message(FATAL_ERROR "Copy \"${src}\" to \"${dst}\" failed!")
+ endif(result)
+endfunction(FILE_COPY)
+
+function(FILE_COPY_IF_DIFFERENT src dst)
+ if(NOT EXISTS ${src})
+ message(FATAL_ERROR "File \"${src}\" does not exist!")
+ endif(NOT EXISTS ${src})
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different "${src}" "${dst}"
+ RESULT_VARIABLE result
+ )
+ if(result)
+ message(FATAL_ERROR "Copy \"${src}\" to \"${dst}\" failed!")
+ endif(result)
+endfunction(FILE_COPY_IF_DIFFERENT)