On Sun, 2012-01-29 at 22:18 +0100, Thien-Thi Nguyen wrote: > () Paul Smith <psm...@gnu.org> > () Sun, 29 Jan 2012 10:54:18 -0500 > > $ cat g1.mk > define show > (define (show s) > (display s) > (newline)) > endef > $(info define display) > $(guile $(show)) > $(info after define) > $(guile (show "HI")) # this one > all:; > > I don't know what this means, or how to proceed with debugging. > > What happens if you change the marked line to: > > $(guile (map object->string > (list show > current-output-port > (current-output-port)))) > > ? I would also try simply ‘$(guile show)’, but remember faintly > that such a type would cause an error. Thinking along these lines > some more, the problem is perhaps with the return value of ‘show’, > which is the return value of calling ‘newline’, which is probably > unspecified. > > As for 1.8 vs 2.0, i dare not speculate.
Sorry for being unclear. What I was trying to indicate by having the $(info ...) lines there is that the error is actually generated when the (define ...) is parsed, NOT when the function is invoked. In fact I can remove the invocation and still get the errors: $ cat /tmp/g2.mk define show (define (show s) (display s) (newline)) endef $(info define display) $(guile $(show)) $(info after define) all:; $ ./make -f /tmp/g2.mk define display Backtrace: In ice-9/boot-9.scm: 162: 5 [catch #t #<catch-closure 19a45c0> ...] 170: 4 [#<procedure 19a7cd0 ()>] In unknown file: ?: 3 [catch-closure] In ice-9/eval.scm: 389: 2 [eval # #] 374: 1 [eval # #] In unknown file: ?: 0 [scm-error misc-error #f ...] ERROR: In procedure scm-error: ERROR: Unknown object: #<variable 19bf180 value: #<procedure 19a85a0 at ice-9/eval.scm:378:13 (a)>> after define make: `all' is up to date. I can also (define ...) a function which is entirely numeric (for example the Fibonacci calculator in the test suite) so there's no issue with string return values or ports or anything like that: $ cat /tmp/g3.mk # Define the "fib" function in Guile define fib ;; A procedure for counting the n:th Fibonacci number ;; See SICP, p. 37 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) endef $(guile $(fib)) x:; $ ./make -f /tmp/g3.mk Backtrace: In ice-9/boot-9.scm: 162: 5 [catch #t #<catch-closure add5c0> ...] 170: 4 [#<procedure ae0cd0 ()>] In unknown file: ?: 3 [catch-closure] In ice-9/eval.scm: 389: 2 [eval # #] 374: 1 [eval # #] In unknown file: ?: 0 [scm-error misc-error #f ...] ERROR: In procedure scm-error: ERROR: Unknown object: #<variable afed00 value: #<procedure ae5630 at ice-9/eval.scm:378:13 (a)>> make: `x' is up to date. As you can see I'm not actually calling these functions at all; simply defining them is enough to cause the error. Again these all work perfectly with Guile 1.8. -- ------------------------------------------------------------------------------- Paul D. Smith <psm...@gnu.org> Find some GNU make tips at: http://www.gnu.org http://make.mad-scientist.net "Please remain calm...I may be mad, but I am a professional." --Mad Scientist