CopyMSVCBins.cmake 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. # Doesn't realy make sense anywhere else
  2. if(NOT MSVC)
  3. return()
  4. endif()
  5. # Internal variable to avoid copying more than once
  6. if(COPIED_DEPENDENCIES)
  7. return()
  8. endif()
  9. option(COPY_DEPENDENCIES "Automaticaly try copying all dependencies" OFF)
  10. if(NOT COPY_DEPENDENCIES)
  11. return()
  12. endif()
  13. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  14. set(_bin_suffix 64)
  15. else()
  16. set(_bin_suffix 32)
  17. endif()
  18. find_package(Libavcodec QUIET)
  19. find_package(Libx264 QUIET)
  20. find_package(Libfdk QUIET)
  21. find_package(Qt5Core QUIET)
  22. file(GLOB FFMPEG_BIN_FILES
  23. "${FFMPEG_avutil_INCLUDE_DIR}/../bin${_bin_suffix}/avutil-*.dll"
  24. "${FFMPEG_avcodec_INCLUDE_DIR}/../bin${_bin_suffix}/avcodec-*.dll"
  25. "${FFMPEG_avformat_INCLUDE_DIR}/../bin${_bin_suffix}/avformat-*.dll"
  26. "${FFMPEG_swscale_INCLUDE_DIR}/../bin${_bin_suffix}/swscale-*.dll"
  27. "${FFMPEG_swresample_INCLUDE_DIR}/../bin${_bin_suffix}/swresample-*.dll"
  28. "${FFMPEG_avcodec_INCLUDE_DIR}/../bin${_bin_suffix}/libbz2*.dll"
  29. "${FFMPEG_avcodec_INCLUDE_DIR}/../bin${_bin_suffix}/zlib*.dll"
  30. "${FFMPEG_avutil_INCLUDE_DIR}/../bin/avutil-*.dll"
  31. "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/avcodec-*.dll"
  32. "${FFMPEG_avformat_INCLUDE_DIR}/../bin/avformat-*.dll"
  33. "${FFMPEG_swscale_INCLUDE_DIR}/../bin/swscale-*.dll"
  34. "${FFMPEG_swresample_INCLUDE_DIR}/../bin/swresample-*.dll"
  35. "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/libbz2*.dll"
  36. "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/zlib*.dll"
  37. "${FFMPEG_avcodec_INCLUDE_DIR}/bin/libbz2*.dll"
  38. "${FFMPEG_avcodec_INCLUDE_DIR}/bin/zlib*.dll"
  39. "${FFMPEG_avutil_INCLUDE_DIR}/bin${_bin_suffix}/avutil-*.dll"
  40. "${FFMPEG_avcodec_INCLUDE_DIR}/bin${_bin_suffix}/avcodec-*.dll"
  41. "${FFMPEG_avformat_INCLUDE_DIR}/bin${_bin_suffix}/avformat-*.dll"
  42. "${FFMPEG_swscale_INCLUDE_DIR}/bin${_bin_suffix}/swscale-*.dll"
  43. "${FFMPEG_swresample_INCLUDE_DIR}/bin${_bin_suffix}/swresample-*.dll"
  44. "${FFMPEG_avcodec_INCLUDE_DIR}/bin${_bin_suffix}/libbz2*.dll"
  45. "${FFMPEG_avcodec_INCLUDE_DIR}/bin${_bin_suffix}/zlib*.dll")
  46. file(GLOB X264_BIN_FILES
  47. "${X264_INCLUDE_DIR}/../bin${_bin_suffix}/libx264-*.dll"
  48. "${X264_INCLUDE_DIR}/../bin/libx264-*.dll"
  49. "${X264_INCLUDE_DIR}/bin/libx264-*.dll"
  50. "${X264_INCLUDE_DIR}/bin${_bin_suffix}/libx264-*.dll")
  51. file(GLOB LIBFDK_BIN_FILES
  52. "${Libfdk_INCLUDE_DIR}/../bin${_bin_suffix}/libfdk*-*.dll"
  53. "${Libfdk_INCLUDE_DIR}/../bin/libfdk*-*.dll"
  54. "${Libfdk_INCLUDE_DIR}/bin/libfdk*-*.dll"
  55. "${Libfdk_INCLUDE_DIR}/bin${_bin_suffix}/libfdk*-*.dll")
  56. if (CMAKE_CONFIGURATION_TYPES MATCHES "Debug")
  57. file(GLOB QT_DEBUG_BIN_FILES
  58. "${Qt5Core_DIR}/../../../bin/Qt5Cored.dll"
  59. "${Qt5Core_DIR}/../../../bin/Qt5Guid.dll"
  60. "${Qt5Core_DIR}/../../../bin/Qt5Widgetsd.dll"
  61. "${Qt5Core_DIR}/../../../bin/Qt5Networkd.dll"
  62. "${Qt5Core_DIR}/../../../bin/libGLESv2d.dll"
  63. "${Qt5Core_DIR}/../../../bin/libEGLd.dll")
  64. file(GLOB QT_DEBUG_PLAT_BIN_FILES
  65. "${Qt5Core_DIR}/../../../plugins/platforms/qwindowsd.dll")
  66. endif()
  67. if (CMAKE_CONFIGURATION_TYPES MATCHES "Rel")
  68. file(GLOB QT_BIN_FILES
  69. "${Qt5Core_DIR}/../../../bin/Qt5Core.dll"
  70. "${Qt5Core_DIR}/../../../bin/Qt5Gui.dll"
  71. "${Qt5Core_DIR}/../../../bin/Qt5Widgets.dll"
  72. "${Qt5Core_DIR}/../../../bin/Qt5Network.dll"
  73. "${Qt5Core_DIR}/../../../bin/libGLESv2.dll"
  74. "${Qt5Core_DIR}/../../../bin/libEGL.dll")
  75. file(GLOB QT_PLAT_BIN_FILES
  76. "${Qt5Core_DIR}/../../../plugins/platforms/qwindows.dll")
  77. endif()
  78. file(GLOB QT_ICU_BIN_FILES
  79. "${Qt5Core_DIR}/../../../bin/icu*.dll")
  80. if(MSVC12)
  81. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  82. set(D3D_COMPILER_PATH
  83. "$ENV{VS120COMNTOOLS}/../../VC/bin/amd64/D3DCompiler_*.dll"
  84. "$ENV{WindowsSdkDir}/bin/x64/d3dcompiler_*.dll"
  85. "C:/Program Files (x86)/Windows Kits/8.1/bin/x64/d3dcompiler_*.dll"
  86. "C:/Program Files/Windows Kits/8.1/bin/x64/d3dcompiler_*.dll")
  87. else()
  88. set(D3D_COMPILER_PATH
  89. "$ENV{VS120COMNTOOLS}/../../VC/bin/D3DCompiler_*.dll"
  90. "$ENV{WindowsSdkDir}/bin/x86/d3dcompiler_*.dll"
  91. "C:/Program Files (x86)/Windows Kits/8.1/bin/x86/d3dcompiler_*.dll"
  92. "C:/Program Files/Windows Kits/8.1/bin/x86/d3dcompiler_*.dll"
  93. "C:/Program Files/Windows Kits/8.1/bin/d3dcompiler_*.dll")
  94. endif()
  95. endif()
  96. file(TO_CMAKE_PATH "${D3D_COMPILER_PATH}" D3D_COMPILER_PATH)
  97. string(REGEX REPLACE "//" "/" D3D_COMPILER_PATH "${D3D_COMPILER_PATH}")
  98. file(GLOB D3D_COMPILER_BIN
  99. ${D3D_COMPILER_PATH})
  100. set(ALL_BASE_BIN_FILES
  101. ${FFMPEG_BIN_FILES}
  102. ${X264_BIN_FILES}
  103. ${LIBFDK_BIN_FILES}
  104. ${QT_ICU_BIN_FILES}
  105. ${D3D_COMPILER_BIN})
  106. set(ALL_REL_BIN_FILES
  107. ${QT_BIN_FILES})
  108. set(ALL_DBG_BIN_FILES
  109. ${QT_DEBUG_BIN_FILES})
  110. set(ALL_PLATFORM_BIN_FILES)
  111. set(ALL_PLATFORM_REL_BIN_FILES
  112. ${QT_PLAT_BIN_FILES})
  113. set(ALL_PLATFORM_DBG_BIN_FILES
  114. ${QT_DEBUG_PLAT_BIN_FILES})
  115. foreach(list
  116. ALL_BASE_BIN_FILES ALL_REL_BIN_FILES ALL_DBG_BIN_FILES
  117. ALL_PLATFORM_BIN_FILES ALL_PLATFORM_REL_BIN_FILES ALL_PLATFORM_DBG_BIN_FILES)
  118. if(${list})
  119. list(REMOVE_DUPLICATES ${list})
  120. endif()
  121. endforeach()
  122. message(STATUS "FFmpeg files: ${FFMPEG_BIN_FILES}")
  123. message(STATUS "x264 files: ${X264_BIN_FILES}")
  124. message(STATUS "Libfdk files: ${LIBFDK_BIN_FILES}")
  125. message(STATUS "QT Debug files: ${QT_DEBUG_BIN_FILES}")
  126. message(STATUS "QT Debug Platform files: ${QT_DEBUG_PLAT_BIN_FILES}")
  127. message(STATUS "QT Release files: ${QT_BIN_FILES}")
  128. message(STATUS "QT Release Platform files: ${QT_PLAT_BIN_FILES}")
  129. message(STATUS "QT ICU files: ${QT_ICU_BIN_FILES}")
  130. message(STATUS "D3D Compiler: ${D3D_COMPILER_BIN}")
  131. foreach(BinFile ${ALL_BASE_BIN_FILES})
  132. message(STATUS "copying ${BinFile} to ${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}")
  133. file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/")
  134. endforeach()
  135. foreach(BinFile ${ALL_REL_BIN_FILES})
  136. message(STATUS "copying ${BinFile} to ${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r")
  137. file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/")
  138. endforeach()
  139. foreach(BinFile ${ALL_DBG_BIN_FILES})
  140. message(STATUS "copying ${BinFile} to ${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d")
  141. file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/")
  142. endforeach()
  143. foreach(BinFile ${ALL_PLATFORM_BIN_FILES})
  144. make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/platforms")
  145. file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/platforms/")
  146. endforeach()
  147. foreach(BinFile ${ALL_PLATFORM_REL_BIN_FILES})
  148. make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/platforms")
  149. file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/platforms/")
  150. endforeach()
  151. foreach(BinFile ${ALL_PLATFORM_DBG_BIN_FILES})
  152. make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/platforms")
  153. file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/platforms/")
  154. endforeach()
  155. set(COPIED_DEPENDENCIES TRUE CACHE BOOL "Dependencies have been copied, set to false to copy again" FORCE)