Closed PhilterPaper closed 2 years ago
Just fyi, exact similar issue is also observed on fresh installation of module for Strawberry Perl 5.30.1 & Win10.
@PhilterPaper What would be even more useful is if you could add or modify the CI tests (under .github
) to make them fail on Windows.
@mohawk2 This isn't my product so I can't do anything about the CI tests. I'm just reporting a failure to upgrade (it's preinstalled on Strawberry).
@PhilterPaper You could pull-request a modification of the CI config. That would then permanently constrain the project's behaviour, instantly catching regressions.
Well, actually, I don't even use IPC::Run. I'm just reporting the upgrade failure because Strawberry Perl preinstalled it as one of the packages, and it complains because it can't be upgraded. I would have to learn all about IPC::Run and how to fix its CI config, which I don't have time to do right now. Not being familiar with the package, I'd probably do more harm that good at this point.
It's likely you'd have to figure out what was going on, then figure out a way to fix it. That's the way of things with software, and configurations, and open source.
Right now I'm figuring out how PDL does complex numbers (and figuring out more about how complex numbers actually work), and also how PDL stores things in memory. This is so I can change a data-structure that holds an "array" (area of memory) of pairs of individual floats/doubles into treating that as a fewer-dimensioned area of coalesced sort-of-pairs of floats/doubles that are then treated as C99 "native" complex numbers. This has involved reading through probably 5k lines of somewhat obscurely-written code so far. A lack of familiarity is simply the start of a journey towards improving things (usually with many frustrations and things learnt on the way) ;-)
I have created a new workflow locally - windows_installation.yml Since Strawberry Perl already has IPC::Run, I have reinstalled it again using cpanm (Perl 5.30). The output for above is at - runs-2159603888 This is similar to what reported above. I am also not an expert on github workflows so it takes certain hit and trial to reach there. :P
Let me know if you want a pull request for this workflow or some additional changes (maybe 'latest' perl version ?) in workflow config.
@mohawk2 it sounds like you and @toddr may not have Windows to test-install on. As I said, I don't have the time or interest in this module to spend the time and effort learning it and chasing down the problem(s), but I would be happy to help out by attempting to install an instrumented package (cpanm -f
) and reporting back to you the results. Let me know if you're interested in such a collaboration. @rai-gaurav might also want to work with you/us on this, since fixing CI might go hand-in-hand with fixing the install problems. Maybe we should hear from Todd (the owner) first to see if he's interested in this help in the first place.
@rai-gaurav That's a great start - automated reproduction! Please PR it, and ensure you allow maintainers to "edit" (push to) it. This way we'll be able to push attempted fixes, and once it (plus fixes) are merged, we'll know it's fixed as permanently as can be achieved. This would also allow anyone else interested (who'd also be able to see the open issue/PR) to pull the branch and have a go themselves.
I have expanded from just working on Strawberry Perl 5.26 to add 5.22 and 5.32 testing (for my PDF::Builder, PDF::Table, and Text::KnuthPlass packages). Not unexpectedly, 5.22 fails in the same way, but IPC::Run on Perl 5.32 passes. Therefore, the problem appears to be potentially fixable. Now, the question is, are there any plans to make IPC::Run install correctly on Perl versions earlier than 5.32? Or is there some minimum Perl level > 5.26 that we shouldn't expect it to work on any longer, in which case IPC::Run should specify a minimum Perl level.
Again, I don't have the time or interest to go digging through IPC::Run and try to fix it, however, if a developer lacks a Windows system to test on, I would be happy to collaborate by test-installing modified and/or instrumented IPC::Run packages and returning the results. Let me know, if interested.
P.S. I'd like to add "Build Report" and "Windows" labels, but for some reason "Labels" is inactive for me (repository owner only?).
Tried with the latest 20220807.0, and it still fails. This is the Windows 10, Strawberry Perl 5.32 attempt; 5.24 and 5.26 appear to be much the same. Note that per my earlier note, it appeared that 5.32 installed correctly (then), but clearly doesn't now.
CPAN: CPAN::SQLite loaded ok (v0.219)
Database was generated on Sun, 07 Aug 2022 15:23:54 GMT
Running install for module 'IPC::Run'
CPAN: HTTP::Tiny loaded ok (v0.082)
CPAN: Net::SSLeay loaded ok (v1.92)
CPAN: IO::Socket::SSL loaded ok (v2.069)
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/T/TO/TODDR/IPC-Run-20220807.0.tar.gz
CPAN: Digest::SHA loaded ok (v6.02)
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/T/TO/TODDR/CHECKSUMS
CPAN: Compress::Zlib loaded ok (v2.201)
Checksum for C:\Strawberry\cpan\sources\authors\id\T\TO\TODDR\IPC-Run-20220807.0.tar.gz ok
CPAN: Archive::Tar loaded ok (v2.40)
CPAN: YAML::XS loaded ok (v0.83)
CPAN: CPAN::Meta::Requirements loaded ok (v2.140)
CPAN: Parse::CPAN::Meta loaded ok (v2.150010)
CPAN: CPAN::Meta loaded ok (v2.150010)
CPAN: Module::CoreList loaded ok (v5.20220720)
Configuring T/TO/TODDR/IPC-Run-20220807.0.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a gmake-style Makefile
Writing Makefile for IPC::Run
Writing MYMETA.yml and MYMETA.json
TODDR/IPC-Run-20220807.0.tar.gz
C:\Strawberry\perl\bin\perl.exe Makefile.PL -- OK
Running make for T/TO/TODDR/IPC-Run-20220807.0.tar.gz
---- Unsatisfied dependencies detected during ----
---- TODDR/IPC-Run-20220807.0.tar.gz ----
IO::Pty [requires,optional]
cp lib/IPC/Run.pm blib\lib\IPC\Run.pm
cp lib/IPC/Run/Win32IO.pm blib\lib\IPC\Run\Win32IO.pm
cp lib/IPC/Run/Win32Process.pm blib\lib\IPC\Run\Win32Process.pm
cp lib/IPC/Run/Win32Pump.pm blib\lib\IPC\Run\Win32Pump.pm
cp lib/IPC/Run/IO.pm blib\lib\IPC\Run\IO.pm
cp lib/IPC/Run/Win32Helper.pm blib\lib\IPC\Run\Win32Helper.pm
cp lib/IPC/Run/Debug.pm blib\lib\IPC\Run\Debug.pm
cp lib/IPC/Run/Timer.pm blib\lib\IPC\Run\Timer.pm
TODDR/IPC-Run-20220807.0.tar.gz
C:\Strawberry\c\bin\gmake.exe -- OK
Running make test for TODDR/IPC-Run-20220807.0.tar.gz
"C:\Strawberry\perl\bin\perl.exe" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/adopt.t ............................ skipped: adopt not implemented yet
t/autoflush.t ........................ ok
t/autovivifyfh.t ..................... ok
t/binmode.t .......................... ok
t/bogus.t ............................ ok
t/child_fd_inadvertently_closed.t .... Can't spawn a subroutine on Win32 at t/child_fd_inadvertently_closed.t line 60.
No command before '3<' at t/child_fd_inadvertently_closed.t line 60.
Unexpected SCALAR(0x2bab6d0) in harness() parameter 7 at t/child_fd_inadvertently_closed.t line 60.
# Looks like your test exited with 25 before it could output anything.
t/child_fd_inadvertently_closed.t .... Dubious, test returned 25 (wstat 6400, 0x1900)
Failed 1/1 subtests
t/eintr.t ............................ No such signal: SIGUSR1 at t/eintr.t line 28.
t/eintr.t ............................ skipped: can't deliver a signal on this platform
t/filter.t ........................... ok
t/harness.t .......................... ok
t/io.t ............................... ok
t/kill_kill.t ........................ skipped: Temporarily ignoring test failure on Win32
t/parallel.t ......................... skipped: Parallel tests are dangerous on MSWin32
t/parent_and_child_fds_match.t ....... 1/3 # Looks like your test exited with 9 just after 1.
t/parent_and_child_fds_match.t ....... Dubious, test returned 9 (wstat 2304, 0x900)
Failed 2/3 subtests
t/pty.t .............................. skipped: IO::Pty not installed
t/pump.t ............................. ok
t/readonly.t ......................... Cannot run cmd /C echo Hello: '"echo"' is not recognized as an internal or external command,
operable program or batch file.
t/readonly.t ......................... Dubious, test returned 2 (wstat 512, 0x200)
No subtests run
t/run.t .............................. ok
t/run_stdin-callback-return-array.t .. ok
t/signal.t ........................... skipped: Skipping on Win32
t/timeout.t .......................... 26/26 Warning: unable to close filehandle GEN25 properly: Bad file descriptor during global destruction.
Warning: unable to close filehandle GEN15 properly: Bad file descriptor during global destruction.
t/timeout.t .......................... ok
t/timer.t ............................ ok
t/utf8.t ............................. skipped: no cat on Windows
t/win32_compile.t .................... ok
t/win32_newlines.t ................... 1/10
# Failed test '"\n" - child got clean input'
# at t/win32_newlines.t line 42.
# got: '"\r\n"'
# expected: '"\n"'
t/win32_newlines.t ................... 7/10
# Failed test '"\r\n" - parent received clean child output'
# at t/win32_newlines.t line 42.
# got: '"\n"'
# expected: '"\r\n"'
t/win32_newlines.t ................... 9/10
# Failed test '"\n\r" - child got clean input'
# at t/win32_newlines.t line 42.
# got: '"\r\n\r"'
# expected: '"\n\r"'
# Looks like you failed 3 tests of 10.
t/win32_newlines.t ................... Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/10 subtests
t/windows_search_path.t .............. ok
Test Summary Report
-------------------
t/child_fd_inadvertently_closed.t (Wstat: 6400 (exited 25) Tests: 0 Failed: 0)
Non-zero exit status: 25
Parse errors: Bad plan. You planned 1 tests but ran 0.
t/parent_and_child_fds_match.t (Wstat: 2304 (exited 9) Tests: 1 Failed: 0)
Non-zero exit status: 9
Parse errors: Bad plan. You planned 3 tests but ran 1.
t/readonly.t (Wstat: 512 (exited 2) Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: No plan found in TAP output
t/win32_newlines.t (Wstat: 768 (exited 3) Tests: 10 Failed: 3)
Failed tests: 3, 8-9
Non-zero exit status: 3
Files=25, Tests=697, 63 wallclock secs ( 0.20 usr + 0.17 sys = 0.38 CPU)
Result: FAIL
Failed 4/25 test programs. 3/697 subtests failed.
gmake: *** [Makefile:889: test_dynamic] Error 255
TODDR/IPC-Run-20220807.0.tar.gz
C:\Strawberry\c\bin\gmake.exe test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
reports TODDR/IPC-Run-20220807.0.tar.gz
Stopping: 'install' failed for 'IPC::Run'.
I don't have the time or experience with this area to dive deeply into it, but am willing to help out by test-installing test packages.
I am also getting test failures building this module (v 20220807) on Windows 10 under perl 5.36. My only failures were:
t/win32_newlines.t .. 1/10
# Failed test '"\n" - child got clean input'
# at t/win32_newlines.t line 43.
# got: '"\r\n"'
# expected: '"\n"'
t/win32_newlines.t .. 7/10
# Failed test '"\r\n" - parent received clean child output'
# at t/win32_newlines.t line 43.
# got: '"\n"'
# expected: '"\r\n"'
# Failed test '"\n\r" - child got clean input'
# at t/win32_newlines.t line 43.
# got: '"\r\n\r"'
# expected: '"\n\r"'
# Looks like you failed 3 tests of 10.
t/win32_newlines.t .. Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/10 subtests
The Windows situation indeed needs work. There's an opportunity to help by
discovering the root cause of a test case failure. Consider approaching that by
studying the output of IPCRUNDEBUG
.
https://github.com/nmisch/IPC-Run/runs/7781033299 is an example of running the
suite that way. (If you spend considerable time root-causing one test, I
recommend opening a GitHub issue. That way, others can see you're working on
that particular test case and avoid duplicating the work.)
Here's a little bit of help for you. I ran the t-tests from 20220807 against the version I have installed (0.96).
t/child_fd_inadvertently_closed.t .... Can't spawn a subroutine on Win32 at t/child_fd_inadvertently_closed.t line 60.
No command before '3<' at t/child_fd_inadvertently_closed.t line 60.
Unexpected SCALAR(0x2bab6d0) in harness() parameter 7 at t/child_fd_inadvertently_closed.t line 60.
# Looks like your test exited with 25 before it could output anything.
t/child_fd_inadvertently_closed.t .... Dubious, test returned 25 (wstat 6400, 0x1900)
Failed 1/1 subtests
20220807 gives the same result as 0.96. At line 60, @_ is empty array (parent() called with no parms). @ args is 4 elements long: $child call args: ( 3< C:\Users\Phil\AppData\Local\Temp\ZVulaEkbhH 4< C:\Users\Phil\AppData\Local\Temp\NPYLwsDc47 ), '2>', $error I take it that $child is looking for input on fd 3 and fd 4? I'm not sure where a 'command' is missing here... I notice that GitHub CI (Actions) skips Windows... shouldn't therefore we skip for install on a Windows platform? Change:
plan skip_all => 'This test fails on Win32.' if $ENV{GITHUB_WINDOWS_TESTING} or $^O eq 'MSWin32';
unless the objective is to run on Windows!
t/parent_and_child_fds_match.t ....... 1/3 # Looks like your test exited with 9 just after 1.
t/parent_and_child_fds_match.t ....... Dubious, test returned 9 (wstat 2304, 0x900)
Failed 2/3 subtests
20220807 gives the same result 0.96. BEGIN skips GitHub Win32, should it also skip Windows install... unless the objective is to run on Windows?
BEGIN {
if($ENV{GITHUB_WINDOWS_TESTING} or $^O eq 'MSWin32') {
print "1..0 # SKIP This test fails on Win32.\n";
exit 0;
}
}
It died in IPC::Run::start(), not sure where in there.
t/readonly.t ......................... Cannot run cmd /C echo Hello: '"echo"' is not recognized as an internal or external command,
operable program or batch file.
t/readonly.t ......................... Dubious, test returned 2 (wstat 512, 0x200)
No subtests run
I'm not sure what's going on here. 'echo' is certainly a legit command in Windows. The test runs OK on 0.96, but fails on 20220807.
t/timeout.t .......................... 26/26 Warning: unable to close filehandle GEN25 properly: Bad file descriptor during global destruction.
Warning: unable to close filehandle GEN15 properly: Bad file descriptor during global destruction.
Running on 0.96, I get "ok" on 1..14, "terminated on SIGBREAK" for 15..18, and no output on 19..26. What is expected here?
t/win32_newlines.t ................... 1/10
# Failed test '"\n" - child got clean input'
# at t/win32_newlines.t line 42.
# got: '"\r\n"'
# expected: '"\n"'
t/win32_newlines.t ................... 7/10
# Failed test '"\r\n" - parent received clean child output'
# at t/win32_newlines.t line 42.
# got: '"\n"'
# expected: '"\r\n"'
t/win32_newlines.t ................... 9/10
# Failed test '"\n\r" - child got clean input'
# at t/win32_newlines.t line 42.
# got: '"\r\n\r"'
# expected: '"\n\r"'
# Looks like you failed 3 tests of 10.
t/win32_newlines.t ................... Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/10 subtests
20220807 gives the same result 0.96 (sub tests 3, 8, and 9 failed) Again, another one that skips on GitHub Windows. As this test is intended to run (only) on Windows, it's clearly skipping the Actions test because they fail, so for the time being the whole test should probably be skipped unconditionally.
plan skip_all => 'Skipping on Win32' if $ENV{GITHUB_WINDOWS_TESTING} or $^O eq 'MSWin32';
3: '\n' report_in=1 (child) expected \n, received \r\n
8: '\r\n' report_in=0 (parent) expected \r\n, received \n
9: '\n\r' report_in=1 (child) expected \n\r, received \r\n\r
The .t test code looks OK; we need to look deeply into package code to see why \r's are being added or dropped.
For those failed tests which skip Windows on GitHub Actions (CI), was that just to get through failing tests, and the intent is some day to successfully test on Windows? Even so, until these Windows tests are fixed, shouldn't the failing tests also be skipped on a Windows install (not just Actions)? They're holding up the installs and upgrades. Some may legitimately need Windows to be skipped (i.e., it makes no sense to try them with Windows), but I don't know which ones. I don't use IPC::Run (I'm only trying to clean up my regular upgrade cycle), so I know very little about the subject (but I'd be happy to help test revised install images). Can someone help out here, to at least figure out which tests (if any) should be completely skipped for Windows?
Thank you. I've now got a patch for these working, though I still need to write the comments and other English parts. https://github.com/nmisch/IPC-Run/commit/982bc89cc748c8a12d778d9440c754a1a6688dc2 is the draft.
Running on 0.96, I get "ok" on 1..14, "terminated on SIGBREAK" for 15..18, and no output on 19..26. What is expected here?
I don't know. timeout.t and timer.t both passed 250 iterations in GitHub Actions, so I'm assuming they're now fine on Windows.
These are 20220807 t-tests running on 0.96 code, so maybe there's some incompatibility between the new t-tests and the old code? Anyway, if there's anything I can run for you (test patched versions, etc.) to diagnose this, please let me know.
That, or the newer tests detect some bug present in 0.96. I've pushed the fix.
The latest (20231003) IPC::Run now installs (thank you); however, an optional installation of IO::Tty fails:
TODDR/IPC-Run-20231003.0.tar.gz
C:\STRAWB~1\c\bin\gmake.exe install UNINST=1 -- OK
Running install for module 'IO::Pty'
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/T/TO/TODDR/IO-Tty-1.17.tar.gz
Checksum for C:\STRAWB~1\cpan\sources\authors\id\T\TO\TODDR\IO-Tty-1.17.tar.gz ok
Configuring T/TO/TODDR/IO-Tty-1.17.tar.gz with Makefile.PL
This module requires a POSIX compliant system to work. Try cygwin if you need this module on windows
OS unsupported at Makefile.PL line 6.
Warning: No success on command[C:\Strawberry\perl\bin\perl.exe Makefile.PL]
TODDR/IO-Tty-1.17.tar.gz
C:\Strawberry\perl\bin\perl.exe Makefile.PL -- NOT OK
Failed during this command:
(optional) TODDR/IO-Tty-1.17.tar.gz : writemakefile NO 'C:\Strawberry\perl\bin\perl.exe Makefile.PL' returned status 65280
Just thought you should be aware of this. Possibly it should avoid trying to install it on Windows? I'm still on Windows 10, Perl 5.26, 5.32, and 5.38.
Probably so. I've not learned the idiomatic way to represent that situation in Makefile.PL
and cpanfile
. Incidentally, another weakness in those files today is that the cpan
client installs the optional dependencies after IPC::Run. The IPC::Run test suite skips the tests that depend on IO::Pty
and Readonly
, and cpan
installs those modules moments later. I'd gladly review a pull request addressing either issue.
I've not learned the idiomatic way to represent that situation in
Makefile.PL
.
I've seen Makefile.PLs look at the OS ($^O) and if it's "MSWin32", build the install dependencies list differently from non-Windows platforms. Of course, this is in the Perl wrapper that calls MakeMaker or whatever you're using to generate the actual Makefile from within Makefile.PL. The real Makefile is the output from this step, and will (or not) call for the building of various dependencies.
When attempting to upgrade from 0.96 to 20200505.0 (Strawberry Perl 5.26.1, Windows 10), here are the test results:
t/timeout.t now passes (see #98), but now there are a couple other tests failing. In addition, there are some warnings for other tests that will need to be looked at.
If I can help out by attempting installs on Windows and returning the results to you, please don't hesitate to ask. You could send me a .tar or .tar.gz file, and I can unpack it into a directory and kick off 'cpan .' to run it.