sionescu / iolib

Common Lisp I/O library
http://common-lisp.net/project/iolib/
MIT License
141 stars 31 forks source link

External proc exits with code 1 #13

Closed gabriel-laddel closed 9 years ago

gabriel-laddel commented 10 years ago

Related to Issue #10, (ql:quickload 'iolib) fails on the following configuration unless libfixposix-dev is installed.

Output from apt-cache search libfixposix (when ibfixposix0 is installed this exception gets thrown)

libfixposix-dev - Replacement for inconsistent parts of POSIX (development)
libfixposix0 - Replacement for inconsistent parts of POSIX (runtime)

How is this issue (external dependency is borked) generally handled within the CL community? I didn't see anything related to it on the wiki page for systems programming. (http://www.cliki.net/system%20programming)

Is it appropriate to prompt the user, via an exception, that they should install such and such program on such and such systems?

Machine & Lisp information:

{:os-info "Distributor ID:  Ubuntu
           Description: Ubuntu 13.10
           Release: 13.10
           Codename:    saucy"
:machine-type "X86-64"
:machine-version "Intel(R) Celeron(R) CPU B800 @ 1.50GHz"
:software-type "Linux"
:software-version "3.11.0-12-generic"
:lisp-implementation-type "SBCL"
:lisp-implementation-version "1.1.17.9-4e815e8"}

Stacktrace:

External process exited with code 1.
Command was: "g++" "-m64" "-Wno-write-strings" "-I/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/grovel/" "-o" "/home/francis/.cache/common-lisp/sbcl-1.1.17.9-4e815e8-linux-x64/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/syscalls/ffi-types-unix" "/home/francis/.cache/common-lisp/sbcl-1.1.17.9-4e815e8-linux-x64/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/syscalls/ffi-types-unix.c"
Output was:
/home/francis/.cache/common-lisp/sbcl-1.1.17.9-4e815e8-linux-x64/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/syscalls/ffi-types-unix.c:6:0: warning: "_GNU_SOURCE" redefined [enabled by default]
 #define _GNU_SOURCE
 ^
<command-line>:0:0: note: this is the location of the previous definition
/home/francis/.cache/common-lisp/sbcl-1.1.17.9-4e815e8-linux-x64/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/syscalls/ffi-types-unix.c:10:17: fatal error: lfp.h: No such file or directory
 #include <lfp.h>
                 ^
compilation terminated.
   [Condition of type SIMPLE-ERROR]

