While narrowing down the problems I was having with maven and cffi, I came across the maven-embedded.lisp file ( https://common-lisp.net/svn/armedbear/branches/1.4.0/contrib/abcl-asdf/maven... ) where I saw the sys:run-program.
I now have ABCL installed on both Linux and Windows, and have problems on both when issuing
#+windows(sys:run-program "where.exe" nil) #+linux(sys:run-program "which" nil)
On Windows, the first call fails, while the second succeeds. On Linux, the call fails, and repeated calls also fail.
Is this just me or can anyone else reproduce this? Thanks.
Transcript of the Windows 10 session (Linux follows)
P:>java -jar c:\mv-program-files\abcl-bin-1.4.0\abcl.jar --noinit Armed Bear Common Lisp 1.4.0 Java 1.8.0_112 Oracle Corporation Java HotSpot(TM) 64-Bit Server VM Low-level initialization completed in 0.274 seconds. Startup completed in 4.28 seconds. Type ":help" for a list of available commands. CL-USER(1): (sys:run-program "which.exe" nil) ;;; *First invocation results in error* Error loading jar:file:C:/mv-program-files/abcl-bin-1.4.0/abcl.jar!/org/armedbear/lisp/run-program.abcl at line 166 (offset 8688) #<THREAD "interpreter" {6A8B2747}>: Debugger invoked on condition of type ERROR Class not found: java.lang.UNIXProcess ;;; *ERROR* Restarts: 0: TOP-LEVEL Return to top level. [1] SYS(2): 0 java.lang.ExceptionInInitializerError
... Java stack elided
Caused by: org.armedbear.lisp.Go Error loading jar:file:C:/mv-program-files/abcl-bin-1.4.0/abcl.jar!/org/armedbear/lisp/run-program.abcl at line 166 (offset 8688) #<THREAD "interpreter" {6A8B2747}>: Debugger invoked on condition of type ERROR Compiled function can't be loaded: org.armedbear.lisp.run_program_49 from org.armedbear.lisp.Pathname@60a4bd75 Restarts: 0: TOP-LEVEL Return to top level. [1] SYS(3): 0 CL-USER(4): (sys:run-program "which.exe" nil) ;;; *Second invocation succeeds* #S(SYSTEM:PROCESS :JPROCESS #<java.lang.ProcessImpl java.lang.ProcessImpl@6aaa6218 {2F20252D}> :%INPUT #S(SYSTEM::SYSTEM-STREAM) :%OUTPUT #S(SYSTEM::SYSTEM-STREAM) :%ERROR #S(SYSTEM::SYSTEM-STREAM)) CL-USER(5):
On Linux I work through Slime. Here is the startup message on a RedHat EL6. I hope my Java patch is recent enough.
Armed Bear Common Lisp 1.4.0 Java 1.6.0_40 Sun Microsystems Inc. OpenJDK 64-Bit Server VM Low-level initialization completed in 0.491 seconds. Startup completed in 2.488 seconds. Using probed value of abcl-contrib: '/usr/local/share/java/abcl-contrib.jar'. Added jar:file:/usr/local/share/java/abcl-contrib.jar!/quicklisp/ to ASDF. Added jar:file:/usr/local/share/java/abcl-contrib.jar!/mvn/ to ASDF. Added jar:file:/usr/local/share/java/abcl-contrib.jar!/jss/ to ASDF. Added jar:file:/usr/local/share/java/abcl-contrib.jar!/jfli/ to ASDF. Added jar:file:/usr/local/share/java/abcl-contrib.jar!/asdf-jar/ to ASDF. Added jar:file:/usr/local/share/java/abcl-contrib.jar!/abcl-asdf/ to ASDF. Loading /home/mv/.abclrc completed in 9.644 seconds. Type ":help" for a list of available commands. CL-USER(1): ; Loading /home/sm/software/slime/swank-loader.lisp ...
Doing (sys:run-program "which" nil) the error backtrace is:
Class not found: java.lang.ProcessBuilder$Redirect [Condition of type ERROR]
Restarts: 0: [RETRY] Retry SLIME REPL evaluation request. 1: [*ABORT] Return to SLIME's top level. 2: [ABORT] Abort thread.
Backtrace: 0: (#<FUNCTION {5A18A372}> #<ERROR {47BE45A7}> #<FUNCTION {5A18A372}>) 1: (APPLY #<FUNCTION {5A18A372}> (#<ERROR {47BE45A7}> #<FUNCTION {5A18A372}>)) 2: (SYSTEM::RUN-HOOK SYSTEM::*INVOKE-DEBUGGER-HOOK* #<ERROR {47BE45A7}> #<FUNCTION {5A18A372}>) 3: (INVOKE-DEBUGGER #<ERROR {47BE45A7}>) 4: org.armedbear.lisp.Lisp.error(Lisp.java:382) 5: org.armedbear.lisp.Java.classForName(Java.java:1299) 6: org.armedbear.lisp.Java.javaClass(Java.java:1332) 7: org.armedbear.lisp.Java.javaClass(Java.java:1306) 8: org.armedbear.lisp.Java.jfield(Java.java:177) 9: org.armedbear.lisp.Java$pf_jfield.execute(Java.java:272) 10: org.armedbear.lisp.Primitive.execute(Primitive.java:123) 11: (JFIELD "java.lang.ProcessBuilder$Redirect" "INHERIT") 12: (SYSTEM:INIT-FASL :VERSION 42) 13: (SYSTEM::%MAKE-PROCESS-BUILDER "which" NIL) 14: (SYSTEM:RUN-PROGRAM "which" NIL) 15: (SYSTEM::%EVAL (SYSTEM:RUN-PROGRAM "which" NIL)) 16: (EVAL (SYSTEM:RUN-PROGRAM "which" NIL))