Oddities in ECL tests on Linux

Robert Goldman rpgoldman at sift.info
Sun Sep 2 23:16:58 UTC 2018


OK, that makes sense.  These tests were passing for me on the Mac, but 
brew has ECL 16.1.3 instead of 16.1.2.




On 1 Sep 2018, at 7:26, Marius Gerbershagen wrote:

> 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 ecl-devel mailing list