forked from osmocom/wireshark
106 lines
3.3 KiB
CMake
106 lines
3.3 KiB
CMake
#
|
|
# - Find WSWin Libs
|
|
# Due to the layout of the Wireshark Win support libs,
|
|
# CMake needs some support to find them
|
|
#
|
|
# The function is passed the directory name to search for and the variable
|
|
# to set in the callers scope.
|
|
|
|
function( FindWSWinLibs _WS_LIB_SEARCH_PATH _LIB_HINT_VAR )
|
|
if( WIN32 )
|
|
if( ARGN )
|
|
set( _PROJECT_LIB_DIR ${ARGN} )
|
|
else()
|
|
if( DEFINED ENV{WIRESHARK_LIB_DIR} )
|
|
# The buildbots set WIRESHARK_LIB_DIR but not WIRESHARK_BASE_DIR.
|
|
file( TO_CMAKE_PATH "$ENV{WIRESHARK_LIB_DIR}" _PROJECT_LIB_DIR )
|
|
else()
|
|
file( TO_CMAKE_PATH "$ENV{WIRESHARK_BASE_DIR}" _WS_BASE_DIR )
|
|
set( _PROJECT_LIB_DIR "${_WS_BASE_DIR}/wireshark-${WIRESHARK_TARGET_PLATFORM}-libs" )
|
|
endif()
|
|
endif()
|
|
|
|
file( GLOB _SUBDIR "${_PROJECT_LIB_DIR}/*" )
|
|
# We might be able to use $ENV{VSCMD_ARG_TGT_ARCH} here.
|
|
set (_vcpkg_arch x64)
|
|
if(WIRESHARK_TARGET_PLATFORM MATCHES "win32")
|
|
set (_vcpkg_arch x86)
|
|
endif()
|
|
|
|
foreach( _DIR ${_SUBDIR} )
|
|
if( IS_DIRECTORY ${_DIR} )
|
|
if( "${_DIR}" MATCHES ".*/${_WS_LIB_SEARCH_PATH}" )
|
|
set(_vcpkg_dir "${_DIR}/installed/${_vcpkg_arch}-windows")
|
|
if( IS_DIRECTORY "${_vcpkg_dir}")
|
|
set( ${_LIB_HINT_VAR} ${_vcpkg_dir} PARENT_SCOPE )
|
|
else()
|
|
set( ${_LIB_HINT_VAR} ${_DIR} PARENT_SCOPE )
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Add a single DLL
|
|
function(AddWSWinDLL _PKG_NAME _PKG_HINTS _DLL_GLOB)
|
|
if(WIN32 AND ${_PKG_NAME}_FOUND)
|
|
string(TOUPPER ${_PKG_NAME} _PKG_VAR)
|
|
set ( ${_PKG_VAR}_DLL_DIR "${${_PKG_HINTS}}/bin"
|
|
CACHE PATH "Path to ${_PKG_NAME} DLL"
|
|
)
|
|
file( GLOB _pkg_dll RELATIVE "${${_PKG_VAR}_DLL_DIR}"
|
|
"${${_PKG_VAR}_DLL_DIR}/${_DLL_GLOB}.dll"
|
|
)
|
|
set ( ${_PKG_VAR}_DLL ${_pkg_dll}
|
|
CACHE STRING "${_PKG_NAME} DLL file name"
|
|
)
|
|
file( GLOB _pkg_pdb RELATIVE "${${_PKG_VAR}_DLL_DIR}"
|
|
"${${_PKG_VAR}_DLL_DIR}/${_DLL_GLOB}.pdb"
|
|
)
|
|
set ( ${_PKG_VAR}_PDB ${_pkg_pdb}
|
|
CACHE STRING "${_PKG_NAME} PDB file name"
|
|
)
|
|
mark_as_advanced( ${_PKG_VAR}_DLL_DIR ${_PKG_VAR}_DLL ${_PKG_VAR}_PDB )
|
|
else()
|
|
set( ${_PKG_VAR}_DLL_DIR )
|
|
set( ${_PKG_VAR}_DLL )
|
|
endif()
|
|
endfunction()
|
|
|
|
# Add a list of DLLs
|
|
function(AddWSWinDLLS _PKG_NAME _PKG_HINTS) # ...DLL globs
|
|
if(WIN32 AND ${_PKG_NAME}_FOUND)
|
|
string(TOUPPER ${_PKG_NAME} _PKG_VAR)
|
|
set ( ${_PKG_VAR}_DLL_DIR "${${_PKG_HINTS}}/bin"
|
|
CACHE PATH "Path to ${_PKG_NAME} DLLs"
|
|
)
|
|
|
|
set (_pkg_dlls)
|
|
set (_pkg_pdbs)
|
|
foreach(_dll_glob ${ARGN})
|
|
file( GLOB _pkg_dll RELATIVE "${${_PKG_VAR}_DLL_DIR}"
|
|
"${${_PKG_VAR}_DLL_DIR}/${_dll_glob}.dll"
|
|
)
|
|
list(APPEND _pkg_dlls "${_pkg_dll}")
|
|
file( GLOB _pkg_pdb RELATIVE "${${_PKG_VAR}_DLL_DIR}"
|
|
"${${_PKG_VAR}_DLL_DIR}/${_dll_glob}.pdb"
|
|
)
|
|
list(APPEND _pkg_pdbs "${_pkg_pdb}")
|
|
endforeach()
|
|
|
|
set ( ${_PKG_VAR}_DLLS ${_pkg_dlls}
|
|
CACHE FILEPATH "${_PKG_NAME} DLL list"
|
|
)
|
|
set ( ${_PKG_VAR}_PDBS ${_pkg_pdbs}
|
|
CACHE FILEPATH "${_PKG_NAME} PDB list"
|
|
)
|
|
|
|
mark_as_advanced( ${_PKG_VAR}_DLL_DIR ${_PKG_VAR}_DLLS ${_PKG_VAR}_PDBS )
|
|
else()
|
|
set( ${_PKG_VAR}_DLL_DIR )
|
|
set( ${_PKG_VAR}_DLLS )
|
|
set( ${_PKG_VAR}_PDBS )
|
|
endif()
|
|
endfunction()
|