Skip to content

Commit

Permalink
boost-python3@1.87 (new formula) (#1964)
Browse files Browse the repository at this point in the history
  • Loading branch information
YoshitakaMo authored Dec 18, 2024
1 parent 4e42e58 commit 9217062
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 134 deletions.
107 changes: 107 additions & 0 deletions Formula/boost-python3@1.87.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
class BoostPython3AT187 < Formula
desc "C++ library for C++/Python3 interoperability"
homepage "https://www.boost.org/"
url "https://github.com/boostorg/boost/releases/download/boost-1.87.0/boost-1.87.0-b2-nodocs.tar.xz"
sha256 "3abd7a51118a5dd74673b25e0a3f0a4ab1752d8d618f4b8cea84a603aeecc680"
license "BSL-1.0"
head "https://github.com/boostorg/boost.git", branch: "master"

livecheck do
formula "boost"
end

keg_only :versioned_formula

depends_on "numpy" => :build
depends_on "boost"
depends_on "python@3.12"

def python3
"python3.12"
end

def install
# "layout" should be synchronized with boost
args = %W[
-d2
-j#{ENV.make_jobs}
--layout=system
--user-config=user-config.jam
install
threading=multi
link=shared,static
]

# Boost is using "clang++ -x c" to select C compiler which breaks C++14
# handling using ENV.cxx14. Using "cxxflags" and "linkflags" still works.
args << "cxxflags=-std=c++14"
args << "cxxflags=-stdlib=libc++" << "linkflags=-stdlib=libc++" if ENV.compiler == :clang

# Avoid linkage to boost container and graph modules
# Issue ref: https://github.com/boostorg/boost/issues/985
args << "linkflags=-Wl,-dead_strip_dylibs" if OS.mac?

# disable python detection in bootstrap.sh; it guesses the wrong include
# directory for Python 3 headers, so we configure python manually in
# user-config.jam below.
inreplace "bootstrap.sh", "using python", "#using python"

pyver = Language::Python.major_minor_version python3
py_prefix = if OS.mac?
Formula["python@#{pyver}"].opt_frameworks/"Python.framework/Versions"/pyver
else
Formula["python@#{pyver}"].opt_prefix
end

# Force boost to compile with the desired compiler
(buildpath/"user-config.jam").write <<~EOS
using #{OS.mac? ? "darwin" : "gcc"} : : #{ENV.cxx} ;
using python : #{pyver}
: #{python3}
: #{py_prefix}/include/python#{pyver}
: #{py_prefix}/lib ;
EOS

system "./bootstrap.sh", "--prefix=#{prefix}",
"--libdir=#{lib}",
"--with-libraries=python",
"--with-python=#{python3}",
"--with-python-root=#{py_prefix}"

system "./b2", "--build-dir=build-python3",
"--stagedir=stage-python3",
"--libdir=install-python3/lib",
"--prefix=install-python3",
"python=#{pyver}",
*args

lib.install buildpath.glob("install-python3/lib/*{python,numpy}*")
(lib/"cmake").install buildpath.glob("install-python3/lib/cmake/*{python,numpy}*")
end

test do
(testpath/"hello.cpp").write <<~CPP
#include <boost/python.hpp>
char const* greet() {
return "Hello, world!";
}
BOOST_PYTHON_MODULE(hello)
{
boost::python::def("greet", greet);
}
CPP

pyincludes = shell_output("#{python3}-config --includes").chomp.split
pylib = shell_output("#{python3}-config --ldflags --embed").chomp.split
pyver = Language::Python.major_minor_version(python3).to_s.delete(".")

system ENV.cxx, "-shared", "-fPIC", "-std=c++14", "hello.cpp", "-L#{lib}", "-lboost_python#{pyver}",
"-o", "hello.so", *pyincludes, *pylib

output = <<~PYTHON
import hello
print(hello.greet())
PYTHON
assert_match "Hello, world!", pipe_output(python3, output, 0)
end
end
134 changes: 0 additions & 134 deletions Formula/rdkit4coot.rb

This file was deleted.

0 comments on commit 9217062

Please sign in to comment.