diff options
-rw-r--r-- | gr-run-waveform/Makefile.am | 2 | ||||
-rw-r--r-- | gr-run-waveform/test_embed.c | 45 | ||||
-rw-r--r-- | gr-run-waveform/test_embed.cc | 89 |
3 files changed, 90 insertions, 46 deletions
diff --git a/gr-run-waveform/Makefile.am b/gr-run-waveform/Makefile.am index 6a8bcfe9a..3ab7d6fb2 100644 --- a/gr-run-waveform/Makefile.am +++ b/gr-run-waveform/Makefile.am @@ -50,7 +50,7 @@ test_xyzzy_CPPFLAGS = $(GUILE_CFLAGS) \ test_xyzzy_LDADD = $(GUILE_LIBS) test_xyzzy_DEPENDENCIES = $(BUILT_SOURCES) -test_embed_SOURCES = test_embed.c xyzzy.cc xyzzy-load.c +test_embed_SOURCES = test_embed.cc $(SRCS) test_embed_CPPFLAGS = $(GUILE_CFLAGS) \ -DSRCDIR=\"$(srcdir)\" \ -DPKGLIBDIR=\"$(pkglibdir)\" \ diff --git a/gr-run-waveform/test_embed.c b/gr-run-waveform/test_embed.c deleted file mode 100644 index d3acecb99..000000000 --- a/gr-run-waveform/test_embed.c +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <libguile.h> - -#include "xyzzy.h" - -static void -inner_main (void *data, int argc, char **argv) -{ - xyzzy_init("./filesystem.dat"); - - scm_xyzzy_init(); - - scm_shell (argc, argv); -} - -int -main(int argc, char *argv[]) -{ - scm_boot_guile (argc, argv, inner_main, 0); - - return 0; // never reached -} diff --git a/gr-run-waveform/test_embed.cc b/gr-run-waveform/test_embed.cc new file mode 100644 index 000000000..93c5272a7 --- /dev/null +++ b/gr-run-waveform/test_embed.cc @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2010 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <libguile.h> + +#include "xyzzy.h" + +/* + * Test our embedded version of guile + */ + +static bool +prepend_to_env(const char *name, const char *value) +{ + char *c_old = getenv(name); + std::string new_val; + if (c_old) + new_val = std::string(value) + std::string(":") + std::string(c_old); + else + new_val = std::string(value); + + return setenv(name, new_val.c_str(), 1) == 0; +} + +static const char *code = "\ +;;(set! %load-verbosely #t) \n\ + \n\ +(save-module-excursion \n\ + (lambda () \n\ + (set-current-module (resolve-module '(guile))) \n\ + (set! primitive-load xyzzy-primitive-load) \n\ + (set! primitive-load-path xyzzy-primitive-load-path) \n\ + (set! search-path xyzzy-search-path) \n\ + (set! %search-load-path %xyzzy-search-load-path))) \n\ +"; + +static void +inner_main (void *data, int argc, char **argv) +{ + // Load pseudo filesystem + if (!xyzzy_init("./filesystem.dat")) + exit(1); + + // Initialize our gsubrs + scm_xyzzy_init(); + + // Override standard code with our gsubrs + scm_c_eval_string(code); + + // REPL + scm_shell (argc, argv); +} + +int +main(int argc, char *argv[]) +{ + // kill warnings + setenv("GUILE_WARN_DEPRECATED", "no", 1); + + // where to find our files and libraries + prepend_to_env("GUILE_LOAD_PATH", "/-xyzzy-"); + prepend_to_env("LTDL_LIBRARY_PATH", LIBDIR); + prepend_to_env("DYLD_LIBRARY_PATH", LIBDIR); + + scm_boot_guile (argc, argv, inner_main, 0); + + return 0; // never reached +} |