# -*-perl-*- $description = "Test the shared object load API."; $details = "Verify the different aspects of the shared object API."; # Don't do anything if this system doesn't support "load" exists $FEATURES{load} or return -1; my $sobuild = '$(CC) '.($srcdir? "-I$srcdir":'').' -g -shared -fPIC -o $@ $<'; # First build a shared object # Provide both a default and non-default load symbol unlink(qw(testapi.c testapi.so)); open(my $F, '> testapi.c') or die "open: testapi.c: $!\n"; print $F <<'EOF' ; #include #include #include "gnumake.h" int plugin_is_GPL_compatible; static char * test_eval (const char *buf) { gmk_eval (buf, 0); return NULL; } static char * test_expand (const char *val) { return gmk_expand (val); } static char * test_noexpand (const char *val) { char *str = gmk_alloc (strlen (val)); strcpy (str, val); return str; } static char * func_test (const char *funcname, unsigned int argc, char **argv) { char *mem; if (strcmp (funcname, "test-expand") == 0) return test_expand (argv[0]); if (strcmp (funcname, "test-eval") == 0) return test_eval (argv[0]); if (strcmp (funcname, "test-noexpand") == 0) return test_noexpand (argv[0]); mem = gmk_alloc (sizeof ("unknown")); strcpy (mem, "unknown"); return mem; } int testapi_gmk_setup () { gmk_add_function ("test-expand", func_test, 1, 1, GMK_FUNC_DEFAULT); gmk_add_function ("test-noexpand", func_test, 1, 1, GMK_FUNC_NOEXPAND); gmk_add_function ("test-eval", func_test, 1, 1, GMK_FUNC_DEFAULT); gmk_add_function ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.", func_test, 0, 0, 0); return 1; } EOF close($F) or die "close: testapi.c: $!\n"; run_make_test('testapi.so: testapi.c ; @'.$sobuild, '', ''); # TEST 1 # Check the gmk_expand() function run_make_test(q! EXPAND = expansion all: ; @echo $(test-expand $$(EXPAND)) load testapi.so !, '', "expansion\n"); # TEST 2 # Check the eval operation. Prove that the argument is expanded only once run_make_test(q! load testapi.so TEST = bye ASSIGN = VAR = $(TEST) $(shell echo there) $(test-eval $(value ASSIGN)) TEST = hi all:;@echo '$(VAR)' !, '', "hi there\n"); # TEST 2 # Check the no-expand capability run_make_test(q! load testapi.so TEST = hi all:;@echo '$(test-noexpand $(TEST))' !, '', "\$(TEST)\n"); unlink(qw(testapi.c testapi.so)) unless $keep; # This tells the test driver that the perl test script executed properly. 1;