Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[email protected] (new formula) #1964

Merged
merged 2 commits into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions Formula/[email protected]
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 "[email protected]"

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.

Loading