Add PortAudio to Windows CMake build

Change-Id: I774ff0bf858280f2a5aa551ae1a5e23eedf8dc20
Reviewed-on: https://code.wireshark.org/review/8848
Reviewed-by: Graham Bloice <graham.bloice@trihedral.com>
This commit is contained in:
Graham Bloice 2015-04-26 14:22:05 +01:00
parent 9cb09a242f
commit 97dfbf565c
2 changed files with 89 additions and 15 deletions

View File

@ -5,6 +5,10 @@
# PORTAUDIO_INCLUDE_DIRS - where to find portaudio.h, etc.
# PORTAUDIO_LIBRARIES - List of libraries when using portaudio.
# PORTAUDIO_FOUND - True if portaudio found.
#
# For Windows, Portaudio is just a set of headers, there is no library
# we build an archive ourselves
# So set PORTAUDIO_SRC_DIR and PORT_AUDIO_INCLUDE_DIRS
IF (PORTAUDIO_INCLUDE_DIRS)
@ -31,30 +35,50 @@ FIND_LIBRARY(PORTAUDIO_LIBRARY NAMES ${PORTAUDIO_NAMES}
# handle the QUIETLY and REQUIRED arguments and set PORTAUDIO_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PORTAUDIO DEFAULT_MSG PORTAUDIO_LIBRARY PORTAUDIO_INCLUDE_DIR)
IF(WIN32)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PORTAUDIO DEFAULT_MSG PORTAUDIO_INCLUDE_DIR)
ELSE(WIN32)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PORTAUDIO DEFAULT_MSG PORTAUDIO_LIBRARY PORTAUDIO_INCLUDE_DIR)
ENDIF(WIN32)
IF(PORTAUDIO_FOUND)
SET( PORTAUDIO_LIBRARIES ${PORTAUDIO_LIBRARY} )
IF(WIN32)
SET( PORTAUDIO_LIBRARIES "" )
SET( PORTAUDIO_SRC_DIR "${PORTAUDIO_HINTS}/src" )
SET( PORTAUDIO_INCLUDE_DIR
${PORTAUDIO_INCLUDE_DIR}
${PORTAUDIO_SRC_DIR}/common
${PORTAUDIO_SRC_DIR}/os/win
)
ELSE(WIN32)
SET( PORTAUDIO_LIBRARIES ${PORTAUDIO_LIBRARY} )
ENDIF(WIN32)
SET( PORTAUDIO_INCLUDE_DIRS ${PORTAUDIO_INCLUDE_DIR} )
# Check for newer PortAudio V19 API
# http://www.portaudio.com/docs/proposals/018-VersionInformationInterface.html
INCLUDE(CheckFunctionExists)
SET(CMAKE_REQUIRED_INCLUDES ${PORTAUDIO_INCLUDE_DIRS})
SET(CMAKE_REQUIRED_LIBRARIES ${PORTAUDIO_LIBRARIES})
CHECK_FUNCTION_EXISTS(Pa_GetVersion HAVE_PA_GETVERSION)
SET(CMAKE_REQUIRED_INCLUDES "")
SET(CMAKE_REQUIRED_LIBRARIES "")
IF(HAVE_PA_GETVERSION)
# Symbol found, must be the newer V19 API
IF(WIN32)
# We only have the newer version on Windows
SET( PORTAUDIO_API_1 )
ELSE(HAVE_PA_GETVERSION)
# Symbol not found, must be the older V18 API
SET( PORTAUDIO_API_1 1 )
ENDIF(HAVE_PA_GETVERSION)
ELSE(WIN32)
INCLUDE(CheckFunctionExists)
SET(CMAKE_REQUIRED_INCLUDES ${PORTAUDIO_INCLUDE_DIRS})
SET(CMAKE_REQUIRED_LIBRARIES ${PORTAUDIO_LIBRARIES})
CHECK_FUNCTION_EXISTS(Pa_GetVersion HAVE_PA_GETVERSION)
SET(CMAKE_REQUIRED_INCLUDES "")
SET(CMAKE_REQUIRED_LIBRARIES "")
IF(HAVE_PA_GETVERSION)
# Symbol found, must be the newer V19 API
SET( PORTAUDIO_API_1 )
ELSE(HAVE_PA_GETVERSION)
# Symbol not found, must be the older V18 API
SET( PORTAUDIO_API_1 1 )
ENDIF(HAVE_PA_GETVERSION)
ENDIF(WIN32)
ELSE(PORTAUDIO_FOUND)
SET( PORTAUDIO_LIBRARIES )
SET( PORTAUDIO_INCLUDE_DIRS )
SET( PORTAUDIO_SRC_DIR )
ENDIF(PORTAUDIO_FOUND)
MARK_AS_ADVANCED( PORTAUDIO_LIBRARIES PORTAUDIO_INCLUDE_DIRS )
MARK_AS_ADVANCED( PORTAUDIO_LIBRARIES PORTAUDIO_INCLUDE_DIRS PORTAUDIO_SRC_DIR )

