Skip to content

Commit

Permalink
boost: version boost for hbfc
Browse files Browse the repository at this point in the history
  • Loading branch information
ipatch committed Dec 2, 2023
1 parent 145589a commit 6f3f341
Showing 1 changed file with 105 additions and 0 deletions.
105 changes: 105 additions & 0 deletions Formula/boost-python3.11.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
class BoostPython311 < Formula
desc "C++ library for C++/Python3 interoperability"
homepage "https://www.boost.org/"
url "https://github.com/boostorg/boost/releases/download/boost-1.83.0/boost-1.83.0.tar.xz"
sha256 "c5a0688e1f0c05f354bbd0b32244d36085d9ffc9f932e8a18983a9908096f614"
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.11"
end

def install
# "layout" should be synchronized with boost
args = %W[
-d2
-j#{ENV.make_jobs}
--layout=tagged-1.66
--user-config=user-config.jam
install
threading=multi,single
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

# 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/*.*")
(lib/"cmake").install buildpath.glob("install-python3/lib/cmake/boost_python*")
(lib/"cmake").install buildpath.glob("install-python3/lib/cmake/boost_numpy*")
doc.install (buildpath/"libs/python/doc").children
end

test do

Check failure on line 80 in Formula/boost-python3.11.rb

View workflow job for this annotation

GitHub Actions / test-bot (self-hosted-mojavevm)

`brew test --verbose freecad/freecad/boost-python3.11` failed on macOS Mojave (10.14)!

/usr/local/Homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/bundle clean ==> Testing freecad/freecad/boost-python3.11 ==> python3.11-config --includes dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib Referenced from: /usr/local/Cellar/[email protected]/3.11.0/Frameworks/Python.framework/Versions/3.11/Python Reason: image not found Error: freecad/freecad/boost-python3.11: failed An exception occurred within a child process: Minitest::Assertion: Expected: 0 Actual: nil /usr/local/Homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/gems/minitest-5.20.0/lib/minitest/assertions.rb:183:in `assert' /usr/local/Homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/gems/minitest-5.20.0/lib/minitest/assertions.rb:218:in `assert_equal' /usr/local/Homebrew/Library/Homebrew/formula_assertions.rb:26:in `shell_output' /usr/local/Homebrew/Library/Taps/freecad/homebrew-freecad/Formula/boost-python3.11.rb:97:in `block in <class:BoostPython311>' /usr/local/Homebrew/Library/Homebrew/formula.rb:2494:in `block (3 levels) in run_test' /usr/local/Homebrew/Library/Homebrew/extend/kernel.rb:499:in `with_env' /usr/local/Homebrew/Library/Homebrew/formula.rb:2493:in `block (2 levels) in run_test' /usr/local/Homebrew/Library/Homebrew/formula.rb:1053:in `with_logging' /usr/local/Homebrew/Library/Homebrew/formula.rb:2492:in `block in run_test' /usr/local/Homebrew/Library/Homebrew/mktemp.rb:75:in `block in run' /usr/local/Homebrew/Library/Homebrew/mktemp.rb:75:in `chdir' /usr/local/Homebrew/Library/Homebrew/mktemp.rb:75:in `run' /usr/local/Homebrew/Library/Homebrew/formula.rb:2786:in `mktemp' /usr/local/Homebrew/Library/Homebrew/formula.rb:2486:in `run_test' /usr/local/Homebrew/Library/Homebrew/test.rb:44:in `block in <main>' /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/3.1.0/timeout.rb:107:in `block in timeout' /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/3.1.0/timeout.rb:36:in `block in catch' /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/3.1.0/timeout.rb:36:in `catch' /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/3.1.0/timeout.rb:36:in `catch' /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/3.1.0/timeout.rb:123:in `timeout' /usr/local/Homebrew/Library/Homebrew/test.rb:48:in `<main>'
(testpath/"hello.cpp").write <<~EOS
#include <boost/python.hpp>
char const* greet() {
return "Hello, world!";
}
BOOST_PYTHON_MODULE(hello)
{
boost::python::def("greet", greet);
}
EOS

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", "hello.cpp", "-L#{lib}", "-lboost_python#{pyver}",
"-o", "hello.so", *pyincludes, *pylib

output = <<~EOS
import hello
print(hello.greet())
EOS
assert_match "Hello, world!", pipe_output(python3, output, 0)
end
end

0 comments on commit 6f3f341

Please sign in to comment.