Restarts:
 0: [RETRY] Retry PROCESS-OP on #<GROVEL-FILE "iolib/syscalls" "ffi-types">.
 1: [ACCEPT] Continue, treating PROCESS-OP on #<GROVEL-FILE "iolib/syscalls" "ffi-types"> as having been successful.
 2: [ABORT] Give up on "iolib"
 3: [RETRY] Retry SLIME REPL evaluation request.
 4: [*ABORT] Return to SLIME's top level.
 5: [ABORT] Abort thread (#<THREAD "repl-thread" RUNNING {10066182C3}>)

Backtrace:
  0: (IOLIB-GROVEL::INVOKE #<unavailable argument> "-m64" "-Wno-write-strings" "-I/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/grovel/" "-o" "/home/francis/.cache/common-lisp/sbc..
      Locals:
        ARGS = ("-m64" "-Wno-write-strings" "-I/home/francis/quicklisp/dists/quicklisp/software/iolib-20140425-git/src/grovel/" "-o" ..)
  1: ((LAMBDA NIL :IN IOLIB-GROVEL:PROCESS-GROVEL-FILE))
      [No Locals]
  2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN IOLIB-GROVEL:PROCESS-GROVEL-FILE) {100A079E1B}>)
      Locals:
        SB-DEBUG::ARG-0 = #<CLOSURE (LAMBDA () :IN IOLIB-GROVEL:PROCESS-GROVEL-FILE) {100A079E1B}>
  3: ((:METHOD ASDF/ACTION:PERFORM (IOLIB-GROVEL::PROCESS-OP IOLIB-GROVEL:GROVEL-FILE)) #<IOLIB-GROVEL::PROCESS-OP > #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">) [fast-method]
      Locals:
        SB-DEBUG::ARG-2 = #<IOLIB-GROVEL::PROCESS-OP >
        SB-DEBUG::ARG-3 = #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">
  4: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unavailable argument> #<unavailable argument> #<IOLIB-GROVEL::PROCESS-OP > #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">)
      Locals:
        SB-DEBUG::ARG-2 = #<IOLIB-GROVEL::PROCESS-OP >
        SB-DEBUG::ARG-3 = #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">
  5: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<IOLIB-GROVEL::PROCESS-OP > #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">) [fast-method]
      Locals:
        SB-DEBUG::ARG-1 = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (T T))> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (2))
        SB-DEBUG::ARG-2 = #<IOLIB-GROVEL::PROCESS-OP >
        SB-DEBUG::ARG-3 = #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">
  6: ((:METHOD ASDF/PLAN:PERFORM-PLAN (LIST)) ((#<IOLIB-GROVEL::PROCESS-OP > . #1=#<IOLIB-GROVEL:GROVEL-FILE #2="iolib/syscalls" "ffi-types">) (#3=#<ASDF/LISP-ACTION:COMPILE-OP > . #1#) (#4=#<ASDF/LISP-ACT..
      Locals:
        #:FORCE-DEFAULTING-TEMP = NIL
        ASDF/PLAN::STEPS = ((#<IOLIB-GROVEL::PROCESS-OP > . #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">) (#<ASDF/LISP-ACTION:COMPILE-OP > . #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">) ..)
  7: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
      [No Locals]
  8: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) ((#<IOLIB-GROVEL::PROCESS-OP > . #1=#<IOLIB-GROVEL:GROVEL-FILE #2="iolib/syscalls" "ffi-types">) (#3=#<ASDF/LISP-ACTION:COMPILE-OP > . #1#) (#4=#<ASDF/LIS..
      Locals:
        SB-PCL::.NEXT-METHOD-CALL. = #S(SB-PCL::FAST-METHOD-CALL ..)
        SB-PCL::.REST-ARG. = (:VERBOSE NIL)
        ASDF/PLAN::PLAN = ((#<IOLIB-GROVEL::PROCESS-OP > . #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">) (#<ASDF/LISP-ACTION:COMPILE-OP > . #<IOLIB-GROVEL:GROVEL-FILE "iolib/syscalls" "ffi-types">) ..)
  9: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
      [No Locals]
 10: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1009144463}> :VERBOSE NIL) [fast-method]
      Locals:
        SB-PCL::.NEXT-METHOD-CALL. = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD ASDF/PLAN:PERFORM-PLAN (T))> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (1 . T))
        SB-PCL::.REST-ARG. = (:VERBOSE NIL)
        ASDF/PLAN::PLAN = #<ASDF/PLAN:SEQUENTIAL-PLAN {1009144463}>
 11: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "iolib"> :VERBOSE NIL) [fast-method]
      Locals:
        ASDF/COMPONENT:COMPONENT = #<ASDF/SYSTEM:SYSTEM "iolib">
        ASDF/OPERATION:OPERATION = #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL>
        #:PLAN-CLASS-DEFAULTING-TEMP = NIL
        #:REST-CONTEXT-13103 = 70368531868588
        #:REST-COUNT-13104 = 2
        SB-DEBUG::MORE = (:VERBOSE NIL)
 12: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "iolib"> :VERBOSE NIL)
      Locals:
        SB-PCL::.ARG0. = #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL>
        SB-PCL::.ARG1. = #<ASDF/SYSTEM:SYSTEM "iolib">
        SB-PCL::.DFUN-MORE-CONTEXT. = 70368531868628
        SB-PCL::.DFUN-MORE-COUNT. = 2
        SB-DEBUG::MORE = (:VERBOSE NIL)
 13: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
      [No Locals]
 14: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "iolib"> :VERBOSE NIL) [fast-method]
      Locals:
        SB-PCL::.NEXT-METHOD-CALL. = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<CLOSURE (SB-PCL::EMF ASDF/OPERATE:OPERATE) {100570172B}> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (2 . T))
        SB-PCL::.REST-ARG. = (:VERBOSE NIL)
        ASDF/COMPONENT:COMPONENT = #<ASDF/SYSTEM:SYSTEM "iolib">
        ASDF/OPERATION:OPERATION = #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL>
 15: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "iolib" :VERBOSE NIL)
      Locals:
        SB-PCL::.ARG0. = ASDF/LISP-ACTION:LOAD-OP
        SB-PCL::.ARG1. = "iolib"
        SB-PCL::.DFUN-MORE-CONTEXT. = 70368531868784
        SB-PCL::.DFUN-MORE-COUNT. = 2
        SB-DEBUG::MORE = (:VERBOSE NIL)
 16: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
      [No Locals]
 17: (ASDF/CACHE:CALL-WITH-ASDF-CACHE #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {10090C628B}> :OVERRIDE NIL)
      Locals:
        #:OVERRIDE-DEFAULTING-TEMP = NIL
        THUNK = #<CLOSURE (LAMBDA () :IN ASDF/OPERATE:OPERATE) {10090C628B}>
 18: (ASDF/FIND-SYSTEM::CALL-WITH-SYSTEM-DEFINITIONS #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {10090C628B}>)
      Locals:
        SB-DEBUG::ARG-0 = #<CLOSURE (LAMBDA () :IN ASDF/OPERATE:OPERATE) {10090C628B}>
 19: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "iolib" :VERBOSE NIL) [fast-method]
      Locals:
        SB-PCL::.NEXT-METHOD-CALL. = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<CLOSURE (SB-PCL::EMF ASDF/OPERATE:OPERATE) {10057016DB}> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (2 . T))
        SB-PCL::.REST-ARG. = (:VERBOSE NIL)
        ASDF/COMPONENT:COMPONENT = "iolib"
        ASDF/OPERATION:OPERATION = ASDF/LISP-ACTION:LOAD-OP
 20: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "iolib" :VERBOSE NIL) [fast-method]
      Locals:
        SB-PCL::.NEXT-METHOD-CALL. = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<CLOSURE (SB-PCL::EMF ASDF/OPERATE:OPERATE) {10057016DB}> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (2 . T))
        SB-PCL::.REST-ARG. = (:VERBOSE NIL)
        ASDF/COMPONENT:COMPONENT = "iolib"
        ASDF/OPERATION:OPERATION = ASDF/LISP-ACTION:LOAD-OP
 21: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {100907F70B}>)
      Locals:
        SB-DEBUG::ARG-0 = #<CLOSURE (LAMBDA () :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {100907F70B}>
 22: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "iolib" :PROMPT NIL)
      Locals:
        NAME = "iolib"
        #:PROMPT-DEFAULTING-TEMP = NIL
 23: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unavailable argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1008F736EB}>) [fast-method]
      Locals:
        SB-DEBUG::ARG-3 = #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1008F736EB}>
 24: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {1000C3A7F3}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1008F736EB}>) [fast-me..
      Locals:
        SB-DEBUG::ARG-1 = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T))> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (2))
        SB-DEBUG::ARG-2 = #<QL-IMPL:SBCL {1000C3A7F3}>
        SB-DEBUG::ARG-3 = #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1008F736EB}>
 25: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) #<unavailable argument> :PROMPT NIL :VERBOSE NIL) [fast-method]
      Locals:
        #:N-SUPPLIED-10 = NIL
        #:N-SUPPLIED-9 = NIL
        #:PROMPT-DEFAULTING-TEMP = NIL
        #:VERBOSE-DEFAULTING-TEMP = NIL
 26: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {1008F3858B}>)
 27: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD (QUOTE IOLIB)) #<NULL-LEXENV>)
 28: (EVAL (QUICKLISP-CLIENT:QUICKLOAD (QUOTE IOLIB)))
 29: (SWANK::EVAL-REGION "(ql:quickload 'iolib) ..)
 30: ((LAMBDA NIL :IN SWANK::REPL-EVAL))
 31: (SWANK::TRACK-PACKAGE #<CLOSURE (LAMBDA NIL :IN SWANK::REPL-EVAL) {1008F381AB}>)
 32: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation request." #<CLOSURE (LAMBDA NIL :IN SWANK::REPL-EVAL) {1008F380EB}>)
 33: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA NIL :IN SWANK::REPL-EVAL) {1008F380CB}>)
 34: (SWANK::REPL-EVAL "(ql:quickload 'iolib) ..)
 35: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:LISTENER-EVAL "(ql:quickload 'iolib) ..)
 36: (EVAL (SWANK:LISTENER-EVAL "(ql:quickload 'iolib) ..)
 37: (SWANK:EVAL-FOR-EMACS (SWANK:LISTENER-EVAL "(ql:quickload 'iolib) ..)
 38: (SWANK::PROCESS-REQUESTS NIL)
 39: ((LAMBDA NIL :IN SWANK::HANDLE-REQUESTS))
 40: ((LAMBDA NIL :IN SWANK::HANDLE-REQUESTS))
 41: (SWANK-BACKEND::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SWANK::HANDLE-REQUESTS) {10066300EB}>)
 42: ((FLET SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/francis/quicklisp/dists/quicklisp/software/slime-2.5/swank-sbcl.lisp") #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SWANK::HA..
 43: (SWANK::CALL-WITH-BINDINGS ((*STANDARD-OUTPUT* . #1=#<SWANK-BACKEND::SLIME-OUTPUT-STREAM {10066075A3}>) (*STANDARD-INPUT* . #2=#<SWANK-BACKEND::SLIME-INPUT-STREAM {10066074F3}>) (*TRACE-OUTPUT* . #1#)..
 44: (SWANK::HANDLE-REQUESTS #<SWANK::MULTITHREADED-CONNECTION {1006354723}> NIL)
 45: ((FLET #:WITHOUT-INTERRUPTS-BODY-1226 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
 46: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
 47: ((FLET #:WITHOUT-INTERRUPTS-BODY-660 :IN SB-THREAD::CALL-WITH-MUTEX))
 48: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {7FFFE6B0EBAB}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THR..
 49: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "repl-thread" RUNNING {10066182C3}> #S(SB-THREAD:SEMAPHORE :NAME "Thread setup semaphore" :%COUNT 0 :WAITCOUNT 0 :MUTEX #<SB-THREAD:MU..
 50: ("foreign function: call_into_lisp")
 51: ("foreign function: new_thread_trampoline")
sionescu commented 9 years ago

This issue is not generally handled in any way. You need to manually install the missing dependencies.

sionescu commented 9 years ago

See also my reply in issue #10

etaoinbe commented 8 years ago

ideally quickinstall would handle this all by itself. If not then user should be informed what he needs to do...