Bug 1967544
| Summary: | perl-SDL-2.548-11.fc35 skips all video tests with sdl12-compat-devel-0.0.1~git.20210602.cc5826a-1.fc35: Failed to init video | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Petr Pisar <ppisar> |
| Component: | sdl12-compat | Assignee: | Neal Gompa <ngompa13> |
| Status: | CLOSED RAWHIDE | QA Contact: | |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | rawhide | CC: | hdegoede, icculus, igor.raits, ngompa13, perl-devel |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | sdl12-compat-0.0.1~git.20210618.f44f295-1.fc35 | Doc Type: | If docs needed, set a value |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2021-06-20 12:56:27 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | 1968508 | ||
| Bug Blocks: | |||
There were fixes in sdl12-compat-0.0.1~git.20210609.efe9791-1.fc35 (bug #1968508) and another bug about an unnecessary RPATH was fixed in perl-Alien-SDL-1.446-21.fc35 (https://fedoraproject.org/wiki/Changes/Broken_RPATH_will_fail_rpmbuild) in the meain time. But perl-SDL tests still fails. There are more warnings when configuring perl-SDL: [Alien::SDL] Testing header(s): SDL.hDetecting available libraries ... ###WARNING### Disabling subsystem 'Video' NOK: (fatal error: SDL.h: No such file or directory 5 | #include <SDL.h> | ^~~~~~~ compilation terminated.) Not really. I had an old sdl12-compat on my system. With sdl12-compat-0.0.1~git.20210609.efe9791-1.fc35 the build and tests pass. But most of the tests report: INFO: sdl12-compat, built on Jun 9 2021 at 00:00:00, talking to SDL2 2.0.14 Init SDL_INIT_VIDEO failed with SDL error: and stderr INFO: FIXME: there is never a parachute in SDL2, should we catch segfaults ourselves? (SDL_Init:1622) INFO: FIXME: support SDL_INIT_EVENTTHREAD where it makes sense? (SDL_InitSubSystem:1594) t/core.t ........................ skipped: Failed to init video That not used to be like that. The tests had passed normally before sdl12-compat replaced SDL. It can be reduced to:
$ SDL_VIDEODRIVER=dummy perl -Iblib/{lib,arch} -e 'use SDL; $r = SDL::init(0x00000020); $e = SDL::get_error(); print qq{retval = <$r>, error = <$e>\n}'
INFO: sdl12-compat, built on Jun 9 2021 at 00:00:00, talking to SDL2 2.0.14
INFO: FIXME: there is never a parachute in SDL2, should we catch segfaults ourselves? (SDL_Init:1622)
INFO: FIXME: support SDL_INIT_EVENTTHREAD where it makes sense? (SDL_InitSubSystem:1594)
retval = <0>, error = <>
SDL::init() does not fail. But it prints a warning to an error output and that is caught by the tests in t/lib/SDL/TestTool.pm:init():
($stdout, $stderr ) = capture { SDL::init($init) };
if ( $stderr ne '' ) {
warn 'Init ' . $inits{$init} . ' failed with SDL error: ' . SDL::get_error() . "\nand stderr $stderr\n";
}
return !( $stderr ne '' );
In other words the tests check that there is not error output, but sdl12-compat logs there unimplemented features.
I changes the initialization to check a return value instead of stderr like this:
--- a/t/lib/SDL/TestTool.pm
+++ b/t/lib/SDL/TestTool.pm
@@ -20,6 +20,7 @@ sub init {
my ( $self, $init ) = @_;
my $stdout = '';
my $stderr = '';
+ my $retval;
if ( $init == SDL_INIT_VIDEO ) {
if ( $^O !~ /win/i && !$ENV{DISPLAY} && !$ENV{SDL_VIDEODRIVER} ) {
@@ -36,12 +37,15 @@ sub init {
SDL::quit();
}
- ($stdout, $stderr ) = capture { SDL::init($init) };
- if ( $stderr ne '' ) {
- warn 'Init ' . $inits{$init} . ' failed with SDL error: ' . SDL::get_error() . "\nand stderr $stderr\n";
+ ($stdout, $stderr ) = capture { $retval = SDL::init($init) };
+ if ( $retval ) {
+ warn 'Init ' . $inits{$init} . ' failed with SDL error: ' . SDL::get_error() . "\n" .
+ ($stderr eq '') ? '' : "and stderr $stderr\n";
+ } elsif ( $stderr ne '' ) {
+ warn 'Init ' . $inits{$init} . " succeeded but warned:\n$stderr\n";
}
- return !( $stderr ne '' );
+ return !( $retval );
}
sub test_audio_open {
All tests pass with old SDL. Some tests fail with sdl12-compat-0.0.1~git.20210609.efe9791-1.fc35:
Test Summary Report
-------------------
t/core.t (Wstat: 0 Tests: 28 Failed: 0)
TODO passed: 21-22, 27
t/core_audio.t (Wstat: 512 Tests: 45 Failed: 2)
Failed tests: 30-31
Non-zero exit status: 2
t/core_events.t (Wstat: 256 Tests: 679 Failed: 1)
Failed test: 668
Non-zero exit status: 1
t/core_multi.t (Wstat: 0 Tests: 4 Failed: 0)
TODO passed: 3
t/core_timer.t (Wstat: 0 Tests: 6 Failed: 0)
TODO passed: 6
t/core_video.t (Wstat: 256 Tests: 110 Failed: 1)
Failed test: 62
TODO passed: 57, 59
Non-zero exit status: 1
t/gfx_imagefilter.t (Wstat: 0 Tests: 8 Failed: 0)
TODO passed: 7
t/mixer.t (Wstat: 768 Tests: 26 Failed: 3)
Failed tests: 20-21, 23
Non-zero exit status: 3
t/mixer_mixchunk.t (Wstat: 256 Tests: 2 Failed: 2)
Failed tests: 1-2
Non-zero exit status: 1
Parse errors: Bad plan. You planned 6 tests but ran 2.
t/mixer_mixmusic.t (Wstat: 512 Tests: 6 Failed: 2)
Failed tests: 4-5
Non-zero exit status: 2
t/mixer_music.t (Wstat: 3584 Tests: 35 Failed: 14)
Failed tests: 1, 8-11, 13-16, 20, 23-24, 28-29
Non-zero exit status: 14
t/sdlx_music.t (Wstat: 256 Tests: 2 Failed: 0)
Non-zero exit status: 1
Parse errors: No plan found in TAP output
t/sdlx_sound.t (Wstat: 256 Tests: 5 Failed: 0)
Non-zero exit status: 1
Parse errors: No plan found in TAP output
t/sdlx_surface.t (Wstat: 256 Tests: 1 Failed: 0)
Non-zero exit status: 1
Parse errors: No plan found in TAP output
Files=58, Tests=3449, 89 wallclock secs ( 0.34 usr 0.11 sys + 22.68 cusr 2.39 csys = 25.52 CPU)
Result: FAIL
Failed 10/58 test programs. 25/3449 subtests failed.
The stderr checking has already been fixed in upstream with:
commit 39f3db900436329dcc1bfbc28f74775d1304b538
Author: Pino Toscano <toscano.pino>
Date: Fri May 1 09:51:13 2015 +0200
TestTool::init: properly handle SDL::init errors
So far TestTool::init was just capturing stdout and stderr of SDL::init,
using stderr to check whether SDL::init failed. This, other than being
fragile, misses the init errors.
Switch from checking stderr to checking the actual result code of
SDL::init.
Could you please take a look at this, Ryan? This should all be resolved upstream now, including emulating a bug that the Perl unit tests expects. :) We no longer spam stderr by default, so it shouldn’t need those workarounds anymore, either. Unless there are other concerns, I believe this bug can be marked as resolved now. Petr, I built sdl12-compat-0.0.1~git.20210618.f44f295-1.fc35 in Rawhide, which includes the work Ryan has done. Can you verify that this is fixed now? Koschei reports that this is no longer a problem: https://koschei.fedoraproject.org/build/10490013 Thanks. |
sdl12-compat replaced SDL in Fedora 35 and perl-SDL-2.548-11.fc35 fails to build now because of failing tests: Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.puyE59 + umask 022 + cd /builddir/build/BUILD + cd SDL-2.548 + ./Build test [Alien::SDL] Build option used: Already installed SDL ver=1.2.15 path=/usr SDL(v1.2.15) SDL_image(v1.2.12) SDL_mixer(v1.2.12) SDL_ttf(v2.0.11) SDL_gfx(v2.0.26) SDL_Pango(v1.3) Building SDL # Failed test 'use SDL;' # at t/00-load.t line 88. # Tried to use 'SDL'. # Error: Can't locate loadable object for module SDL_perl in @INC (@INC contains: /builddir/build/BUILD/SDL-2.548/blib/lib /builddir/build/BUILD/SDL-2.548/blib/arch inc /usr/local/lib64/perl5/5.34 /usr/local/share/perl5/5.34 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /builddir/build/BUILD/SDL-2.548/blib/lib/SDL.pm line 42. # Compilation failed in require at /builddir/build/BUILD/SDL-2.548/blib/lib/SDL.pm line 42. # BEGIN failed--compilation aborted at /builddir/build/BUILD/SDL-2.548/blib/lib/SDL.pm line 42. # Compilation failed in require at t/00-load.t line 88. # BEGIN failed--compilation aborted at t/00-load.t line 88. Bailout called. Further testing stopped: Test failed. BAIL OUT!. FAILED--Further testing stopped: Test failed. BAIL OUT!. error: Bad exit status from /var/tmp/rpm-tmp.puyE59 (%check)