Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libbullet for openSUSE:Factory checked in at 2026-05-20 15:23:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libbullet (Old) and /work/SRC/openSUSE:Factory/.libbullet.new.1966 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libbullet" Wed May 20 15:23:34 2026 rev:12 rq:1353813 version:3.25 Changes: -------- --- /work/SRC/openSUSE:Factory/libbullet/libbullet.changes 2024-03-08 18:08:19.476204494 +0100 +++ /work/SRC/openSUSE:Factory/.libbullet.new.1966/libbullet.changes 2026-05-20 15:24:02.300946623 +0200 @@ -1,0 +2,21 @@ +Fri May 9 00:00:00 UTC 2026 - [email protected] + +- Update to 3.25 + * Various bug fixes and improvements from 3.17 through 3.25 + * Improved deformable body simulation + * Performance improvements in collision detection +- Add python3-pybullet subpackage with Python bindings + * Enables pybullet physics simulation from Python + * Includes NumPy support for array-based data exchange + * Enables robotics simulation (BulletRoboticsGUI, BulletRobotics) +- Add BuildRequires: python3-devel, python3-numpy, python3-numpy-devel, pkgconfig(gl), pkgconfig(egl) +- Add fix-gwen-linux-link.patch: link libgwen against OpenGLWindow on Linux + to resolve glad_glXxx symbol references at shared library link time +- Add fix-pybullet-numpy2-compat.patch: cast PyObject* to PyArrayObject* in + PyArray_DATA() calls to fix build with GCC 14 and NumPy 2.x +- Add fix-pybullet-link-python-linux.patch: explicitly link pybullet.so + against libpython and libm on Linux to satisfy -Wl,--no-undefined +- Switch BUILD_OPENGL3_DEMOS=ON so SimpleOpenGL3App compiles (Demos3 dir + absent, only effect is removal of -DNO_OPENGL3 guard) + +------------------------------------------------------------------- Old: ---- bullet3-3.17.tar.gz New: ---- bullet3-3.25.tar.gz fix-gwen-linux-link.patch fix-pybullet-link-python-linux.patch fix-pybullet-numpy2-compat.patch ----------(New B)---------- New:- Add BuildRequires: python3-devel, python3-numpy, python3-numpy-devel, pkgconfig(gl), pkgconfig(egl) - Add fix-gwen-linux-link.patch: link libgwen against OpenGLWindow on Linux to resolve glad_glXxx symbol references at shared library link time New: PyArray_DATA() calls to fix build with GCC 14 and NumPy 2.x - Add fix-pybullet-link-python-linux.patch: explicitly link pybullet.so against libpython and libm on Linux to satisfy -Wl,--no-undefined New: to resolve glad_glXxx symbol references at shared library link time - Add fix-pybullet-numpy2-compat.patch: cast PyObject* to PyArrayObject* in PyArray_DATA() calls to fix build with GCC 14 and NumPy 2.x ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libbullet.spec ++++++ --- /var/tmp/diff_new_pack.XuW0pK/_old 2026-05-20 15:24:05.009058001 +0200 +++ /var/tmp/diff_new_pack.XuW0pK/_new 2026-05-20 15:24:05.009058001 +0200 @@ -1,7 +1,7 @@ # # spec file for package libbullet # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,11 +16,13 @@ # -%define sover 3_17 +%define sover 3_25 %define lname libbullet%{sover} %define pdesc Bullet is a Collision Detection and Rigid Body Dynamics Library. +%global python3_inc %(python3 -c "import sysconfig; print(sysconfig.get_path('include'))") +%global python3_lib %(python3 -c "import sysconfig, os; d=sysconfig.get_config_vars(); print(os.path.join(d['LIBDIR'], d['LDLIBRARY']))") Name: libbullet -Version: 3.17 +Version: 3.25 Release: 0 Summary: Bullet Continuous Collision Detection and Physics Library License: Zlib @@ -30,12 +32,23 @@ # PATCH-FIX-OPENSUSE fix-pkgconfig-includedir.patch Patch1: fix-pkgconfig-includedir.patch Patch2: use-system-libs.patch +# PATCH-FIX-OPENSUSE fix-gwen-linux-link.patch - link gwen against OpenGLWindow on Linux to resolve glad symbols +Patch3: fix-gwen-linux-link.patch +# PATCH-FIX-OPENSUSE fix-pybullet-numpy2-compat.patch - cast PyObject* to PyArrayObject* for PyArray_DATA() (GCC14/NumPy2 compat) +Patch4: fix-pybullet-numpy2-compat.patch +# PATCH-FIX-OPENSUSE fix-pybullet-link-python-linux.patch - link pybullet.so against libpython on Linux for -Wl,--no-undefined +Patch5: fix-pybullet-link-python-linux.patch BuildRequires: cmake BuildRequires: dos2unix BuildRequires: fdupes BuildRequires: freeglut-devel BuildRequires: gcc-c++ BuildRequires: pkgconfig +BuildRequires: python3-devel +BuildRequires: python3-numpy +BuildRequires: python3-numpy-devel +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(gl) BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(tinyxml2) @@ -116,6 +129,20 @@ This package contain all that is needed to developer or compile appliancation with the Bullet library. +%package -n python3-pybullet +Summary: Python bindings for the Bullet Physics library +Group: Development/Libraries/Python +Requires: %{lname} = %{version} +Requires: libBulletFileLoader%{sover} = %{version} +Requires: libBulletWorldImporter%{sover} = %{version} + +%description -n python3-pybullet +%{pdesc} + +This package provides Python 3 bindings (pybullet) for the Bullet +physics simulation library, including support for robotics simulation, +rigid body dynamics, and soft body simulation. + %prep %autosetup -p1 -n bullet3-%{version} @@ -124,8 +151,6 @@ rm -rf build3/xcode* rm -rf build3/*osx* rm -rf build3/premake* -rm -rf data -rm -rf examples # Fix any file permissions and formats dos2unix -c ascii README.md @@ -135,23 +160,31 @@ -DCMAKE_C_FLAGS="%{optflags} -fno-strict-aliasing" \ -DCMAKE_CXX_FLAGS="%{optflags} -fno-strict-aliasing" \ -DINCLUDE_INSTALL_DIR="%{_includedir}/bullet" \ - -DBUILD_BULLET2_DEMOS=OFF \ + -DBUILD_BULLET2_DEMOS=ON \ -DBUILD_CPU_DEMOS=OFF \ -DBUILD_EXTRAS=ON \ - -DBUILD_OPENGL3_DEMOS=OFF \ + -DBUILD_OPENGL3_DEMOS=ON \ + -DBUILD_PYBULLET=ON \ + -DBUILD_PYBULLET_NUMPY=ON \ -DBUILD_SHARED_LIBS=ON \ - -DBUILD_UNIT_TESTS=off \ + -DBUILD_UNIT_TESTS=ON \ -DINSTALL_EXTRA_LIBS=ON \ -DINSTALL_LIBS=ON \ -DUSE_DOUBLE_PRECISION=ON \ - -DBUILD_BULLET_ROBOTICS_GUI_EXTRA=OFF \ - -DBUILD_BULLET_ROBOTICS_EXTRA=OFF \ - -DBUILD_OBJ2SDF_EXTRA=OFF + -DBUILD_OBJ2SDF_EXTRA=OFF \ + -DPYTHON_INCLUDE_DIR=%{python3_inc} \ + -DPYTHON_LIBRARY=%{python3_lib} \ + -DPYTHON_SITE_PACKAGES=%{python3_sitearch} make VERBOSE=1 %{?_smp_mflags} +%check +%ctest + %install %cmake_install +# Fix double-slash in pkgconfig Cflags generated when INCLUDE_INSTALL_DIR is absolute +sed -i 's|/usr//usr|/usr|g' %{buildroot}%{_libdir}/pkgconfig/bullet_robotics*.pc %fdupes -s %{buildroot}/%{_includedir} %post -n %{lname} -p /sbin/ldconfig @@ -162,6 +195,7 @@ %post -n libConvexDecomposition%{sover} -p /sbin/ldconfig %post -n libGIMPACTUtils%{sover} -p /sbin/ldconfig %post -n libHACD%{sover} -p /sbin/ldconfig +%post -n python3-pybullet -p /sbin/ldconfig %postun -n %{lname} -p /sbin/ldconfig %postun -n libBulletFileLoader%{sover} -p /sbin/ldconfig %postun -n libBulletInverseDynamicsUtils%{sover} -p /sbin/ldconfig @@ -170,16 +204,19 @@ %postun -n libConvexDecomposition%{sover} -p /sbin/ldconfig %postun -n libGIMPACTUtils%{sover} -p /sbin/ldconfig %postun -n libHACD%{sover} -p /sbin/ldconfig +%postun -n python3-pybullet -p /sbin/ldconfig %files -n %{lname} %doc README.md AUTHORS.txt %license LICENSE.txt %{_libdir}/libB*.so.* %{_libdir}/libLinearMath*.so.* +%exclude %{_libdir}/libBulletExampleBrowserLib.so* %exclude %{_libdir}/libBulletFileLoader.so.* %exclude %{_libdir}/libBulletInverseDynamicsUtils.so.* %exclude %{_libdir}/libBulletWorldImporter.so.* %exclude %{_libdir}/libBulletXmlWorldImporter.so.* +%exclude %{_libdir}/libBussIK.so* %files -n libBulletFileLoader%{sover} %{_libdir}/libBulletFileLoader.so.* @@ -206,5 +243,28 @@ %{_includedir}/bullet/ %{_libdir}/cmake/bullet %{_libdir}/lib*.so +%{_libdir}/libBulletExampleBrowserLib.so +%exclude %{_libdir}/libBulletExampleBrowserLib.so.* +%exclude %{_libdir}/libBussIK.so* +%exclude %{_libdir}/libgwen.so* +%exclude %{_libdir}/libOpenGLWindow.so* %{_libdir}/pkgconfig/bullet.pc +%{_libdir}/pkgconfig/bullet_robotics.pc +%{_libdir}/pkgconfig/bullet_robotics_gui.pc +# clsocket headers and static lib installed by bullet3 into global include/lib +%exclude %{_includedir}/ActiveSocket.h +%exclude %{_includedir}/Host.h +%exclude %{_includedir}/PassiveSocket.h +%exclude %{_includedir}/SimpleSocket.h +%exclude %{_includedir}/StatTimer.h +%exclude /usr/lib/libclsocket.a + +%files -n python3-pybullet +%doc README.md +%license LICENSE.txt +%{python3_sitearch}/pybullet.so* +%{_libdir}/libBulletExampleBrowserLib.so.* +%{_libdir}/libOpenGLWindow.so* +%{_libdir}/libBussIK.so* +%{_libdir}/libgwen.so* ++++++ bullet3-3.17.tar.gz -> bullet3-3.25.tar.gz ++++++ /work/SRC/openSUSE:Factory/libbullet/bullet3-3.17.tar.gz /work/SRC/openSUSE:Factory/.libbullet.new.1966/bullet3-3.25.tar.gz differ: char 13, line 1 ++++++ fix-gwen-linux-link.patch ++++++ --- a/examples/ThirdPartyLibs/Gwen/CMakeLists.txt +++ b/examples/ThirdPartyLibs/Gwen/CMakeLists.txt @@ -24,6 +24,8 @@ ADD_LIBRARY(gwen ${gwen_SRCS} ${gwen_HDRS}) IF (BUILD_SHARED_LIBS) IF(WIN32 OR APPLE) target_link_libraries(gwen ${OPENGL_gl_LIBRARY}) +ELSE() + target_link_libraries(gwen OpenGLWindow) ENDIF() ENDIF() ++++++ fix-pybullet-link-python-linux.patch ++++++ --- a/examples/pybullet/CMakeLists.txt +++ b/examples/pybullet/CMakeLists.txt @@ -85,8 +85,9 @@ IF (WIN32) TARGET_LINK_LIBRARIES(pybullet ${PYTHON_LIBRARIES}) ELSEIF (APPLE) SET_TARGET_PROPERTIES(pybullet PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") +ELSE () + TARGET_LINK_LIBRARIES(pybullet ${PYTHON_LIBRARIES} m) ENDIF () -# else Linux: dont link IF(WIN32) SET(PYTHON_SITE_PACKAGES Lib/site-packages CACHE PATH "Python install path") ++++++ fix-pybullet-numpy2-compat.patch ++++++ --- a/examples/pybullet/pybullet.c +++ b/examples/pybullet/pybullet.c @@ -10199,11 +10199,11 @@ pyDep = PyArray_SimpleNew(2, dep_dims, NPY_FLOAT32); pySeg = PyArray_SimpleNew(2, seg_dims, NPY_INT32); - memcpy(PyArray_DATA(pyRGB), imageData.m_rgbColorData, + memcpy(PyArray_DATA((PyArrayObject*)pyRGB), imageData.m_rgbColorData, imageData.m_pixelHeight * imageData.m_pixelWidth * bytesPerPixel); - memcpy(PyArray_DATA(pyDep), imageData.m_depthValues, + memcpy(PyArray_DATA((PyArrayObject*)pyDep), imageData.m_depthValues, imageData.m_pixelHeight * imageData.m_pixelWidth * sizeof(float)); - memcpy(PyArray_DATA(pySeg), imageData.m_segmentationMaskValues, + memcpy(PyArray_DATA((PyArrayObject*)pySeg), imageData.m_segmentationMaskValues, imageData.m_pixelHeight * imageData.m_pixelWidth * sizeof(int)); PyTuple_SetItem(pyResultList, 2, pyRGB); @@ -10625,11 +10625,11 @@ pyDep = PyArray_SimpleNew(2, dep_dims, NPY_FLOAT32); pySeg = PyArray_SimpleNew(2, seg_dims, NPY_INT32); - memcpy(PyArray_DATA(pyRGB), imageData.m_rgbColorData, + memcpy(PyArray_DATA((PyArrayObject*)pyRGB), imageData.m_rgbColorData, imageData.m_pixelHeight * imageData.m_pixelWidth * bytesPerPixel); - memcpy(PyArray_DATA(pyDep), imageData.m_depthValues, + memcpy(PyArray_DATA((PyArrayObject*)pyDep), imageData.m_depthValues, imageData.m_pixelHeight * imageData.m_pixelWidth); - memcpy(PyArray_DATA(pySeg), imageData.m_segmentationMaskValues, + memcpy(PyArray_DATA((PyArrayObject*)pySeg), imageData.m_segmentationMaskValues, imageData.m_pixelHeight * imageData.m_pixelWidth); PyTuple_SetItem(pyResultList, 2, pyRGB);
