summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt47
-rw-r--r--cmake/Modules/dlllist.cmake41
2 files changed, 42 insertions, 46 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2e5667b91..7cc929650 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -427,55 +427,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(MAKENSIS makensis)
endif()
- # next figure out the DLLs we need to include in the installer
- # since this needs to run at install time we create a new cmake
- # script that then gets executed at install time with install(CODE...)
- file(WRITE ${CMAKE_BINARY_DIR}/dlllist.cmake "
- 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
- )
- # 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/subsurface.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 ${CMAKE_SOURCE_DIR}/scripts/win-ldd.pl ${SUBSURFACE_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()
- ")
# the script we created above is now added as a command to run at
# install time - so this ensures that subsurface.exe has been
# built before this is run
- install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DSTAGING=${WINDOWSSTAGING} -P ${CMAKE_BINARY_DIR}/dlllist.cmake)")
+ install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DSTAGING=${WINDOWSSTAGING} -P cmake/Modules/dlllist.cmake)")
# create the subsurface-x.y.z.exe installer - this needs to depend
# on the install target but cmake doesn't allow that, so we depend
diff --git a/cmake/Modules/dlllist.cmake b/cmake/Modules/dlllist.cmake
new file mode 100644
index 000000000..0bf621a8a
--- /dev/null
+++ b/cmake/Modules/dlllist.cmake
@@ -0,0 +1,41 @@
+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
+)
+# 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/subsurface.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 ${CMAKE_SOURCE_DIR}/scripts/win-ldd.pl ${SUBSURFACE_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()