From bc4f1d6cfec5712d3922fc9f0a3a6fdc6d6f87b9 Mon Sep 17 00:00:00 2001
From: Matus Novak <mn00272@surrey.ac.uk>
Date: Thu, 25 Apr 2019 23:48:52 +0200
Subject: [PATCH] Added missing MinGW dependencies for PortAudio

---
 .gitignore                                  |  3 +++
 include/rew/decoder/physical_audio_source.h |  5 +++--
 include/rew/encoder/physical_audio_sink.h   |  5 +++--
 libs/CMakeLists.txt                         | 17 +++++++++--------
 src/rew/decoder/CMakeLists.txt              |  7 +++++--
 src/rew/encoder/CMakeLists.txt              |  7 ++++++-
 6 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/.gitignore b/.gitignore
index fbb2e41..d75afdf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,3 +45,6 @@ tex2pdf*
 # doxygen
 doxygen/*.md
 doxygen/xml
+
+# VS Code
+.vscode/ipch/
diff --git a/include/rew/decoder/physical_audio_source.h b/include/rew/decoder/physical_audio_source.h
index 9ff3d3e..abb84a7 100644
--- a/include/rew/decoder/physical_audio_source.h
+++ b/include/rew/decoder/physical_audio_source.h
@@ -1,12 +1,13 @@
 #ifndef REW_PHYSICAL_AUDIO_READER
 #define REW_PHYSICAL_AUDIO_READER
 
-#include "../common/output.h"
-#include "../common/audio_device.h"
 #include <vector>
 #include <mutex>
 #include <queue>
 #include <array>
+#include <condition_variable>
+#include "../common/output.h"
+#include "../common/audio_device.h"
 
 #ifndef PORTAUDIO_H
 typedef void PaStream;
diff --git a/include/rew/encoder/physical_audio_sink.h b/include/rew/encoder/physical_audio_sink.h
index 3389b1a..7f0530f 100644
--- a/include/rew/encoder/physical_audio_sink.h
+++ b/include/rew/encoder/physical_audio_sink.h
@@ -1,11 +1,12 @@
 #ifndef REW_PHYSICAL_AUDIO_SINK
 #define REW_PHYSICAL_AUDIO_SINK
 
-#include "../common/output.h"
-#include "../common/audio_device.h"
 #include <mutex>
 #include <queue>
 #include <vector>
+#include <condition_variable>
+#include "../common/output.h"
+#include "../common/audio_device.h"
 
 #ifndef PORTAUDIO_H
 typedef void PaStream;
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
index f5fc8e7..00aa336 100644
--- a/libs/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -5,7 +5,7 @@ include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
 ExternalProject_Add(ZLIB
   DOWNLOAD_COMMAND ""
   SOURCE_DIR ${CMAKE_SOURCE_DIR}/libs/zlib
-  CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true
+  CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true -DCMAKE_SH="CMAKE_SH-NOTFOUND"
   BUILD_COMMAND cmake --build . --target zlibstatic --config MinSizeRel
   INSTALL_COMMAND ""
   TEST_COMMAND ""
@@ -25,7 +25,7 @@ endif()
 ExternalProject_Add(PortAudio
   DOWNLOAD_COMMAND ""
   SOURCE_DIR ${CMAKE_SOURCE_DIR}/libs/portaudio
-  CMAKE_ARGS --DPA_BUILD_SHARED=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true -DPA_BUILD_STATIC=ON -DPA_BUILD_TESTS=OFF -DPA_BUILD_EXAMPLES=OFF
+  CMAKE_ARGS --DPA_BUILD_SHARED=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true -DPA_BUILD_STATIC=ON -DPA_BUILD_TESTS=OFF -DPA_BUILD_EXAMPLES=OFF -DCMAKE_SH="CMAKE_SH-NOTFOUND"
   BUILD_COMMAND cmake --build . --target portaudio_static --config MinSizeRel
   INSTALL_COMMAND ""
   TEST_COMMAND ""
@@ -33,13 +33,14 @@ ExternalProject_Add(PortAudio
 
 if(MSVC)
   set(PORTAUDIO_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/portaudio/include ${CMAKE_BINARY_DIR}/libs/PortAudio-prefix/src/PortAudio-build PARENT_SCOPE)
-  set(PORTAUDIO_LIBRARY ${CMAKE_BINARY_DIR}/libs/PortAudio-prefix/src/PortAudio-build/MinSizeRel/portaudio_static_x86.lib PARENT_SCOPE)
-elseif(MINGW)
-  #set(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/zlib ${CMAKE_BINARY_DIR}/libs/ZLIB-prefix/src/ZLIB-build PARENT_SCOPE)
-  #set(ZLIB_LIBRARY ${CMAKE_BINARY_DIR}/libs/ZLIB-prefix/src/ZLIB-build/libzlibstatic.a PARENT_SCOPE)
+  if (CMAKE_CL_64)
+    set(PORTAUDIO_LIBRARY ${CMAKE_BINARY_DIR}/libs/PortAudio-prefix/src/PortAudio-build/MinSizeRel/portaudio_static_x64.lib PARENT_SCOPE)
+  else()
+    set(PORTAUDIO_LIBRARY ${CMAKE_BINARY_DIR}/libs/PortAudio-prefix/src/PortAudio-build/MinSizeRel/portaudio_static_x86.lib PARENT_SCOPE)
+  endif()
 else()
-  #set(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/zlib ${CMAKE_BINARY_DIR}/libs/ZLIB-prefix/src/ZLIB-build PARENT_SCOPE)
-  #set(ZLIB_LIBRARY ${CMAKE_BINARY_DIR}/libs/ZLIB-prefix/src/ZLIB-build/libz.a PARENT_SCOPE)
+  set(PORTAUDIO_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/portaudio/include ${CMAKE_BINARY_DIR}/libs/PortAudio-prefix/src/PortAudio-build PARENT_SCOPE)
+  set(PORTAUDIO_LIBRARY ${CMAKE_BINARY_DIR}/libs/PortAudio-prefix/src/PortAudio-build/libportaudio.a PARENT_SCOPE)
 endif()
 
 # Add third party libraries which do not need compilation step
diff --git a/src/rew/decoder/CMakeLists.txt b/src/rew/decoder/CMakeLists.txt
index e2981e3..c6693da 100644
--- a/src/rew/decoder/CMakeLists.txt
+++ b/src/rew/decoder/CMakeLists.txt
@@ -23,10 +23,13 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${PORTAUDIO_INCLUDE_DIR})
 target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
 
 target_link_libraries(${PROJECT_NAME} ${ZLIB_LIBRARY} ${PORTAUDIO_LIBRARY})
-add_dependencies(${PROJECT_NAME} ZLIB)
+add_dependencies(${PROJECT_NAME} ZLIB PortAudio)
 
 if(WIN32)
-    target_link_libraries(${PROJECT_NAME} wsock32 ws2_32)
+  target_link_libraries(${PROJECT_NAME} wsock32 ws2_32)
+endif()
+if(MINGW)
+  target_link_libraries(${PROJECT_NAME} Winmm SetupAPI)
 endif()
 
 set(DECODER_PROJECT ${PROJECT_NAME} PARENT_SCOPE)
diff --git a/src/rew/encoder/CMakeLists.txt b/src/rew/encoder/CMakeLists.txt
index 1f54883..8d44572 100644
--- a/src/rew/encoder/CMakeLists.txt
+++ b/src/rew/encoder/CMakeLists.txt
@@ -22,7 +22,12 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${PORTAUDIO_INCLUDE_DIR})
 target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
 
 target_link_libraries(${PROJECT_NAME} ${ZLIB_LIBRARY} ${PORTAUDIO_LIBRARY})
-add_dependencies(${PROJECT_NAME} ZLIB)
+add_dependencies(${PROJECT_NAME} ZLIB PortAudio)
+
+if(MINGW)
+  target_link_libraries(${PROJECT_NAME} Winmm SetupAPI)
+endif()
+
 
 set(ENCODER_PROJECT ${PROJECT_NAME} PARENT_SCOPE)
 set(ENCODER_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/encoder PARENT_SCOPE)
-- 
GitLab