Skip to content

Commit

Permalink
[email protected]_py312.rb:checkin new version of coin3d, bump #1
Browse files Browse the repository at this point in the history
  • Loading branch information
ipatch committed Oct 15, 2024
1 parent 387abbd commit d2fde4c
Showing 1 changed file with 175 additions and 0 deletions.
175 changes: 175 additions & 0 deletions Formula/[email protected]_py312.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
class Coin3dAT403Py312 < Formula
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", branch: "master"
end
end

keg_only :versioned_formula

depends_on "cmake" => :build
depends_on "doxygen" => :build
depends_on "freecad/freecad/[email protected]" => :build
depends_on "boost"
depends_on "freecad/freecad/[email protected]_py312"
depends_on "python-setuptools"
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

Check failure on line 63 in Formula/[email protected]_py312.rb

View workflow job for this annotation

GitHub Actions / test-bot (macos-14)

`brew install --verbose --formula --build-bottle freecad/freecad/[email protected]_py312` failed on macOS Sonoma (14) on Apple Silicon!

In file included from pivy/gui/soqt_wrap.cpp:4036: In file included from /opt/homebrew/Cellar/[email protected]_py312/4.0.3/include/Inventor/Qt/devices/SoQtDevice.h:48: In file included from /opt/homebrew/Cellar/qt@5/5.15.15/include/QtGui/qevent.h:43: In file included from /opt/homebrew/Cellar/qt@5/5.15.15/include/QtGui/qtguiglobal.h:43: In file included from /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:105: /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qcompilerdetection.h:604:6: error: Qt requires a C++11 compiler and yours does not seem to be that. # error Qt requires a C++11 compiler and yours does not seem to be that. ^ In file included from pivy/gui/soqt_wrap.cpp:4036: In file included from /opt/homebrew/Cellar/[email protected]_py312/4.0.3/include/Inventor/Qt/devices/SoQtDevice.h:48: In file included from /opt/homebrew/Cellar/qt@5/5.15.15/include/QtGui/qevent.h:43: In file included from /opt/homebrew/Cellar/qt@5/5.15.15/include/QtGui/qtguiglobal.h:43: /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:398:6: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions] enum class Deprecated_t {}; ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:399:1: error: unknown type name 'constexpr' constexpr Q_DECL_UNUSED Deprecated_t Deprecated = {}; ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:399:37: error: expected ';' after top level declarator constexpr Q_DECL_UNUSED Deprecated_t Deprecated = {}; ^ ; /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:530:41: warning: rvalue references are a C++11 extension [-Wc++11-extensions] template <class T> struct AlignOf<T &&> : AlignOf<T> {}; ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:581:19: warning: alias declarations are a C++11 extension [-Wc++11-extensions] using qsizetype = QIntegerForSizeof<std::size_t>::Signed; ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:1: error: unknown type name 'constexpr' constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:24: warning: variable templates are a C++14 extension [-Wc++14-extensions] constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:11: warning: inline variables are a C++17 extension [-Wc++17-extensions] constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:25: error: expected ';' at end of declaration constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ ; /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:38: error: unknown type name 'T' constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:50: error: unknown type name 'T' constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:671:27: error: a type specifier is required for all declarations constexpr inline const T &qMin(const T &a, const T &b) { return (a < b) ? a : b; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:673:1: error: unknown type name 'constexpr' constexpr inline const T &qMax(const T &a, const T &b) { return (a < b) ? b : a; } ^ /opt/homebrew/Cellar/qt@5/5.15.15/include/QtCore/qglobal.h:673:24: warning: variable templates are a C++14 extension [-Wc++14-extension
# NOTE: ipatch, useful links to other distros packaging this software
# https://packages.altlinux.org/en/sisyphus/srpms/soqt/specfiles/
# https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/coin/coin-4.0.2.ebuild
# https://gitlab.archlinux.org/archlinux/packaging/packages/soqt/-/blob/main/PKGBUILD
# https://gitlab.archlinux.org/archlinux/packaging/packages/python-pivy/-/blob/main/PKGBUILD

system "cmake", "-S", ".", "-B", "_build-coin",
"-DCMAKE_CXX_STANDARD=11",
"-DCOIN_BUILD_DOCUMENTATION=ON",
"-DCOIN_BUILD_DOCUMENTATION_MAN=ON",
"-DCMAKE_INSTALL_PREFIX=#{prefix}",
"-L"
puts "----------------------------------------------------"
puts "CMAKE_PREFIX_PATH=#{ENV["CMAKE_PREFIX_PATH"]}"
puts "CMAKE_PREFIX_PATH Datatype: #{ENV["CMAKE_PREFIX_PATH"].class}"
puts "----------------------------------------------------"
system "cmake", "--build", "_build-coin"
system "cmake", "--install", "_build-coin"

resource("soqt").stage do
system "cmake", "-S", ".", "-B", "_build-soqt",
"-DCMAKE_INSTALL_RPATH=#{rpath}",
"-DSOQT_BUILD_MAC_FRAMEWORK=OFF",
"-DSOQT_BUILD_DOCUMENTATION=ON",
"-DSOQT_BUILD_DOC_MAN=ON",
"-DSOQT_BUILD_TESTS=OFF",
"-DSOQT_USE_QT6:BOOL=OFF",
"-DCMAKE_PREFIX_PATH=#{prefix}",
"-L",
*std_cmake_args(find_framework: "FIRST")
puts "----------------------------------------------------"
puts "CMAKE_PREFIX_PATH=#{ENV["CMAKE_PREFIX_PATH"]}"
puts "CMAKE_PREFIX_PATH Datatype: #{ENV["CMAKE_PREFIX_PATH"].class}"
puts "----------------------------------------------------"

system "cmake", "--build", "_build-soqt"
system "cmake", "--install", "_build-soqt"
end

# NOTE: ipatch, it seems SOQT is optional dep for pivy thus build soqt first
resource("pivy").stage do
ENV.append_path "CMAKE_PREFIX_PATH", prefix.to_s
ENV.append_path "CMAKE_PREFIX_PATH", Formula["python-setuptools"].opt_prefix

puts "----------------------------------------------------"
puts "CMAKE_PREFIX_PATH=#{ENV["CMAKE_PREFIX_PATH"]}"
puts "CMAKE_PREFIX_PATH Datatype: #{ENV["CMAKE_PREFIX_PATH"].class}"
puts "----------------------------------------------------"

ENV["LDFLAGS"] = "-Wl,-rpath,#{opt_lib}"
system python3, "-m", "pip", "install", *std_pip_args, "."
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
# 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

0 comments on commit d2fde4c

Please sign in to comment.