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

boost: version boost for hbfc #448

Closed
wants to merge 1 commit into from
Closed
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
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 "python@3.11"

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/python@3.11/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
Loading