From 9b023a56a3dd42c96a95e1d56698d68e286d9abd Mon Sep 17 00:00:00 2001
From: lat9nq <22451773+lat9nq@users.noreply.github.com>
Date: Mon, 14 Dec 2020 18:06:24 -0500
Subject: [PATCH] cmake/conan: Conditionally add target Boost::context

Addresses an issue with the two competing versions of Conan's Boost
package that are currently floating around.

Adds the Boost::context target only if it's recognized by CMake as a
target.
---
 CMakeLists.txt | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2366d372cb..66bbd985a5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -194,13 +194,18 @@ macro(yuzu_find_packages)
     unset(FN_FORCE_REQUIRED)
 endmacro()
 
-if (NOT Boost_FOUND)
-    find_package(Boost 1.73.0 COMPONENTS context headers QUIET)
-    if (Boost_FOUND)
-        set(Boost_LIBRARIES Boost::boost Boost::context)
+find_package(Boost 1.73.0 COMPONENTS context headers QUIET)
+if (Boost_FOUND)
+    set(Boost_LIBRARIES Boost::boost)
+    # Conditionally add Boost::context only if the active version of the Conan or system Boost package provides it
+    # The old version is missing Boost::context, so we want to avoid adding in that case
+    # The new version requires adding Boost::context to prevent linking issues
+    #
+    # This one is used by Conan on subsequent CMake configures, not the first configure.
+    if (TARGET Boost::context)
+        list(APPEND Boost_LIBRARIES Boost::context)
     endif()
-endif()
-if (NOT Boost_FOUND)
+else()
     message(STATUS "Boost 1.73.0 or newer not found, falling back to Conan")
     list(APPEND CONAN_REQUIRED_LIBS "boost/1.73.0")
 endif()
@@ -312,6 +317,12 @@ if (CONAN_REQUIRED_LIBS)
     if (NOT Boost_FOUND)
         find_package(Boost 1.73.0 REQUIRED COMPONENTS context headers)
         set(Boost_LIBRARIES Boost::boost)
+        # Conditionally add Boost::context only if the active version of the Conan Boost package provides it
+        # The old version is missing Boost::context, so we want to avoid adding in that case
+        # The new version requires adding Boost::context to prevent linking issues
+        if (TARGET Boost::context)
+            list(APPEND Boost_LIBRARIES Boost::context)
+        endif()
     endif()
     
     # Due to issues with variable scopes in functions, we need to also find_package(qt5) outside of the function