#                                                                    -*-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 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;
