file(GET_RUNTIME_DEPENDENCIES...) misses dependencies on Windows if paths don't start with a drive letter and contain forward slashes
When paths on Windows don't include a drive letter, GET_RUNTIME_DEPENDENCIES can miss some dependencies.
Steps to reproduce:
- Save this basic script file to disk - GetRuntimeDependencies.cmake
- Get a DLL with dependencies to query (I happen to be using boost iostreams)
- Run the script
Expected result:
- Unresolved dependencies are listed (in my case libbz2 and zlib)
Actual result:
- No unresolved dependencies are listed
Example:
cmake -D LIBRARIES=/Users/Dave/boost/bin/boost_iostreams-mt.dll -P GetRuntimeDependencies.cmake
-- Resolved runtime dependencies:
-- Unresolved runtime dependencies:
cmake -D LIBRARIES=\Users\Dave\boost\bin\boost_iostreams-mt.dll -P GetRuntimeDependencies.cmake
-- Resolved runtime dependencies:
-- Unresolved runtime dependencies: libbz2.dll;zlib.dll
cmake -D LIBRARIES=C:/Users/Dave/boost/bin/boost_iostreams-mt.dll -P GetRuntimeDependencies.cmake
-- Resolved runtime dependencies:
-- Unresolved runtime dependencies: libbz2.dll;zlib.dll
cmake -D LIBRARIES=C:\Users\Dave\boost\bin\boost_iostreams-mt.dll -P GetRuntimeDependencies.cmake
-- Resolved runtime dependencies:
-- Unresolved runtime dependencies: libbz2.dll;zlib.dll
The above was the minimum I could find to reproduce it. There are similar issues if the DIRECTORIES paths have no drive prefix and start with forward slashes.
I've had a dig through the code, though I'm not familiar with it and got a bit lost quite quickly.
I'm using dumpbin, but I don't think it's relevant.