View File

@ -128,6 +128,51 @@ if(PORTAUDIO_FOUND)
${WIRESHARK_GTK_SRC}
rtp_player.c
)
# For Win32, there is no PortAudio lib, we compile the files locally
if(WIN32)
add_definitions(
-DPA_NO_DS
-DPA_NO_ASIO
)
set(PORTAUDIO_SRC
${PORTAUDIO_SRC_DIR}/common/pa_allocation.c
${PORTAUDIO_SRC_DIR}/common/pa_converters.c
${PORTAUDIO_SRC_DIR}/common/pa_cpuload.c
${PORTAUDIO_SRC_DIR}/common/pa_dither.c
${PORTAUDIO_SRC_DIR}/common/pa_front.c
${PORTAUDIO_SRC_DIR}/common/pa_process.c
${PORTAUDIO_SRC_DIR}/common/pa_skeleton.c
${PORTAUDIO_SRC_DIR}/common/pa_stream.c
${PORTAUDIO_SRC_DIR}/common/pa_trace.c
${PORTAUDIO_SRC_DIR}/os/win/pa_win_hostapis.c
${PORTAUDIO_SRC_DIR}/os/win/pa_win_util.c
${PORTAUDIO_SRC_DIR}/os/win/pa_x86_plain_converters.c
${PORTAUDIO_SRC_DIR}/os/win/pa_win_waveformat.c
${PORTAUDIO_SRC_DIR}/hostapi/wmme/pa_win_wmme.c
)
add_library(portaudio OBJECT
${PORTAUDIO_SRC}
)
set_target_properties(portaudio PROPERTIES
INCLUDE_DIRECTORIES "${PORTAUDIO_INCLUDE_DIRS}"
FOLDER "UI")
# Portaudio has some warnings, annoyingly the combination of CMake
# and MSBuild means that just disabling the warnings on the specific
# source files doesn't work, so set them to level 4 for the target
#set_source_files_properties(${PORTAUDIO_SRC_DIR}/common/pa_front.c
# PROPERTIES
# COMPILE_FLAGS "/wd4189"
#)
#set_source_files_properties(${PORTAUDIO_SRC_DIR}/os/win/pa_x86_plain_converters.c
# PROPERTIES
# COMPILE_FLAGS "/wd4305"
#)
target_compile_options(portaudio
PUBLIC "/w44189"
PUBLIC "/w44305"
)
endif()
endif()
if(ENABLE_EXTCAP)
@ -240,10 +285,15 @@ register_tap_files(wireshark-tap-register.c
${WIRESHARK_TAP_SRC}
)
if(WIN32)
set(PORTAUDIO_OBJ $<TARGET_OBJECTS:portaudio>)
endif()
add_library(gtkui STATIC
${WIRESHARK_GTK_SRC}
${WIRESHARK_TAP_SRC}
${PLATFORM_UI_SRC}
${PORTAUDIO_OBJ}
wireshark-tap-register.c
)
set_target_properties(gtkui PROPERTIES