diff options
Diffstat (limited to 'smtk-import/cmake/Modules/dlllist.cmake')
-rw-r--r-- | smtk-import/cmake/Modules/dlllist.cmake | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/smtk-import/cmake/Modules/dlllist.cmake b/smtk-import/cmake/Modules/dlllist.cmake new file mode 100644 index 000000000..6aa107f66 --- /dev/null +++ b/smtk-import/cmake/Modules/dlllist.cmake @@ -0,0 +1,42 @@ +message(STATUS "processing dlllist.cmake") + +# figure out which command to use for objdump +execute_process( + COMMAND ${CMAKE_C_COMPILER} -dumpmachine + OUTPUT_VARIABLE OBJDUMP + OUTPUT_STRIP_TRAILING_WHITESPACE +) +# figure out where we should search for libraries +execute_process( + COMMAND ${CMAKE_C_COMPILER} -print-search-dirs + COMMAND sed -nE "/^libraries: =/{s///;s,/lib/?\(:|\$\$\),/bin\\1,g;p;q;}" + OUTPUT_VARIABLE ADDPATH + OUTPUT_STRIP_TRAILING_WHITESPACE +) +message(STATUS "addpath is ${ADDPATH}") +# since cmake doesn't appear to give us a variable with +# all libraries we link against, grab the link.txt script +# instead and drop the command name from it (before the +# first space) -- this will fail if the full path for the +# linker used contains a space... +execute_process( + COMMAND tail -1 CMakeFiles/${SMTK_IMPORT_TARGET}.dir/link.txt + COMMAND cut -d\ -f 2- + OUTPUT_VARIABLE LINKER_LINE + OUTPUT_STRIP_TRAILING_WHITESPACE +) +# finally run our win-ldd.pl script against that to +# collect all the required dlls +execute_process( + COMMAND sh -c "OBJDUMP=${OBJDUMP}-objdump PATH=$ENV{PATH}:${ADDPATH} perl '../../subsurface/scripts/win-ldd.pl' ${SMTK_IMPORT_TARGET}.exe ${LINKER_LINE}" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + OUTPUT_VARIABLE DLLS + OUTPUT_STRIP_TRAILING_WHITESPACE +) +# replace newlines with semicolons so this is a cmake list +string(REPLACE "\n" ";" DLLLIST ${DLLS}) +# executing 'install' as a command seems hacky, but you +# can't use the install() cmake function in a script +foreach(DLL ${DLLLIST}) + execute_process(COMMAND install ${DLL} ${STAGING}) +endforeach() |