Oddities in ECL tests on Linux
Marius Gerbershagen
marius.gerbershagen at gmail.com
Sat Sep 1 12:26:02 UTC 2018
The patch works exactly as it should. All it does is to exit the current
process with a return code of 1 if the process lands in the top level
prompt. The tests you mention also failed before on ECL <= 16.1.2, the
difference is just that instead of failing with a nonzero exit code (as
they should), they failed by getting stuck in the top level prompt. As I
already mentioned in the previous discussion, these failures are due to
a bug in ECL, which has already been fixed in the 16.1.3 release.
Am 31.08.2018 um 23:36 schrieb Robert Goldman:
> Unfortunately, this patch doesn't seem to work. Maybe it interferes with
> condition handlers? At any rate, after I insert it into
> script-support.lisp I now get two /new/ test failures in
> package-inferred-system-test.script and
> test-defsystem-depends-on.script. I get a message that
>
> |Top level in: #<process TOP-LEVEL>. ECL unexpectedly landed in the top
> level prompt. Script aborted. Using ecl,
> package-inferred-system-test.script failed |
>
> ...and one like it for the other test. So there were some failures there
> that were correctly caught before that are no longer.
>
> On 31 Aug 2018, at 13:43, Marius Gerbershagen wrote:
>
> Yes, the Ubuntu package definitely should be updated to version 16.1.3
> which fixes the issue. But the ECL developers can't run to the
> maintainer of the ECL package of every linux distribution and ask them
> to upgrade their package each time they make a new release. And even if
> they could, the package maintainers probably wouldn't do it, since some
> other package might depend on an older ECL version.
>
> For the moment, the best solution I can offer you for your problem is a
> dirty hack to prevent older ECL versions from entering the
> interactive REPL:
>
> diff --git a/test/script-support.lisp b/test/script-support.lisp
> index 86b6c1f2..7f72488a 100644
> --- a/test/script-support.lisp
> +++ b/test/script-support.lisp
> @@ -83,6 +83,14 @@ Some constraints:
> (defun ensure-directories-exist (path)
> #+genera (fs:create-directories-recursively (pathname path))))
>
> +;; Dirty hack to prevent buggy ECL versions from landing in the top
> level prompt when they shouldn't
> +#+ecl (when (and (string<= (lisp-implementation-version) "16.1.2")
> + (not *debug-asdf*))
> + (setq si:*tpl-prompt-hook*
> + #'(lambda ()
> + (format *error-output* "ECL unexpectedly landed in
> the top level prompt. Script aborted.~%")
> + (exit-lisp 1))))
> +
> ;;; Survival utilities
> (defun asym (name &optional package errorp)
> (let* ((pname (or package :asdf))
>
>
> Of course since this is only a workaround to prevent the tests from
> stopping, the tests in which ECL would stop without the workaround will
> fail on ECL versions <= 16.1.2.
>
> Am 31.08.2018 um 17:54 schrieb Robert Goldman:
>
> On 31 Aug 2018, at 10:35, Marius Gerbershagen wrote:
>
> This is most likely a bug in ECL. I recommend trying out a newer
> version
> of ecl (16.1.3 or the current develop branch from the git
> repository).
>
> I see your point, but have two comments:
>
> 1.
>
> If this really /is/ an ECL bug, then shouldn't the Ubuntu package be
> updated and fixed? ASDF is supposed to work on the ECL that users
> will have, not only on the one that developers have.
>
> 2.
>
> I don't see a way to get a new ECL except by pulling from Gitlab and
> building. I do not have the time to run around building all
> available lisp implementations from source (and, again, ASDF should
> work on the versions of the implementations that users actually
> have, which means the ones provided by the packaging systems on the
> platforms). I build only SBCL, because that's an implementation I
> build anyway, for my work needs. Faré had the energy to play with
> all the different implementations in a substantial way, but I do
> not.
>
> So if the released version of an implementation is broken, I
> will simply
> regard that implementation as broken. If the /released version/
> of an
> implementation is broken for long enough (I'm looking at you,
> clisp), it
> will become unsupported by ASDF. Unsupported means "patches will be
> accepted, but I will no longer run the tests, and test failure on an
> unsupported implementation will not be a reason to hold up an
> ASDF release."
>
> Note that at the moment /all/ implementations are essentially
> unsupported on Windows, since I have lost my Windows VM, and
> even if I
> got it back, I would have no way to develop on Windows. If you are a
> Windows user and this bothers you, I would be happy to support
> you in
> setting up a test environment, and even more happy to help you
> learn to
> patch ASDF. But even someone who doesn't want to patch ASDF, but who
> would be willing to run the test suite (or help figure out how
> it could
> be run through, e.g., Travis), would be a great help.
>
> Am 30.08.2018 um 21:51 schrieb Robert Goldman:
>
> I'm experimenting with your changes now but, for some reason that I
> don't understand, when I run the tests as |make l=ecl|
> interactively on
> Ubuntu (using the Ubuntu ECL package |16.1.2-3|), signals are
> throwing
> me into the interactive debugger, instead of being caught. I have no
> idea why this started happening, because I used to be able to
> run ECL
> successfully, and I don't believe I have changed the package
> (although
> Ubuntu might have upgraded it).
>
> Actually /usr/bin/ecl is crashing with SIGABRT when running
> programs,
> apparently, on my Ubuntu box. (|SIGABRT in si_run_program()|).
> I'll try
> uninstalling and reinstalling ECL in the hopes that fixes this, but
> unless I get some help, I will not be able to continue testing
> ASDF on
> ECL on Linux.
>
> On 30 Aug 2018, at 13:22, Marius Gerbershagen wrote:
>
> No, I don't think so. The sockets module has been part of ECL since
> version 0.9f from 2005. Please note, that this test can fail
> anyway if
> ECL is built without support for the respective module (be it :rt or
> :sockets). The change only prevents it from failing on a default
> build
> configuration.
>
> Am 30.08.2018 um 19:53 schrieb Robert Goldman:
>
> Thank you very much for these, Marius. I will look into fixing them
> directly. One question - do I need to check for ECL version
> number when
> requiring sockets in the test? I.e., to I need to test with |:rt| in
> older versions and |:sockets| in newer? Or will |:sockets| work
> in older
> versions of ECL, as well?
>
> Best,
> R
>
> On 30 Aug 2018, at 12:46, Marius Gerbershagen wrote:
>
> Harmless in the sense that ECL doesn't crash or throw me in the
> interactive debugger. Besides, the test failures seem to be easily
> fixed. The test-require.script test fails because it tries to
> require
> the :rt module which is deprecated on the develop branch and no
> longer
> build by default. A simple fix is to use the :sockets module
> instead:
>
> diff --git a/test/test-require.script b/test/test-require.script
> index e5f70857..1ef84e8c 100644
> --- a/test/test-require.script
> +++ b/test/test-require.script
> @@ -178,7 +178,7 @@
> #+allegro :sax
> #+clisp (first (remove "asdf" *dynmod-list* :test 'equal))
> #+(or clozure cmucl) :defsystem
> - #+ecl :rt ;; loads faster than :ecl-quicklisp
> + #+ecl :sockets
> #+lispworks "comm"
> #+mkcl :walker
> #+sbcl :sb-md5
>
> The test-program.script test seems to fail to include uiop
> because of an
> error in the linkable-system function. Tracing it shows that the
> function returns nil for the uiop system object,
> 1> (ASDF/BUNDLE::LINKABLE-SYSTEM #<system "uiop">)
> <1 (ASDF/BUNDLE::LINKABLE-SYSTEM NIL)
> which seems to be caused by a missing call to coerce-name:
>
> diff --git a/bundle.lisp b/bundle.lisp
> index 2ff56f93..42034c9f 100644
> --- a/bundle.lisp
> +++ b/bundle.lisp
> @@ -529,7 +529,7 @@ which is probably not what you want; you
> probably
> need to tweak your output tran
> ;; If an ASDF upgrade is available from source, but not a UIOP
> upgrade to that,
> ;; then use the asdf/driver system instead of
> ;; the UIOP that was disabled by check-not-old-asdf-system.
> - (if-let (s (and (equal x "uiop") (output-files 'lib-op "asdf")
> (find-system "asdf/driver")))
> + (if-let (s (and (equal (coerce-name x) "uiop") (output-files
> 'lib-op "asdf") (find-system "asdf/driver")))
> (and (output-files 'lib-op s) s))
> ;; If there was no source upgrade, look for modules provided by
> the implementation.
> (if-let (p (system-module-pathname (coerce-name x)))
>
>
> Am 29.08.2018 um 01:22 schrieb Faré:
>
> I can't reproduce this, for me the tests run fine without
> being thrown
> in the debugger. I only get two harmlessly looking test failures
> (test-program.script and test-require.script).
>
> No test failure is harmless. The test-program.script failure is what
> Robert saw, that I can reproduce. I didn't reproduce a failure with
> test-require. I had more problems with ECL from the develop branch,
> but maybe it was a bad idea to use the develop branch.
>
> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics•
> http://fare.tunes.org
> There are two kinds of people, those who do the work
> and those who take the credit. Try to be in the first group;
> there is less competition there
> — Indira Gandhi.
>
More information about the asdf-devel
mailing list