#                                                                    -*-perl-*-

$description = 'Test the $(guile ...) function.';

$details = 'This only works on systems that support it.';

# If this instance of make doesn't support GNU Guile, skip it
# This detects if guile is loaded using the "load" directive
# $makefile = get_tmpfile();
# open(MAKEFILE, "> $makefile") || die "Failed to open $makefile: $!\n";
# print MAKEFILE q!
# -load guile
# all: ; @echo $(filter guile,$(.LOADED))
# !;
# close(MAKEFILE) || die "Failed to write $makefile: $!\n";
# $cmd = subst_make_string("#MAKEPATH# -f $makefile");
# $log = get_logfile(0);
# $code = run_command_with_output($log, $cmd);
# read_file_into_string ($log) eq "guile\n" and $FEATURES{guile} = 1;

# If we don't have Guile support, never mind.
exists $FEATURES{guile} or return -1;

# Verify simple data type conversions
# Currently we don't support vectors:
#    echo '$(guile (vector 1 2 3))'; \
run_make_test(q!
x:;@echo '$(guile #f)'; \
    echo '$(guile #t)'; \
    echo '$(guile #\c)'; \
    echo '$(guile 1234)'; \
    echo '$(guile 'foo)'; \
    echo '$(guile "bar")'; \
    echo '$(guile (cons 'a 'b))'; \
    echo '$(guile '(a b (c . d) 1 (2) 3))'
!,
              '', "\n#t\nc\n1234\nfoo\nbar\na b\na b c d 1 2 3");

# Verify guile functions in variables -- SV 43378
run_make_test(q!
res := $(guile #f) \
       $(guile #t) \
       $(guile #\c) \
       $(guile 1234) \
       $(guile 'foo) \
       $(guile "bar") \
       $(guile (cons 'a 'b)) \
       $(guile '(a b (c . d) 1 (2) 3))
x:;@echo '$(res)'
!,
              '', " #t c 1234 foo bar a b a b c d 1 2 3");

# Verify the gmk-expand function
run_make_test(q!
VAR = $(guile (gmk-expand "$(shell echo hi)"))
x:;@echo '$(VAR)'
!,
              '', "hi");

# Verify the gmk-eval function
# Prove that the string is expanded only once (by eval)
run_make_test(q!
TEST = bye
EVAL = VAR = $(TEST) $(shell echo there)
$(guile (gmk-eval "$(value EVAL)"))
TEST = hi
x:;@echo '$(VAR)'
!,
              '', "hi there");

# Verify the gmk-eval function with a list
run_make_test(q!
$(guile (gmk-eval '(VAR = 1 (2) () 3)))
x:;@echo '$(VAR)'
!,
              '', "1 2 3");

# Verify the gmk-var function
run_make_test(q!
VALUE = hi $(shell echo there)
VAR = $(guile (gmk-var "VALUE"))
x:;@echo '$(VAR)'
!,
              '', "hi there");

# Verify the gmk-var function with a symbol
run_make_test(q!
VALUE = hi $(shell echo there)
VAR = $(guile (gmk-var 'VALUE))
x:;@echo '$(VAR)'
!,
              '', "hi there");

# Write a Guile program using define and run it
run_make_test(q!
# 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))

# Now run it
x:;@echo $(guile (fib $(FIB)))
!,
              'FIB=10', "55");

1;
