https://bugs.gentoo.org/932240
https://github.com/boostorg/bcp/commit/cd21e9b4a749a77c24facf2da44f01e032c40842

From cd21e9b4a749a77c24facf2da44f01e032c40842 Mon Sep 17 00:00:00 2001
From: Andrey Semashev <andrey.semashev@gmail.com>
Date: Sun, 24 Mar 2024 14:49:18 +0300
Subject: [PATCH] Remove usage of deprecated and removed Boost.Filesystem APIs.

---
 add_dependent_lib.cpp |  5 +++--
 add_path.cpp          | 30 +++++++++++++++---------------
 bcp_imp.hpp           |  1 +
 copy_path.cpp         |  8 ++++----
 file_types.cpp        |  2 +-
 5 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/tools/bcp/add_dependent_lib.cpp b/tools/bcp/add_dependent_lib.cpp
index 4852914..521b70d 100644
--- a/tools/bcp/add_dependent_lib.cpp
+++ b/tools/bcp/add_dependent_lib.cpp
@@ -15,6 +15,7 @@
 #include "bcp_imp.hpp"
 #include "fileview.hpp"
 #include <boost/regex.hpp>
+#include <boost/filesystem/directory.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/exception.hpp>
 #include <iostream>
@@ -43,12 +44,12 @@ static void init_library_scanner(const fs::path& p, bool cvs_mode, const std::st
    //
    // Don't add files created by build system:
    //
-   if((p.leaf() == "bin") || (p.leaf() == "bin-stage"))
+   if((p.filename() == "bin") || (p.filename() == "bin-stage"))
       return; 
    //
    // Don't add version control directories:
    //
-   if((p.leaf() == "CVS") || (p.leaf() == ".svn"))
+   if((p.filename() == "CVS") || (p.filename() == ".svn"))
       return; 
    //
    // don't add directories not under version control:
diff --git a/tools/bcp/add_path.cpp b/tools/bcp/add_path.cpp
index 8a1fee3..747bb8c 100644
--- a/tools/bcp/add_path.cpp
+++ b/tools/bcp/add_path.cpp
@@ -15,6 +15,7 @@
 #include "bcp_imp.hpp"
 #include "fileview.hpp"
 #include <boost/regex.hpp>
+#include <boost/filesystem/directory.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/exception.hpp>
 #include <iostream>
@@ -24,8 +25,7 @@ void bcp_implementation::add_path(const fs::path& p)
 {
    if (m_excluded.find(p) != m_excluded.end())
       return;
-   fs::path normalized_path = p;
-    normalized_path.normalize();
+   fs::path normalized_path = p.lexically_normal();
    if(fs::exists(m_boost_path / normalized_path))
    {
       if(fs::is_directory(m_boost_path / normalized_path))
@@ -45,12 +45,12 @@ void bcp_implementation::add_directory(const fs::path& p)
    //
    // Don't add files created by build system:
    //
-   if((p.leaf() == "bin") || (p.leaf() == "bin-stage"))
+   if((p.filename() == "bin") || (p.filename() == "bin-stage"))
       return; 
    //
    // Don't add version control directories:
    //
-   if((p.leaf() == "CVS") || (p.leaf() == ".svn"))
+   if((p.filename() == "CVS") || (p.filename() == ".svn"))
       return; 
    //
    // don't add directories not under version control:
@@ -180,7 +180,7 @@ void bcp_implementation::add_file(const fs::path& p)
          {
             // only concatonate if it's a relative path
             // rather than a URL:
-            fs::path dep(p.branch_path() / s);
+            fs::path dep(p.parent_path() / s);
             if(!m_dependencies.count(dep)) 
             {
                m_dependencies[dep] = p; // set up dependency tree
@@ -355,13 +355,13 @@ void bcp_implementation::add_file_dependencies(const fs::path& p, bool scanfile)
             continue;
          }
          include_file = i->str();
-         fs::path test_file(m_boost_path / p.branch_path() / include_file);
-         if(fs::exists(test_file) && !fs::is_directory(test_file) && (p.branch_path().string() != "boost"))
+         fs::path test_file(m_boost_path / p.parent_path() / include_file);
+         if(fs::exists(test_file) && !fs::is_directory(test_file) && (p.parent_path().string() != "boost"))
          {
-            if(!m_dependencies.count(p.branch_path() / include_file)) 
+            if(!m_dependencies.count(p.parent_path() / include_file)) 
             {
-               m_dependencies[p.branch_path() / include_file] = p;
-               add_pending_path(p.branch_path() / include_file);
+               m_dependencies[p.parent_path() / include_file] = p;
+               add_pending_path(p.parent_path() / include_file);
             }
          }
          else if(fs::exists(m_boost_path / include_file))
@@ -405,13 +405,13 @@ void bcp_implementation::add_file_dependencies(const fs::path& p, bool scanfile)
          ++i;
          continue;
       }
-      fs::path test_file(m_boost_path / p.branch_path() / include_file);
-      if(fs::exists(test_file) && !fs::is_directory(test_file) && (p.branch_path().string() != "boost"))
+      fs::path test_file(m_boost_path / p.parent_path() / include_file);
+      if(fs::exists(test_file) && !fs::is_directory(test_file) && (p.parent_path().string() != "boost"))
       {
-         if(!m_dependencies.count(p.branch_path() / include_file)) 
+         if(!m_dependencies.count(p.parent_path() / include_file)) 
          {
-            m_dependencies[p.branch_path() / include_file] = p;
-            add_pending_path(p.branch_path() / include_file);
+            m_dependencies[p.parent_path() / include_file] = p;
+            add_pending_path(p.parent_path() / include_file);
          }
       }
       else if(fs::exists(m_boost_path / include_file))
diff --git a/tools/bcp/bcp_imp.hpp b/tools/bcp/bcp_imp.hpp
index e515581..51c85ba 100644
--- a/tools/bcp/bcp_imp.hpp
+++ b/tools/bcp/bcp_imp.hpp
@@ -14,6 +14,7 @@
 #include <set>
 #include <map>
 #include <queue>
+#include <string>
 #include <boost/filesystem/path.hpp>
 
 namespace fs = boost::filesystem;
diff --git a/tools/bcp/copy_path.cpp b/tools/bcp/copy_path.cpp
index 4143c79..6b7a370 100644
--- a/tools/bcp/copy_path.cpp
+++ b/tools/bcp/copy_path.cpp
@@ -49,18 +49,18 @@ void bcp_implementation::copy_path(const fs::path& p)
    if(fs::exists(m_dest_path / p))
    {
       std::cout << "Copying (and overwriting) file: " << p.string() << "\n";
-     fs::remove(m_dest_path / p);
+      fs::remove(m_dest_path / p);
    }
    else
       std::cout << "Copying file: " << p.string() << "\n";
    //
    // create the path to the new file if it doesn't already exist:
    //
-   create_path(p.branch_path());
+   create_path(p.parent_path());
    //
    // do text based copy if requested:
    //
-   if((p.leaf() == "Jamroot") && m_namespace_name.size())
+   if((p.filename() == "Jamroot") && m_namespace_name.size())
    {
       static std::vector<char> v1, v2;
       v1.clear();
@@ -240,7 +240,7 @@ void bcp_implementation::create_path(const fs::path& p)
    if(!fs::exists(m_dest_path / p))
    {
       // recurse then create the path:
-      create_path(p.branch_path());
+      create_path(p.parent_path());
       fs::create_directory(m_dest_path / p);
    }
 }
diff --git a/tools/bcp/file_types.cpp b/tools/bcp/file_types.cpp
index 297d304..69f6027 100644
--- a/tools/bcp/file_types.cpp
+++ b/tools/bcp/file_types.cpp
@@ -52,7 +52,7 @@ bool bcp_implementation::is_binary_file(const fs::path& p)
       "|"
       "(Jamfile|makefile|configure)",
       boost::regex::perl | boost::regex::icase);
-   return !boost::regex_match(p.leaf().generic_string(), e);
+   return !boost::regex_match(p.filename().generic_string(), e);
 
 }