-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
class Coin3dAT403Py312 < Formula | ||
Check warning on line 1 in Formula/[email protected]_py312.rb GitHub Actions / test-bot (ubuntu-22.04)`brew linkage --cached --test --strict freecad/freecad/[email protected]_py312` failed on Linux!
|
||
desc "Open Inventor 2.1 API implementation (Coin) with Python bindings (Pivy)" | ||
homepage "https://coin3d.github.io/" | ||
license all_of: ["BSD-3-Clause", "ISC"] | ||
|
||
stable do | ||
url "https://github.com/coin3d/coin/releases/download/v4.0.3/coin-4.0.3-src.tar.gz" | ||
sha256 "66e3f381401f98d789154eb00b2996984da95bc401ee69cc77d2a72ed86dfda8" | ||
|
||
# We use the pre-release to support `pyside` and `[email protected]`. | ||
# This matches Arch Linux[^1] and Debian[^2] packages. | ||
# | ||
# [^1]: https://archlinux.org/packages/extra/x86_64/python-pivy/ | ||
# [^2]: https://packages.debian.org/trixie/python3-pivy | ||
resource "pivy" do | ||
url "https://github.com/coin3d/pivy/archive/refs/tags/0.6.9.a0.tar.gz" | ||
sha256 "2c2da80ae216fe06394562f4a8fc081179d678f20bf6f8ec412cda470d7eeb91" | ||
end | ||
|
||
resource "soqt" do | ||
url "https://github.com/coin3d/soqt/releases/download/v1.6.2/soqt-1.6.2-src.tar.gz" | ||
sha256 "fb483b20015ab827ba46eb090bd7be5bc2f3d0349c2f947c3089af2b7003869c" | ||
end | ||
end | ||
|
||
livecheck do | ||
url :stable | ||
strategy :github_latest | ||
end | ||
|
||
head do | ||
url "https://github.com/coin3d/coin.git", branch: "master" | ||
|
||
resource "pivy" do | ||
url "https://github.com/coin3d/pivy.git", branch: "master" | ||
end | ||
|
||
# resource "soqt" do | ||
# url "https://github.com/coin3d/soqt.git", brach: "master" | ||
# end | ||
end | ||
|
||
keg_only :versioned_formula | ||
|
||
depends_on "cmake" => :build | ||
depends_on "doxygen" => :build | ||
depends_on "freecad/freecad/[email protected]" => :build | ||
depends_on "python-setuptools" => :build | ||
depends_on "boost" | ||
depends_on "freecad/freecad/[email protected]_py312" | ||
depends_on "[email protected]" | ||
depends_on "qt@5" | ||
|
||
on_linux do | ||
depends_on "mesa" | ||
depends_on "mesa-glu" | ||
end | ||
|
||
def python3 | ||
"python3.12" | ||
end | ||
|
||
def install | ||
system "cmake", "-S", ".", "-B", "_build-coin", | ||
"-DCMAKE_CXX_STANDARD=11", | ||
"-DCOIN_BUILD_DOCUMENTATION=ON", | ||
"-DCOIN_BUILD_DOCUMENTATION_MAN=ON", | ||
"-DCMAKE_INSTALL_PREFIX=#{prefix}", | ||
"-L" | ||
system "cmake", "--build", "_build-coin" | ||
system "cmake", "--install", "_build-coin" | ||
|
||
resource("pivy").stage do | ||
ENV.append_path "CMAKE_PREFIX_PATH", prefix.to_s | ||
ENV["LDFLAGS"] = "-Wl,-rpath,#{opt_lib}" | ||
system python3, "-m", "pip", "install", *std_pip_args, "." | ||
end | ||
|
||
resource("soqt").stage do | ||
system "cmake", "-S", ".", "-B", "_build-soqt", | ||
"-DCMAKE_INSTALL_RPATH=#{rpath}", | ||
"-DSOQT_BUILD_MAC_FRAMEWORK=OFF", | ||
"-DSOQT_BUILD_DOCUMENTATION=OFF", | ||
"-DSOQT_BUILD_TESTS=OFF", | ||
"-DSOQT_USE_QT6:BOOL=OFF", | ||
"-DCMAKE_PREFIX_PATH=#{prefix}", | ||
"-L", | ||
*std_cmake_args(find_framework: "FIRST") | ||
system "cmake", "--build", "_build-soqt" | ||
system "cmake", "--install", "_build-soqt" | ||
end | ||
end | ||
|
||
def post_install | ||
# explicitly set python version | ||
python_version = "3.12" | ||
|
||
# Unlink the existing .pth file to avoid reinstall issues | ||
pth_file = lib/"python#{python_version}/coin3d_py312-pivy.pth" | ||
pth_file.unlink if pth_file.exist? | ||
|
||
ohai "Creating .pth file for pivy module" | ||
# write the .pth file to the site-packages directory | ||
(lib/"python#{python_version}/coin3d_py312-pivy.pth").write <<~EOS | ||
import site; site.addsitedir('#{lib}/python#{python_version}/site-packages/') | ||
EOS | ||
end | ||
|
||
def caveats | ||
<<~EOS | ||
this formula is keg-only, and intended to aid in the building of freecad | ||
this formula should NOT be linked using `brew link` or else errors will | ||
arise when opening the #{python3} repl | ||
the test in this formula will fail if a screen (GUI) can not be accessed | ||
EOS | ||
end | ||
|
||
test do | ||
Check failure on line 118 in Formula/[email protected]_py312.rb GitHub Actions / test-bot (ubuntu-22.04)`brew test --verbose freecad/freecad/[email protected]_py312` failed on Linux!
Check failure on line 118 in Formula/[email protected]_py312.rb GitHub Actions / test-bot (macos-14)`brew test --verbose freecad/freecad/[email protected]_py312` failed on macOS Sonoma (14) on Apple Silicon!
Check failure on line 118 in Formula/[email protected]_py312.rb GitHub Actions / test-bot (macos-13)`brew test --verbose freecad/freecad/[email protected]_py312` failed on macOS Ventura (13)!
|
||
# NOTE: required because formula is keg_only | ||
coin3d_py312_include = Formula["[email protected]_py312"].opt_include | ||
|
||
(testpath/"test.cpp").write <<~EOS | ||
#include <Inventor/SoDB.h> | ||
int main() { | ||
SoDB::init(); | ||
SoDB::cleanup(); | ||
return 0; | ||
} | ||
EOS | ||
|
||
opengl_flags = if OS.mac? | ||
["-Wl,-framework,OpenGL"] | ||
else | ||
["-L#{Formula["mesa"].opt_lib}", "-lGL"] | ||
end | ||
|
||
system ENV.cc, "test.cpp", "-L#{lib}", "-lCoin", *opengl_flags, "-o", "test", "-I#{coin3d_py312_include}" | ||
system "./test" | ||
|
||
ENV.append_path "PYTHONPATH", Formula["[email protected]_py312"].opt_prefix/Language::Python.site_packages(python3) | ||
ENV.append_path "PYTHONPATH", Formula["[email protected]_py312"].opt_prefix/Language::Python.site_packages(python3) | ||
# Set QT_QPA_PLATFORM to minimal to avoid error: | ||
# "This application failed to start because no Qt platform plugin could be initialized." | ||
ENV["QT_QPA_PLATFORM"] = "minimal" if OS.linux? && ENV["HOMEBREW_GITHUB_ACTIONS"] | ||
system Formula["[email protected]"].opt_bin/"python3.12", "-c", <<~EOS | ||
import shiboken2 | ||
from pivy.sogui import SoGui | ||
assert SoGui.init("test") is not None | ||
EOS | ||
end | ||
end |