diff options
| -rw-r--r-- | indra/cmake/DeploySharedLibs.cmake | 67 | ||||
| -rw-r--r-- | indra/cmake/LLSharedLibs.cmake | 31 | ||||
| -rw-r--r-- | indra/mac_crash_logger/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | indra/mac_updater/CMakeLists.txt | 4 | 
4 files changed, 107 insertions, 0 deletions
| diff --git a/indra/cmake/DeploySharedLibs.cmake b/indra/cmake/DeploySharedLibs.cmake new file mode 100644 index 0000000000..a7e772bd75 --- /dev/null +++ b/indra/cmake/DeploySharedLibs.cmake @@ -0,0 +1,67 @@ +# DeploySharedLibs.cmake +# This is a script to be run at build time! Its not part of the cmake configuration! +# See indra/cmake/LLSharedLibs.cmake for a macro that simplifies adding a command to a target to run this script. + +# This  script requires a few cmake variable to be set on the command line: +# BIN_NAME= The full path the the binary to search for dependecies. +# SEARCH_DIRS= The full paths to dirs to search for dependencies. +# DST_PATH= The full path where the dependecies will be copied.  +include(GetPrerequisites) +message("Getting recursive dependencies for file: ${BIN_NAME}") +set(EXCLUDE_SYSTEM 1) +set(RECURSE 1) +get_filename_component(EXE_PATH ${BIN_NAME} PATH) + +get_prerequisites( ${BIN_NAME} RESULTS ${EXCLUDE_SYSTEM} ${RECURSE} "${EXE_PATH}" "${SEARCH_DIRS}" ) + +foreach(DEP ${RESULTS}) +  Message("Processing dependency: ${DEP}") +  get_filename_component(DEP_FILE ${DEP} NAME) +  set(DEP_FILES ${DEP_FILES} ${DEP_FILE}) +endforeach(DEP) + +if(DEP_FILES) +  list(REMOVE_DUPLICATES DEP_FILES) +endif(DEP_FILES) + +foreach(DEP_FILE ${DEP_FILES}) +  if(FOUND_FILES) +	list(FIND FOUND_FILES ${DEP_FILE} FOUND) +  else(FOUND_FILES) +	set(FOUND -1) +  endif(FOUND_FILES) + +  if(FOUND EQUAL -1) +	find_path(DEP_PATH ${DEP_FILE} PATHS ${SEARCH_DIRS} NO_DEFAULT_PATH) +	if(DEP_PATH) +	  set(FOUND_FILES ${FOUND_FILES} "${DEP_PATH}/${DEP_FILE}") +	  set(DEP_PATH NOTFOUND) #reset DEP_PATH for the next find_path call. +	else(DEP_PATH) +	  set(MISSING_FILES ${MISSING_FILES} ${DEP_FILE}) +	endif(DEP_PATH) +  endif(FOUND EQUAL -1) +endforeach(DEP_FILE) + +if(MISSING_FILES) +  message("Missing:") +  foreach(FILE ${MISSING_FILES}) +	message("  ${FILE}") +  endforeach(FILE) +  message("Searched in:") +  foreach(SEARCH_DIR ${SEARCH_DIRS}) +	message("  ${SEARCH_DIR}") +  endforeach(SEARCH_DIR) +  message(FATAL_ERROR "Failed") +endif(MISSING_FILES) + +if(FOUND_FILES) +  foreach(FILE ${FOUND_FILES}) +	get_filename_component(DST_FILE ${FILE} NAME) +	set(DST_FILE "${DST_PATH}/${DST_FILE}") +	message("Copying ${FILE} to ${DST_FILE}") +	execute_process( +	  COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILE} ${DST_FILE} +	  ) +  endforeach(FILE ${FOUND_FILES}) +endif(FOUND_FILES) +message("Success!") diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake new file mode 100644 index 0000000000..3be22ab401 --- /dev/null +++ b/indra/cmake/LLSharedLibs.cmake @@ -0,0 +1,31 @@ +# ll_deploy_sharedlibs_command +# target_exe: the cmake target of the executable for which the shared libs will be deployed. +# search_dirs: a list of dirs to search for the dependencies +# dst_path: path to copy deps to, relative to the output location of the target_exe +macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path)  +	get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION) + +	if(DARWIN) +	  get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE) +	  if(IS_BUNDLE) +		get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME) +		set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS) +		set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE}) +	  endif(IS_BUNDLE) +	else(APPLE) +	  message(FATAL_ERROR "Only darwin currently supported!") +	endif(DARWIN) + +	add_custom_command( +	  TARGET ${target_exe} POST_BUILD +	  COMMAND ${CMAKE_COMMAND}  +	  ARGS +        "-DBIN_NAME=\"${OUTPUT_LOCATION}\"" +		"-DSEARCH_DIRS=\"${search_dirs}\"" +		"-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\"" +		"-P" +		"${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake" +	  ) + +endmacro(ll_deploy_sharedlibs_command) + diff --git a/indra/mac_crash_logger/CMakeLists.txt b/indra/mac_crash_logger/CMakeLists.txt index daf3e10857..1d6494fecf 100644 --- a/indra/mac_crash_logger/CMakeLists.txt +++ b/indra/mac_crash_logger/CMakeLists.txt @@ -10,6 +10,7 @@ include(LLMessage)  include(LLVFS)  include(LLXML)  include(Linking) +include(LLSharedLibs)  include_directories(      ${LLCOMMON_INCLUDE_DIRS} @@ -74,3 +75,7 @@ add_custom_command(      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib    ) +ll_deploy_sharedlibs_command( +  mac-crash-logger +  "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}"  +  "../Resources")  diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt index 0eac76fa69..d7bd6f993c 100644 --- a/indra/mac_updater/CMakeLists.txt +++ b/indra/mac_updater/CMakeLists.txt @@ -77,3 +77,7 @@ add_custom_command(      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib    ) +ll_deploy_sharedlibs_command( +  mac-updater +  "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}"  +  "../Resources")  | 
