rpcs3/buildfiles/cmake/CopyRuntimeDependencies.cmake
2025-06-15 17:12:50 +02:00

51 lines
1.9 KiB
CMake

# Copy remaining DLLS
cmake_path(GET exe PARENT_PATH exe_dir)
cmake_path(CONVERT "${MSYS2_CLANG_BIN}" TO_CMAKE_PATH_LIST msys2_clang_bin)
cmake_path(CONVERT "${MSYS2_USR_BIN}" TO_CMAKE_PATH_LIST msys2_usr_bin)
message(STATUS "Getting runtime dependencies for '${exe}' in '${exe_dir}'")
message(STATUS "Dependency dirs: '${msys2_clang_bin}', '${msys2_usr_bin}'")
file(GET_RUNTIME_DEPENDENCIES EXECUTABLES ${exe}
RESOLVED_DEPENDENCIES_VAR resolved_deps
UNRESOLVED_DEPENDENCIES_VAR unresolved_deps
DIRECTORIES ${msys2_clang_bin} ${msys2_usr_bin})
foreach(dep IN LISTS resolved_deps)
cmake_path(GET dep FILENAME dep_filename)
cmake_path(GET dep PARENT_PATH dep_dir_raw)
cmake_path(CONVERT "${dep_dir_raw}" TO_CMAKE_PATH_LIST dep_dir)
string(COMPARE EQUAL "${dep_dir}" "${msys2_clang_bin}" is_clang_path)
string(COMPARE EQUAL "${dep_dir}" "${msys2_usr_bin}" is_usr_path)
set(same_path FALSE)
if(is_clang_path OR is_usr_path)
set(same_path TRUE)
endif()
if(same_path)
set(dest "${exe_dir}/${dep_filename}")
if(NOT EXISTS "${dest}")
file(COPY "${dep}" DESTINATION "${exe_dir}")
message(STATUS "Copied '${dep_filename}' to '${exe_dir}'")
else()
message(STATUS "Already exists: '${dest}', skipping.")
endif()
else()
message(STATUS "Found and ignored '${dep}' in '${dep_dir}'. Is clang path: ${is_clang_path}, is usr path: ${is_usr_path}")
endif()
endforeach()
# Warn about unresolved dependencies
if(unresolved_deps)
message(WARNING "Unresolved dependencies:")
foreach(dep IN LISTS unresolved_deps)
cmake_path(GET dep PARENT_PATH dep_dir)
string(TOLOWER "${dep_dir}" dep_dir_lower)
if(NOT dep_dir_lower MATCHES ".*(windows[/\\]system32|windows[/\\]winsxs|program files).*")
message(STATUS " - ${dep_dir}/${dep}")
endif()
endforeach()
endif()