aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/modules/FindPORTAUDIO.cmake54
-rw-r--r--ui/gtk/CMakeLists.txt50
2 files changed, 89 insertions, 15 deletions
diff --git a/cmake/modules/FindPORTAUDIO.cmake b/cmake/modules/FindPORTAUDIO.cmake
index d8a0d351d2..a8676b8202 100644
--- a/cmake/modules/FindPORTAUDIO.cmake
+++ b/cmake/modules/FindPORTAUDIO.cmake
@@ -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 )
diff --git a/ui/gtk/CMakeLists.txt b/ui/gtk/CMakeLists.txt
index 55bd6d1784..f0f5ac7fbe 100644
--- a/ui/gtk/CMakeLists.txt
+++ b/ui/gtk/CMakeLists.txt
@@ -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