diff --git a/0001-Remove-requirement-for-accum-buffers.patch b/0001-Remove-requirement-for-accum-buffers.patch new file mode 100644 index 0000000..fa25745 --- /dev/null +++ b/0001-Remove-requirement-for-accum-buffers.patch @@ -0,0 +1,27 @@ +From 914543a4f30de53cd33c2961e8791bf44d29aedf Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Wed, 4 Sep 2024 15:04:27 +0200 +Subject: [PATCH] Remove requirement for accum buffers + +Mesa's swrast with dril does not expose these anymore, so the tests +fail trying to find a matching config. +--- + lib/opengl/test_case.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/opengl/test_case.rb b/lib/opengl/test_case.rb +index e14dac3..4acf91e 100644 +--- a/lib/opengl/test_case.rb ++++ b/lib/opengl/test_case.rb +@@ -39,7 +39,7 @@ class OpenGL::TestCase < MiniTest::Unit::TestCase + + glutInit + glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_STENCIL | +- GLUT_ACCUM | GLUT_ALPHA) ++ GLUT_ALPHA) + + def setup + glutInitWindowPosition 1, 1 +-- +2.46.0 + diff --git a/opengl-0.10.0-pointer-types.patch b/opengl-0.10.0-pointer-types.patch new file mode 100644 index 0000000..9ebbfe6 --- /dev/null +++ b/opengl-0.10.0-pointer-types.patch @@ -0,0 +1,174 @@ +--- opengl-0.10.0/ext/opengl/gl-1.0-1.1.c.types 2024-02-23 11:59:46.379472357 +0900 ++++ opengl-0.10.0/ext/opengl/gl-1.0-1.1.c 2024-02-23 12:20:08.317748271 +0900 +@@ -203,8 +203,9 @@ struct gl_endisable_args { + }; + + static VALUE +-gl_Enable1(struct gl_endisable_args *args) ++gl_Enable1(VALUE val) + { ++ struct gl_endisable_args *args = (struct gl_endisable_args *)val; + long i; + VALUE obj = args->obj; + DECL_GL_FUNC_PTR(void,glEnable,(GLenum cap)); +@@ -220,9 +221,10 @@ gl_Enable1(struct gl_endisable_args *arg + } + + static VALUE +-gl_Enable0(struct gl_endisable_args *args) ++gl_Enable0(VALUE val) + { +- gl_Enable1(args); ++ struct gl_endisable_args *args = (struct gl_endisable_args *)val; ++ gl_Enable1((VALUE)args); + + if (rb_block_given_p()) + rb_yield(Qundef); +@@ -231,8 +233,9 @@ gl_Enable0(struct gl_endisable_args *arg + } + + static VALUE +-gl_Disable1(struct gl_endisable_args *args) ++gl_Disable1(VALUE val) + { ++ struct gl_endisable_args *args = (struct gl_endisable_args *)val; + long i; + VALUE obj = args->obj; + DECL_GL_FUNC_PTR(void,glDisable,(GLenum cap)); +@@ -248,9 +251,10 @@ gl_Disable1(struct gl_endisable_args *ar + } + + static VALUE +-gl_Disable0(struct gl_endisable_args *args) ++gl_Disable0(VALUE val) + { +- gl_Disable1(args); ++ struct gl_endisable_args *args = (struct gl_endisable_args *)val; ++ gl_Disable1((VALUE)args); + + if (rb_block_given_p()) + rb_yield(Qundef); +@@ -279,7 +283,7 @@ gl_Enable(int argc, VALUE *argv, VALUE o + return rb_ensure(gl_Enable0, (VALUE)&enargs, gl_Disable1, (VALUE)&disargs); + } else { + struct gl_endisable_args args = { obj, caps }; +- gl_Enable0(&args); ++ gl_Enable0((VALUE)&args); + } + + return Qnil; +@@ -306,7 +310,7 @@ gl_Disable(int argc, VALUE *argv, VALUE + return rb_ensure(gl_Disable0, (VALUE)&disargs, gl_Enable1, (VALUE)&enargs); + } else { + struct gl_endisable_args args = { obj, caps }; +- gl_Disable0(&args); ++ gl_Disable0((VALUE)&args); + } + + return Qnil; +@@ -318,8 +322,9 @@ struct gl_client_state_args { + }; + + static VALUE +-gl_EnableClientState1(struct gl_client_state_args *args) ++gl_EnableClientState1(VALUE val) + { ++ struct gl_client_state_args *args = (struct gl_client_state_args *)val; + long i; + VALUE obj = args->obj; + DECL_GL_FUNC_PTR(void,glEnableClientState,(GLenum cap)); +@@ -335,9 +340,10 @@ gl_EnableClientState1(struct gl_client_s + } + + static VALUE +-gl_EnableClientState0(struct gl_client_state_args *args) ++gl_EnableClientState0(VALUE val) + { +- gl_EnableClientState1(args); ++ struct gl_client_state_args *args = (struct gl_client_state_args *)val; ++ gl_EnableClientState1((VALUE)args); + + if (rb_block_given_p()) + rb_yield(Qundef); +@@ -346,8 +352,9 @@ gl_EnableClientState0(struct gl_client_s + } + + static VALUE +-gl_DisableClientState1(struct gl_client_state_args *args) ++gl_DisableClientState1(VALUE val) + { ++ struct gl_client_state_args *args = (struct gl_client_state_args *)val; + long i; + VALUE obj = args->obj; + DECL_GL_FUNC_PTR(void,glDisableClientState,(GLenum cap)); +@@ -363,9 +370,10 @@ gl_DisableClientState1(struct gl_client_ + } + + static VALUE +-gl_DisableClientState0(struct gl_client_state_args *args) ++gl_DisableClientState0(VALUE val) + { +- gl_DisableClientState1(args); ++ struct gl_client_state_args *args = (struct gl_client_state_args *)val; ++ gl_DisableClientState1((VALUE)args); + + if (rb_block_given_p()) + rb_yield(Qundef); +@@ -394,7 +402,7 @@ gl_EnableClientState(int argc, VALUE *ar + return rb_ensure(gl_EnableClientState0, (VALUE)&enargs, gl_DisableClientState1, (VALUE)&disargs); + } else { + struct gl_client_state_args args = { obj, ary }; +- gl_EnableClientState0(&args); ++ gl_EnableClientState0((VALUE)&args); + } + + return Qnil; +@@ -421,7 +429,7 @@ gl_DisableClientState(int argc, VALUE *a + return rb_ensure(gl_DisableClientState0, (VALUE)&disargs, gl_EnableClientState1, (VALUE)&enargs); + } else { + struct gl_client_state_args args = { obj, ary }; +- gl_DisableClientState0(&args); ++ gl_DisableClientState0((VALUE)&args); + } + + return Qnil; +@@ -433,8 +441,9 @@ struct gl_begin0_args { + }; + + static VALUE +-gl_Begin0(struct gl_begin0_args *args) ++gl_Begin0(VALUE val) + { ++ struct gl_begin0_args *args = (struct gl_begin0_args *)val; + VALUE obj = args->obj; + DECL_GL_FUNC_PTR(void,glBegin,(GLenum mode)); + +@@ -472,7 +481,7 @@ gl_Begin(VALUE obj, VALUE mode) + if (rb_block_given_p()) + return rb_ensure(gl_Begin0, (VALUE)&args, gl_End, obj); + else +- gl_Begin0(&args); ++ gl_Begin0((VALUE)&args); + + return Qnil; + } +@@ -525,8 +534,9 @@ struct gl_list_args { + }; + + static VALUE +-gl_NewList0(struct gl_list_args *args) ++gl_NewList0(VALUE val) + { ++ struct gl_list_args *args = (struct gl_list_args *) val; + GLuint list; + GLenum mode; + VALUE obj = args->obj; +@@ -563,7 +573,7 @@ gl_NewList(VALUE obj, VALUE list, VALUE + if (rb_block_given_p()) + return rb_ensure(gl_NewList0, (VALUE)&args, gl_EndList, obj); + else +- gl_NewList0(&args); ++ gl_NewList0((VALUE)&args); + + return Qnil; + } diff --git a/rubygem-opengl.spec b/rubygem-opengl.spec index f61526b..1696b1c 100644 --- a/rubygem-opengl.spec +++ b/rubygem-opengl.spec @@ -1,19 +1,23 @@ %global gem_name opengl -%global bootstrap 1 +%bcond_with bootstrap -# examples/OrangeBook/: BSD +# MIT-LICENSE: MIT +# README.rdoc: MIT +# examples/OrangeBook/3Dlabs-License.txt (etc): BSD-3-Clause # examples/NeHe: KILLED (license unclear) -# examples/RedBook/ SGI = MIT -# examples/misc/OGLBench.rb: GPL+ or Artistic +# examples/RedBook/aapoly.rb: HPND +# examples/misc/OGLBench.rb: GPL-1.0-or-later OR Artistic-1.0-Perl +# examples/misc/plane.rb: HPND # examples/misc/fbo_test.rb ??? KILLED -# examples/misc/trislam.rb: GPL+ or Artistic +# examples/misc/trislam.rb: GPL-1.0-or-later OR Artistic-1.0-Perl Name: rubygem-%{gem_name} Version: 0.10.0 -Release: 13%{?dist} +Release: 39%{?dist} Summary: An OpenGL wrapper for Ruby +# SPDX confirmed License: MIT URL: https://github.com/drbrain/opengl # Source0: https://rubygems.org/gems/%%{gem_name}-%%{version}.gem @@ -25,6 +29,11 @@ Source0: %{gem_name}-%{version}-clean.gem Source1: create-clean-opengl-gem.sh # http://www.gnu.org/licenses/old-licenses/gpl-1.0.txt Source2: GPLv1.rubygem_opengl +# Fix for -Werror=incompatible-pointer-types +Patch0: opengl-0.10.0-pointer-types.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=2303995#c20 +# Mesa 24.2.2 swrast with dril does not expose accum buffers anymore +Patch1: 0001-Remove-requirement-for-accum-buffers.patch # MRI (CRuby) only BuildRequires: gcc @@ -34,17 +43,13 @@ BuildRequires: libGL-devel BuildRequires: libGLU-devel BuildRequires: freeglut-devel # %%check -%if 0%{?bootstrap} < 1 +%if %{without bootstrap} BuildRequires: rubygem(minitest) >= 5 BuildRequires: %{_bindir}/xvfb-run BuildRequires: mesa-dri-drivers BuildRequires: rubygem(glu) BuildRequires: rubygem(glut) -%endif -%if 0%{?fedora} <= 21 -# Install this for compatibility -Requires: rubygem(glu) -Requires: rubygem(glut) +BuildRequires: rubygem(matrix) %endif @@ -56,23 +61,15 @@ GLU and GLUT libraries. %package doc Summary: Documentation for %{name} Requires: %{name} = %{version}-%{release} -License: MIT and BSD and (GPL+ or Artistic) +License: MIT AND BSD-3-Clause AND HPND AND (GPL-1.0-or-later OR Artistic-1.0-Perl) BuildArch: noarch %description doc Documentation for %{name} %prep -%setup -q -c -T - -# Gem repack -TOPDIR=$(pwd) -mkdir tmpunpackdir -pushd tmpunpackdir - -gem unpack %{SOURCE0} -cd %{gem_name}-%{version}-clean -gem specification -l --ruby %{SOURCE0} > %{gem_name}.gemspec +%setup -q -n %{gem_name}-%{version}-clean +mv ../%{gem_name}-%{version}-clean.gemspec ./%{gem_name}.gemspec find examples/ -type f -print0 | xargs --null file | \ grep CRLF | sed -e 's|:.*$||' | \ @@ -85,13 +82,13 @@ sed -i.minitest \ -e 's|MiniTest::Unit::TestCase|Minitest::Test|' \ lib/opengl/test_case.rb -gem build %{gem_name}.gemspec -mv %{gem_name}-%{version}.gem $TOPDIR - -popd -rm -rf tmpunpackdir +%patch -P0 -p1 -b .types +%if 0%{?fedora} >= 41 +%patch -P1 -p1 -b .accum +%endif %build +gem build %{gem_name}.gemspec %gem_install %install @@ -129,22 +126,36 @@ popd rm -f %{buildroot}%{gem_extdir_mri}/lib/opengl/test_case.rb %check -%if 0%{?bootstrap} < 1 +%if %{with bootstrap} +exit 0 +%endif + pushd .%{gem_instdir} -cat > test/unit.rb << EOF -gem "minitest" -require "minitest/autorun" -EOF +EXPECTED_TEST_MSG="184 runs, 17\(38\|44\|45\) assertions, 6 failures, [12] errors, 14 skips" -xvfb-run \ - -s "-screen 0 640x480x24" \ - ruby \ - -Ilib:.:./ext \ - -e "Dir.glob('test/test_*.rb').each { |f| require f }" \ - || echo "please check this later" -popd +export RUBYLIB=%{buildroot}%{gem_extdir_mri}/:$(pwd)/lib:$(pwd) +# try twice +STATUS_ON_FAILURE=true +for trial in 1 2 ; do + xvfb-run \ + -s "-screen 0 640x480x24" \ + ruby \ + -e "Dir.glob('test/test_*.rb').each { |f| require f }" \ + 2>&1 | tee TEST.log + cat TEST.log | grep -q "$EXPECTED_TEST_MSG" && break || $STATUS_ON_FAILURE +%ifarch i686 +%else + STATUS_ON_FAILURE=false %endif +%ifarch s390x +%if 0%{?fedora} == 40 + # Currently mesa on F41, s390x is fairly broken + STATUS_ON_FAILURE=true +%endif +%endif +done +popd %files %dir %{gem_instdir} @@ -164,6 +175,88 @@ popd %doc %{gem_instdir}/utils/ %changelog +* Thu Jan 08 2026 Mamoru TASAKA - 0.10.0-39 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_4.0 + +* Fri Jul 25 2025 Fedora Release Engineering - 0.10.0-38 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Sat Jan 18 2025 Fedora Release Engineering - 0.10.0-37 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Jan 08 2025 Mamoru TASAKA - 0.10.0-36 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.4 + +* Fri Sep 06 2024 Mamoru TASAKA - 0.10.0-35 +- Adjust to mesa 24.2.2 change that swrast with dril does not expose + accum buffers anymore +- Adjust test result message with recent mesa + +* Fri Jul 19 2024 Fedora Release Engineering - 0.10.0-34 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jul 12 2024 Mamoru TASAKA - 0.10.0-33 +- Enable s390x test on F41 again + +* Mon Jun 17 2024 Mamoru TASAKA - 0.10.0-32 +- Use regex match for test result + +* Thu May 09 2024 Mamoru TASAKA - 0.10.0-31 +- Ignore one more test failure with recent F41 mesa +- Ignore test failure completely for now on F41 s390x mesa + +* Fri Feb 23 2024 Mamoru TASAKA - 0.10.0-30 +- Fix -Werror=incompatible-pointer-types hard + +* Thu Feb 22 2024 Mamoru TASAKA - 0.10.0-29 +- Explicitly add -Wno-error=incompatible-pointer-types only + +* Fri Jan 26 2024 Fedora Release Engineering - 0.10.0-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Mamoru TASAKA - 0.10.0-27 +- Change -Wincompatible-pointer-types from error to warning + +* Wed Jan 03 2024 Mamoru TASAKA - 0.10.0-26 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.3 + +* Mon Oct 9 2023 Mamoru TASAKA - 0.10.0-25 +- SPDX migration + +* Thu Oct 5 2023 Mamoru TASAKA - 0.10.0-24 +- Switch to use recent spec file style +- Actually check the count of the test failures + +* Fri Jul 21 2023 Fedora Release Engineering - 0.10.0-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jan 20 2023 Fedora Release Engineering - 0.10.0-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jan 04 2023 Mamoru TASAKA - 0.10.0-21 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.2 + +* Sat Jul 23 2022 Fedora Release Engineering - 0.10.0-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 26 2022 Mamoru TASAKA - 0.10.0-19 +- F-36: rebuild against ruby31 + +* Fri Jan 21 2022 Fedora Release Engineering - 0.10.0-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jul 23 2021 Fedora Release Engineering - 0.10.0-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jan 27 2021 Fedora Release Engineering - 0.10.0-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jan 06 2021 Mamoru TASAKA - 0.10.0-15 +- F-34: rebuild against ruby 3.0 + +* Wed Jul 29 2020 Fedora Release Engineering - 0.10.0-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Thu Jan 30 2020 Fedora Release Engineering - 0.10.0-13 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild