138 lines
5.9 KiB
CMake
138 lines
5.9 KiB
CMake
|
############################################################################
|
||
|
#
|
||
|
# file : thirdparty.cmake
|
||
|
# copyright : (C) 2009 by Brian Gavin, 2012 Jean-Philippe Meuret
|
||
|
#
|
||
|
############################################################################
|
||
|
|
||
|
############################################################################
|
||
|
# #
|
||
|
# This program is free software; you can redistribute it and/or modify #
|
||
|
# it under the terms of the GNU General Public License as published by #
|
||
|
# the Free Software Foundation; either version 2 of the License, or #
|
||
|
# (at your option) any later version. #
|
||
|
# #
|
||
|
############################################################################
|
||
|
|
||
|
|
||
|
################################################################################################
|
||
|
# Under Windows, install needed 3rd party DLLs close to Qatsh executable
|
||
|
|
||
|
# Find the full path-name of the 3rd party DLL corresponding to the given 3rd party link library
|
||
|
#
|
||
|
# Parameters :
|
||
|
# * LIB_PATH_NAMES : The link library (or list of link libraries) path-name.
|
||
|
# * LIB_NAME_HINTS : Hints for retrieving in LIB_PATH_NAMES the only lib we are taking care of,
|
||
|
# and for retrieving on disk the corresponding DLL.
|
||
|
# * DLL_NAME_PREFIXES : Possible prefixes (to the lib name hint) for retrieving the DLL.
|
||
|
# Note: the empty "" prefix is always tried at the end.
|
||
|
# Ex: "lib;xx" for "lib" and "xx" prefixes.
|
||
|
# * DLL_PATHNAME_VAR : Name of the output variable for the retrieved DLL path-name.
|
||
|
|
||
|
MACRO(_FIND_3RDPARTY_DLL LIB_PATH_NAMES LIB_NAME_HINTS DLL_NAME_PREFIXES DLL_PATHNAME_VAR)
|
||
|
|
||
|
#MESSAGE(STATUS "_FIND_3RDPARTY_DLL : Libs=${LIB_PATH_NAMES} Hints=${LIB_NAME_HINTS}")
|
||
|
|
||
|
FOREACH(_LIB_NAME_HINT ${LIB_NAME_HINTS})
|
||
|
|
||
|
# Must handle the case of multiple libs listed in ${LIB_PATH_NAMES} :
|
||
|
# Use LIB_NAME_HINTS to retrieve the one we are interested in here.
|
||
|
SET(_LIB_PATHNAME ${LIB_PATH_NAMES})
|
||
|
FOREACH(_LIB_PATHNAME_ ${LIB_PATH_NAMES})
|
||
|
IF(${_LIB_PATHNAME_} MATCHES "${_LIB_NAME_HINT}\\.")
|
||
|
SET(_LIB_PATHNAME ${_LIB_PATHNAME_})
|
||
|
#MESSAGE(STATUS "Match: _LIB_PATHNAME=${_LIB_PATHNAME_}")
|
||
|
BREAK()
|
||
|
ENDIF(${_LIB_PATHNAME_} MATCHES "${_LIB_NAME_HINT}\\.")
|
||
|
ENDFOREACH(_LIB_PATHNAME_ ${LIB_PATH_NAMES})
|
||
|
|
||
|
# Got the link library pathname : check if any corresponding DLL around (try all prefixes).
|
||
|
# 1) Check the empty prefix
|
||
|
# (CMake ignores it when specified at the beginning of DLL_NAME_PREFIXES ... bull shit).
|
||
|
GET_FILENAME_COMPONENT(_LIB_PATH "${_LIB_PATHNAME}" PATH)
|
||
|
SET(${DLL_PATHNAME_VAR} "${_LIB_PATH}/../bin/${_LIB_NAME_HINT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||
|
#MESSAGE(STATUS "Trying 3rdParty DLL ${${DLL_PATHNAME_VAR}}")
|
||
|
IF(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
MESSAGE(STATUS "Will install 3rdParty DLL ${${DLL_PATHNAME_VAR}}")
|
||
|
BREAK() # First found is the one.
|
||
|
ELSE(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
UNSET(${DLL_PATHNAME_VAR})
|
||
|
ENDIF(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
|
||
|
# 2) Check other (specified) prefixes.
|
||
|
FOREACH(_DLL_NAME_PREFIX ${DLL_NAME_PREFIXES})
|
||
|
SET(${DLL_PATHNAME_VAR} "${_LIB_PATH}/../bin/${_DLL_NAME_PREFIX}${_LIB_NAME_HINT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||
|
#MESSAGE(STATUS "Trying 3rdParty DLL ${${DLL_PATHNAME_VAR}}")
|
||
|
IF(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
BREAK() # First found is the one.
|
||
|
ELSE(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
UNSET(${DLL_PATHNAME_VAR})
|
||
|
ENDIF(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
ENDFOREACH(_DLL_NAME_PREFIX ${DLL_NAME_PREFIXES})
|
||
|
|
||
|
IF(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
MESSAGE(STATUS "Will install 3rdParty DLL ${${DLL_PATHNAME_VAR}}")
|
||
|
BREAK() # First found is the one.
|
||
|
ELSE(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
UNSET(${DLL_PATHNAME_VAR})
|
||
|
ENDIF(EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
|
||
|
ENDFOREACH(_LIB_NAME_HINT ${LIB_NAME_HINTS})
|
||
|
|
||
|
#IF(NOT EXISTS "${${DLL_PATHNAME_VAR}}")
|
||
|
# MESSAGE(STATUS "Could not find 3rdParty DLL for lib ${LIB_NAME_HINTS} (prefixes ${DLL_NAME_PREFIXES})")
|
||
|
#ENDIF()
|
||
|
|
||
|
ENDMACRO(_FIND_3RDPARTY_DLL DLL_PATHNAME)
|
||
|
|
||
|
MACRO(INSTALL_3RDPARTY_RUNTIME)
|
||
|
|
||
|
SET(_THIRDPARTY_DLL_PATHNAMES)
|
||
|
|
||
|
# Qt.
|
||
|
SET(_QT_DBG_SFX "")
|
||
|
IF(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
||
|
SET(_QT_DBG_SFX "d")
|
||
|
ENDIF()
|
||
|
|
||
|
_FIND_3RDPARTY_DLL("${QT_QTCORE_LIBRARY}" "QtCore${_QT_DBG_SFX}4" "" _DLL_PATHNAME)
|
||
|
LIST(APPEND _THIRDPARTY_DLL_PATHNAMES "${_DLL_PATHNAME}")
|
||
|
|
||
|
_FIND_3RDPARTY_DLL("${QT_QTGUI_LIBRARY}" "QtGui${_QT_DBG_SFX}4" "" _DLL_PATHNAME)
|
||
|
LIST(APPEND _THIRDPARTY_DLL_PATHNAMES "${_DLL_PATHNAME}")
|
||
|
|
||
|
# LibSndFile
|
||
|
_FIND_3RDPARTY_DLL("${LIBSNDFILE_LIBRARY}" "sndfile;sndfile-1" "lib;" _DLL_PATHNAME)
|
||
|
LIST(APPEND _THIRDPARTY_DLL_PATHNAMES "${_DLL_PATHNAME}")
|
||
|
|
||
|
# Compilers run-times.
|
||
|
IF(MSVC)
|
||
|
|
||
|
# We do it ourselves, but use InstallRequiredSystemLibraries to figure out what they are
|
||
|
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
|
||
|
INCLUDE(InstallRequiredSystemLibraries)
|
||
|
IF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
|
||
|
SET(_DLL_PATHNAME "${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}")
|
||
|
MESSAGE(STATUS "Will install compiler run-times ${_DLL_PATHNAME}")
|
||
|
LIST(APPEND _THIRDPARTY_DLL_PATHNAMES "${_DLL_PATHNAME}")
|
||
|
ENDIF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
|
||
|
|
||
|
ELSEIF(MINGW)
|
||
|
|
||
|
# Works with MinGW 4.4 and 4.7.
|
||
|
GET_FILENAME_COMPONENT(_MINGW_BINDIR "${CMAKE_CXX_COMPILER}" PATH)
|
||
|
SET(_DLL_PATHNAME "${_MINGW_BINDIR}/mingwm10.dll")
|
||
|
MESSAGE(STATUS "Will install compiler run-time ${_DLL_PATHNAME}")
|
||
|
LIST(APPEND _THIRDPARTY_DLL_PATHNAMES "${_DLL_PATHNAME}")
|
||
|
|
||
|
SET(_DLL_PATHNAME "${_MINGW_BINDIR}/libgcc_s_dw2-1.dll")
|
||
|
MESSAGE(STATUS "Will install compiler run-time ${_DLL_PATHNAME}")
|
||
|
LIST(APPEND _THIRDPARTY_DLL_PATHNAMES "${_DLL_PATHNAME}")
|
||
|
|
||
|
ENDIF(MSVC)
|
||
|
|
||
|
INSTALL(FILES ${_THIRDPARTY_DLL_PATHNAMES} DESTINATION bin)
|
||
|
|
||
|
ENDMACRO(INSTALL_3RDPARTY_RUNTIME)
|
||
|
|