1cmake_minimum_required(VERSION 2.8.12) 2if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND WIN32) 3 set(D "d") 4endif() 5if(WIN32) 6 # Get Qt installation path 7 string(REGEX REPLACE "([^ ]+)[/\\].*" "\\1" QT_BIN_DIR_TMP "${QT_MOC_EXECUTABLE}") 8 string(REGEX REPLACE "\\\\" "/" QT_BIN_DIR "${QT_BIN_DIR_TMP}") 9 unset(QT_BIN_DIR_TMP) 10 function(find_psi_lib LIBLIST PATHES OUTPUT_PATH) 11 set(_LIBS ${LIBLIST}) 12 set(_PATHES ${PATHES}) 13 set(_OUTPUT_PATH ${OUTPUT_PATH}) 14 set(FIXED_PATHES "") 15 foreach(_path ${_PATHES}) 16 string(REGEX REPLACE "//bin" "/bin" tmp_path "${_path}") 17 list(APPEND FIXED_PATHES ${tmp_path}) 18 endforeach() 19 if(NOT USE_MXE) 20 set(ADDITTIONAL_FLAG "NO_DEFAULT_PATH") 21 else() 22 set(ADDITTIONAL_FLAG "") 23 endif() 24 foreach(_liba ${_LIBS}) 25 set(_library _library-NOTFOUND) 26 find_file( _library ${_liba} PATHS ${FIXED_PATHES} ${ADDITTIONAL_FLAG}) 27 if( NOT "${_library}" STREQUAL "_library-NOTFOUND" ) 28 message("library found ${_library}") 29 copy("${_library}" "${_OUTPUT_PATH}" prepare-bin-libs) 30 endif() 31 endforeach() 32 set(_LIBS "") 33 set(_PATHES "") 34 set(_OUTPUT_PATH "") 35 endfunction() 36 set(SDK_PREFIX "") 37 set(QCA_LIB_SUFF "-qt5") 38 get_filename_component(QT_DIR ${QT_BIN_DIR} DIRECTORY) 39 set(QT_PLUGINS_DIR ${QT_DIR}/plugins) 40 set(QT_TRANSLATIONS_DIR ${QT_DIR}/translations) 41 find_program(WINDEPLOYQTBIN windeployqt ${QT_BIN_DIR}) 42 if(NOT "${WINDEPLOYQTBIN}" STREQUAL "WINDEPLOYQTBIN-NOTFOUND") 43 message(STATUS "WinDeployQt utility - FOUND") 44 if(CMAKE_BUILD_TYPE STREQUAL "Debug") 45 list(APPEND WDARGS --debug) 46 elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") 47 list(APPEND WDARGS --release-with-debug-info) 48 elseif(CMAKE_BUILD_TYPE STREQUAL "Release") 49 list(APPEND WDARGS --release) 50 endif() 51 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 52 COMMAND ${WINDEPLOYQTBIN} 53 ARGS 54 ${WDARGS} 55 $<TARGET_FILE:${PROJECT_NAME}> 56 WORKING_DIRECTORY 57 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} 58 COMMENT 59 "Preparing Qt runtime dependencies" 60 ) 61 else() 62 63 # required libraries 64 set( ICU_LIBS_PREFIXES 65 icudt5 66 icuin5 67 icuuc5 68 ) 69 set( ICU_LIBS "" ) 70 foreach( icu_prefix ${ICU_LIBS_PREFIXES} ) 71 foreach( icu_counter RANGE 9 ) 72 find_file( ${icu_prefix}${icu_counter} "${icu_prefix}${icu_counter}.dll" ) 73 if( NOT "${${icu_prefix}${icu_counter}}" STREQUAL "${icu_prefix}${icu_counter}-NOTFOUND" ) 74 list(APPEND ICU_LIBS 75 "${icu_prefix}${icu_counter}.dll" 76 ) 77 endif() 78 endforeach() 79 endforeach() 80 find_psi_lib("${ICU_LIBS}" "${QT_BIN_DIR}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/") 81 # Qt5 libraries 82 set(QT_LIBAS 83 Qt5Core${D}.dll 84 Qt5Gui${D}.dll 85 Qt5Widgets${D}.dll 86 Qt5Svg${D}.dll 87 Qt5Network${D}.dll 88 Qt5Svg${D}.dll 89 Qt5Script${D}.dll 90 Qt5Xml${D}.dll 91 Qt5XmlPatterns${D}.dll 92 Qt5Sql${D}.dll 93 Qt5WebKit${D}.dll 94 Qt5WebKitWidgets${D}.dll 95 Qt5Qml${D}.dll 96 Qt5Quick${D}.dll 97 Qt5Positioning${D}.dll 98 Qt5WebChannel${D}.dll 99 Qt5Multimedia${D}.dll 100 Qt5MultimediaWidgets${D}.dll 101 Qt5Concurrent${D}.dll 102 Qt5Sensors${D}.dll 103 Qt5OpenGL${D}.dll 104 Qt5PrintSupport${D}.dll 105 ) 106 find_psi_lib("${QT_LIBAS}" "${QT_BIN_DIR}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/") 107 find_psi_lib(qtaudio_windows${D}.dll ${QT_PLUGINS_DIR}/audio/ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/audio/) 108 set(PLATFORM_PLUGS 109 qminimal${D}.dll 110 qoffscreen${D}.dll 111 qwindows${D}.dll 112 ) 113 find_psi_lib("${PLATFORM_PLUGS}" "${QT_PLUGINS_DIR}/platforms/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/platforms/") 114 set(STYLE_PLUGS 115 qwindowsvistastyle${D}.dll 116 ) 117 find_psi_lib("${STYLE_PLUGS}" "${QT_PLUGINS_DIR}/styles/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/styles/") 118 set(BEARER_PLUGS 119 qgenericbearer${D}.dll 120 qnativewifibearer${D}.dll 121 ) 122 find_psi_lib("${BEARER_PLUGS}" "${QT_PLUGINS_DIR}/bearer/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bearer/") 123 set(IMAGE_PLUGS 124 qdds${D}.dll 125 qgif${D}.dll 126 qicns${D}.dll 127 qico${D}.dll 128 qjp2${D}.dll 129 qjpeg${D}.dll 130 qmng${D}.dll 131 qsvg${D}.dll 132 qtga${D}.dll 133 qtiff${D}.dll 134 qwbmp${D}.dll 135 qwebp${D}.dll 136 ) 137 find_psi_lib("${IMAGE_PLUGS}" "${QT_PLUGINS_DIR}/imageformats/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/imageformats/") 138 find_psi_lib("windowsprintersupport${D}.dll" "${QT_PLUGINS_DIR}/printsupport/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/printsupport/") 139 find_psi_lib("qsqlite${D}.dll" "${QT_PLUGINS_DIR}/sqldrivers/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sqldrivers/") 140 # Qt translations 141 file(GLOB QT_TRANSLATIONS "${QT_TRANSLATIONS_DIR}/qt_*.qm") 142 foreach(FILE ${QT_TRANSLATIONS}) 143 if(NOT FILE MATCHES "_help_") 144 copy(${FILE} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations/" prepare-bin-libs) 145 endif() 146 endforeach() 147 file(GLOB QT_TRANSLATIONS "${QT_TRANSLATIONS_DIR}/qtbase_*.qm") 148 foreach(FILE ${QT_TRANSLATIONS}) 149 copy(${FILE} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations/" prepare-bin-libs) 150 endforeach() 151 endif() 152 # psimedia 153 if(EXISTS "${PSIMEDIA_DIR}") 154 find_program(PSIMEDIA_PATH libgstprovider${D}.dll PATHS ${PSIMEDIA_DIR}/plugins ) 155 copy(${PSIMEDIA_DIR} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" prepare-bin-libs) 156 endif() 157 # psimedia deps 158 find_program(PSIMEDIA_DEPS_PATH libgstvideo-0.10-0.dll PATHS ${GST_SDK}/bin ) 159 get_filename_component(PSIMEDIA_DEPS_DIR ${PSIMEDIA_DEPS_PATH} DIRECTORY) 160 set(PSIMEDIA_DEPS 161 libjpeg-9.dll 162 libgettextlib-0-19-6.dll 163 libogg-0.dll 164 libtheoradec-1.dll 165 libgettextpo-0.dll 166 liborc-0.4-0.dll 167 libtheoraenc-1.dll 168 libasprintf-0.dll 169 libgettextsrc-0-19-6.dll 170 liborc-test-0.4-0.dll 171 libvorbis-0.dll 172 libcharset-1.dll 173 libgio-2.0-0.dll 174 libspeex-1.dll 175 libvorbisenc-2.dll 176 libglib-2.0-0.dll 177 libgthread-2.0-0.dll 178 libspeexdsp-1.dll 179 libvorbisfile-3.dll 180 libffi-6.dll 181 libgmodule-2.0-0.dll 182 libgobject-2.0-0.dll 183 libintl-8.dll 184 libtheora-0.dll 185 libgstapp-0.10-0.dll 186 libgstaudio-0.10-0.dll 187 libgstbase-0.10-0.dll 188 libgstcdda-0.10-0.dll 189 libgstcontroller-0.10-0.dll 190 libgstdataprotocol-0.10-0.dll 191 libgstfft-0.10-0.dll 192 libgstinterfaces-0.10-0.dll 193 libgstnet-0.10-0.dll 194 libgstnetbuffer-0.10-0.dll 195 libgstpbutils-0.10-0.dll 196 libgstreamer-0.10-0.dll 197 libgstriff-0.10-0.dll 198 libgstrtp-0.10-0.dll 199 libgstrtsp-0.10-0.dll 200 libgstsdp-0.10-0.dll 201 libgsttag-0.10-0.dll 202 libgstvideo-0.10-0.dll 203 ) 204 find_psi_lib("${PSIMEDIA_DEPS}" "${PSIMEDIA_DEPS_DIR}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/") 205 # streamer plugins 206 set(GSTREAMER_PLUGINS_DIR "${PSIMEDIA_DIR}/gstreamer-0.10") 207 file(GLOB GSTREAMER_PLUGINS "${GSTREAMER_PLUGINS_DIR}/*.dll") 208 find_psi_lib("${GSTREAMER_PLUGINS}" "${GSTREAMER_PLUGINS_DIR}/" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gstreamer-0.10/") 209 # other libs and executables 210 set( LIBRARIES_LIST 211 libgcc_s_sjlj-1.dll 212 libgcc_s_dw2-1.dll 213 libgcc_s_seh-1.dll 214 libstdc++-6.dll 215 libwinpthread-1.dll 216 gpg.exe 217 libgcrypt-11.dll 218 libgcrypt-20.dll 219 libotr.dll 220 libotr-5.dll 221 libtidy.dll 222 libzlib.dll 223 zlib1.dll 224 libgpg-error-0.dll 225 libidn-11.dll 226 libhunspell.dll 227 libhunspell-1.3-0.dll 228 libhunspell-1.4-0.dll 229 libhunspell-1.5-0.dll 230 libhunspell-1.6-0.dll 231 libeay32.dll 232 ssleay32.dll 233 ) 234 set(QCA_PATHES 235 "${QT_BIN_DIR}" 236 "${QCA_DIR}bin" 237 "${QT_PLUGINS_DIR}/crypto" 238 "${QCA_DIR}lib/qca${QCA_LIB_SUFF}/crypto" 239 ) 240 find_psi_lib("libqca${QCA_LIB_SUFF}${D}.dll" "${QCA_PATHES}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/") 241 if(MSVC) 242 list(APPEND LIBRARIES_LIST 243 otr${D}.dll 244 tidy${D}.dll 245 zlib${D}.dll 246 idn${D}.dll 247 ) 248 find_psi_lib("qca${QCA_LIB_SUFF}${D}.dll" "${QCA_PATHES}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/") 249 endif() 250 if(USE_MXE) 251 list(APPEND LIBRARIES_LIST 252 libgpg-error6-0.dll 253 libbz2.dll 254 libfreetype-6.dll 255 libglib-2.0-0.dll 256 libharfbuzz-0.dll 257 libharfbuzz-icu-0.dll 258 libiconv-2.dll 259 libintl-8.dll 260 libjasper-1.dll 261 libjpeg-9.dll 262 liblcms2-2.dll 263 liblzma-5.dll 264 liblzo2-2.dll 265 libmng-2.dll 266 libpcre16-0.dll 267 libpcre2-16-0.dll 268 libpcre-1.dll 269 libpng16-16.dll 270 libssp-0.dll 271 libsqlite3-0.dll 272 libtiff-5.dll 273 libwebp-5.dll 274 libwebpdecoder-1.dll 275 libwebpdemux-1.dll 276 libxml2-2.dll 277 ) 278 endif() 279 if(SEPARATE_QJDNS) 280 list(APPEND LIBRARIES_LIST 281 libqjdns.dll 282 libjdns.dll 283 ) 284 endif() 285 if(EXISTS "${SDK_PATH}") 286 set(PATHES 287 "${IDN_ROOT}bin" 288 "${HUNSPELL_ROOT}bin" 289 "${LIBGCRYPT_ROOT}bin" 290 "${LIBGPGERROR_ROOT}bin" 291 "${LIBOTR_ROOT}bin" 292 "${LIBTIDY_ROOT}bin" 293 "${QJSON_ROOT}bin" 294 "${ZLIB_ROOT}bin" 295 ) 296 if(MSVC) 297 list(APPEND PATHES "${SDK_PATH}/bin") 298 else() 299 list(APPEND PATHES "${SDK_PATH}/openssl/bin") 300 endif() 301 if(SEPARATE_QJDNS) 302 list(APPEND PATHES 303 "${QJDNS_DIR}bin" 304 ) 305 endif() 306 endif() 307 find_psi_lib("${LIBRARIES_LIST}" "${PATHES}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/") 308 # qca and plugins 309 set(QCA_PLUGINS 310 libqca-ossl${D}.dll 311 libqca-gnupg${D}.dll 312 ) 313 if(MSVC) 314 list(APPEND QCA_PLUGINS 315 qca-ossl${D}.dll 316 qca-gnupg${D}.dll 317 ) 318 endif() 319 find_psi_lib("${QCA_PLUGINS}" "${QCA_PATHES}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/crypto/") 320endif() 321