From 3b582fd5867290bff60163b057cfa5a2bbe27159 Mon Sep 17 00:00:00 2001
From: Arthur Laurent <arthur.laurent4@gmail.com>
Date: Sun, 25 Feb 2024 06:33:53 +0100
Subject: [PATCH] add support for libc++ runtimes for boost (#3311)

* add support for libc++ runtimes for boost

* apply PR suggestions

* Update xmake.lua

---------

Co-authored-by: ruki <waruqi@gmail.com>
---
 packages/b/boost/xmake.lua | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/packages/b/boost/xmake.lua b/packages/b/boost/xmake.lua
index 2fd746966..eb2d3ed5d 100644
--- a/packages/b/boost/xmake.lua
+++ b/packages/b/boost/xmake.lua
@@ -200,6 +200,10 @@ package("boost")
             "--without-icu"
         }
 
+        if package:has_tool("cxx", "clang", "clangxx") then
+            table.insert(bootstrap_argv, "--with-toolset=clang")
+        end
+
         if package:is_plat("windows") then
             -- for bootstrap.bat, all other arguments are useless
             bootstrap_argv = { "msvc" }
@@ -265,6 +269,7 @@ package("boost")
             table.insert(argv, "address-model=32")
         end
         local cxxflags
+        local linkflags
         if package:is_plat("windows") then
             local vs_runtime = package:config("vs_runtime")
             if package:config("shared") then
@@ -302,9 +307,19 @@ package("boost")
                 cxxflags = cxxflags .. " -fPIC"
             end
         end
+        if package.has_runtime and package:has_runtime("c++_shared", "c++_static") then
+            cxxflags = (cxxflags or "") .. " -stdlib=libc++"
+            linkflags = (linkflags or "") .. " -stdlib=libc++"
+            if package:has_runtime("c++_static") then
+                linkflags = linkflags .. " -static-libstdc++"
+            end
+        end
         if cxxflags then
             table.insert(argv, "cxxflags=" .. cxxflags)
         end
+        if linkflags then
+            table.insert(argv, "linkflags=" .. linkflags)
+        end
         for _, libname in ipairs(libnames) do
             if package:config("all") or package:config(libname) then
                 table.insert(argv, "--with-" .. libname)