summaryrefslogtreecommitdiff
path: root/gr-howto-write-a-block
diff options
context:
space:
mode:
Diffstat (limited to 'gr-howto-write-a-block')
-rw-r--r--gr-howto-write-a-block/Makefile.common3
-rw-r--r--gr-howto-write-a-block/config/gr_standalone.m47
-rw-r--r--gr-howto-write-a-block/configure.ac8
-rw-r--r--gr-howto-write-a-block/setup_guile_test_env.in140
-rw-r--r--gr-howto-write-a-block/swig/Makefile.am9
-rw-r--r--gr-howto-write-a-block/swig/howto.test69
-rw-r--r--gr-howto-write-a-block/swig/run_guile_tests.in14
7 files changed, 248 insertions, 2 deletions
diff --git a/gr-howto-write-a-block/Makefile.common b/gr-howto-write-a-block/Makefile.common
index f751532edb..fca6133c14 100644
--- a/gr-howto-write-a-block/Makefile.common
+++ b/gr-howto-write-a-block/Makefile.common
@@ -64,6 +64,9 @@ modincludedir = $(includedir)/$(modname)
# swig includes
swigincludedir = $(modincludedir)/swig
+# Guile scheme code ends up under here:
+guiledir = $(prefix)/share/guile/site
+
# Install this stuff in the appropriate subdirectory
# This usually ends up at:
# ${prefix}/lib/python${python_version}/site-packages/$(modname)
diff --git a/gr-howto-write-a-block/config/gr_standalone.m4 b/gr-howto-write-a-block/config/gr_standalone.m4
index 0e2ded584b..d4acaec2fe 100644
--- a/gr-howto-write-a-block/config/gr_standalone.m4
+++ b/gr-howto-write-a-block/config/gr_standalone.m4
@@ -1,5 +1,5 @@
dnl
-dnl Copyright 2008,2009 Free Software Foundation, Inc.
+dnl Copyright 2008,2009,2010 Free Software Foundation, Inc.
dnl
dnl This file is part of GNU Radio
dnl
@@ -111,6 +111,11 @@ m4_define([GR_STANDALONE],
PKG_CHECK_MODULES(GNURADIO_CORE, gnuradio-core >= 3)
LIBS="$LIBS $GNURADIO_CORE_LIBS"
+ gnuradio_core_GUILE_LOAD_PATH="`pkg-config --variable=guile_load_path gnuradio-core`"
+ gnuradio_core_LIBDIRPATH="`pkg-config --variable=libdir gnuradio-core`"
+ AC_SUBST(gnuradio_core_GUILE_LOAD_PATH)
+ AC_SUBST(gnuradio_core_LIBDIRPATH)
+
dnl Allow user to choose whether to generate SWIG/Python
dnl Default is enabled
AC_ARG_ENABLE([python],
diff --git a/gr-howto-write-a-block/configure.ac b/gr-howto-write-a-block/configure.ac
index fc4227d71f..ef5c98eebd 100644
--- a/gr-howto-write-a-block/configure.ac
+++ b/gr-howto-write-a-block/configure.ac
@@ -77,6 +77,7 @@ dnl AX_BOOST_WSERIALIZATION
AC_CONFIG_FILES([\
Makefile \
+ setup_guile_test_env \
apps/Makefile \
config/Makefile \
grc/Makefile \
@@ -84,10 +85,15 @@ AC_CONFIG_FILES([\
python/Makefile \
python/run_tests \
swig/Makefile \
+ swig/run_guile_tests \
])
dnl run_tests is created from run_tests.in. Make it executable.
-AC_CONFIG_COMMANDS([run_tests], [chmod +x python/run_tests])
+AC_CONFIG_COMMANDS([run_tests],
+ [
+ chmod +x python/run_tests
+ chmod +x swig/run_guile_tests
+ ])
AC_OUTPUT
diff --git a/gr-howto-write-a-block/setup_guile_test_env.in b/gr-howto-write-a-block/setup_guile_test_env.in
new file mode 100644
index 0000000000..6a24020648
--- /dev/null
+++ b/gr-howto-write-a-block/setup_guile_test_env.in
@@ -0,0 +1,140 @@
+#
+# 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 this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+# This is sourced by run_guile_tests to establish the environment
+# variables required to run the tests in the build tree.
+
+# add_local_paths is the only "public" function in this file
+
+# 1st argument is absolute path to hand coded guile source directory
+# 2nd argument is absolute path to component C++ shared library build directory
+# 3nd argument is absolute path to component SWIG build directory
+
+function add_local_paths(){
+ if [ $# -ne 3 ]
+ then
+ echo "$0: requires 3 args" 1>&2
+ exit 1
+ fi
+
+ # Add local dirs to the front
+ prepend_to_guile_load_path "$1"
+ prepend_to_libpath "$2/.libs"
+ [ "$2" != "$3" ] && prepend_to_libpath "$3/.libs"
+ prepend_to_guile_load_path "$3"
+}
+
+# ------------------------------------------------------------------------
+
+abs_top_srcdir=@abs_top_srcdir@
+abs_top_builddir=@abs_top_builddir@
+
+# usage: prepend <path-varname> <dir>
+function prepend(){
+ if [ $# -ne 2 ]
+ then
+ echo "$0: prepend needs 2 args" 1>&2
+ exit 1
+ fi
+ local path="$1" dir="$2" contents=""
+ eval "contents=\$$path"
+ if [ "$dir" != "" ]
+ then
+ if [ "$contents" = "" ]
+ then
+ eval "$path=\"$dir\""
+ else
+ eval "$path=\"$dir:$contents\""
+ fi
+ fi
+ #echo end-of-prepend: $path=${!path}
+}
+
+# usage: append <path-varname> <dir>
+function append(){
+ if [ $# -ne 2 ]
+ then
+ echo "$0: append needs 2 args" 1>&2
+ exit 1
+ fi
+ local path="$1" dir="$2" contents=""
+ eval "contents=\$$path"
+ if [ "$dir" != "" ]
+ then
+ if [ "$contents" = "" ]
+ then
+ eval "$path=\"$dir\""
+ else
+ eval "$path=\"$contents:$dir\""
+ fi
+ fi
+ #echo end-of-append: $path=${!path}
+}
+
+function prepend_to_guile_load_path(){
+ prepend GUILE_LOAD_PATH "$1"
+ export GUILE_LOAD_PATH
+}
+
+function append_to_guile_load_path(){
+ append GUILE_LOAD_PATH "$1"
+ export GUILE_LOAD_PATH
+}
+
+function prepend_to_libpath(){
+ prepend LTDL_LIBRARY_PATH "$1"
+ export LTDL_LIBRARY_PATH
+ case "@host_os@" in
+ darwin*)
+ prepend DYLD_LIBRARY_PATH "$1"
+ export DYLD_LIBRARY_PATH
+ ;;
+ cygwin*|win*|mingw*)
+ prepend PATH "$1"
+ export PATH
+ ;;
+ esac
+}
+
+function append_to_libpath(){
+ append LTDL_LIBRARY_PATH "$1"
+ export LTDL_LIBRARY_PATH
+ case "@host_os@" in
+ darwin*)
+ append DYLD_LIBRARY_PATH "$1"
+ export DYLD_LIBRARY_PATH
+ ;;
+ cygwin*|win*|mingw*)
+ append PATH "$1"
+ export PATH
+ ;;
+ esac
+}
+
+# ------------------------------------------------------------------------
+# Start with gnuradio_core_LIBDIRPATH and gnuradio_core_GUILE_LOAD_PATH
+# ------------------------------------------------------------------------
+
+# Where to search for gnuradio-core shared libraries
+prepend_to_libpath @gnuradio_core_LIBDIRPATH@
+
+# Where to seach for gnuradio-core guile code
+prepend_to_guile_load_path @gnuradio_core_GUILE_LOAD_PATH@
+
+export GUILE_WARN_DEPRECATED=no
diff --git a/gr-howto-write-a-block/swig/Makefile.am b/gr-howto-write-a-block/swig/Makefile.am
index 87134af93f..a7d39444e7 100644
--- a/gr-howto-write-a-block/swig/Makefile.am
+++ b/gr-howto-write-a-block/swig/Makefile.am
@@ -43,3 +43,12 @@ howto_swiginclude_headers = \
howto_square2_ff.i
EXTRA_DIST = $(howto_swiginclude_headers)
+
+
+if GUILE
+TESTS = run_guile_tests
+EXTRA_DIST += $(nobase_guile_DATA)
+
+nobase_guile_DATA = \
+ gnuradio/howto.scm
+endif
diff --git a/gr-howto-write-a-block/swig/howto.test b/gr-howto-write-a-block/swig/howto.test
new file mode 100644
index 0000000000..ffe7251cd8
--- /dev/null
+++ b/gr-howto-write-a-block/swig/howto.test
@@ -0,0 +1,69 @@
+;;; -*- Scheme -*-
+;;;
+;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
+;;;
+
+;;; If you're using Emacs's Scheme mode:
+;;; (put 'with-test-prefix 'scheme-indent-function 1)
+
+;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
+;;; See also the very end of the file, where the test-equal, test-eqv
+;;; and test-eq macros are defined.
+
+(define-module (test-module)
+ #:use-module (oop goops)
+ #:use-module (gnuradio core)
+ #:use-module (gnuradio test-suite lib)
+ #:duplicates (merge-generics replace check))
+
+
+;; Use our module
+(use-modules (gnuradio howto))
+
+
+(define (vector-map f v)
+ (list->vector (map f (vector->list v))))
+
+
+(with-test-prefix "square-ff"
+ (let* ((src-data #(-3. 4. -5.5 2. 3.))
+ (expected-result (vector-map (lambda (x) (* x x)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-f src-data #f))
+ (op (gr:howto-square-ff))
+ (dst (gr:vector-sink-f)))
+
+ (gr:connect tb src op dst)
+
+ (gr:run tb)
+ (test-equal expected-result (gr:data dst))))
+
+
+(with-test-prefix "square2-ff"
+ (let* ((src-data #(-3. 4. -5.5 2. 3.))
+ (expected-result (vector-map (lambda (x) (* x x)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-f src-data #f))
+ (op (gr:howto-square2-ff))
+ (dst (gr:vector-sink-f)))
+
+ (gr:connect tb src op dst)
+
+ (gr:run tb)
+ (test-equal expected-result (gr:data dst))))
+
diff --git a/gr-howto-write-a-block/swig/run_guile_tests.in b/gr-howto-write-a-block/swig/run_guile_tests.in
new file mode 100644
index 0000000000..5d08b0dd53
--- /dev/null
+++ b/gr-howto-write-a-block/swig/run_guile_tests.in
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+. @top_builddir@/setup_guile_test_env
+
+# 1st argument is absolute path to hand coded guile source directory
+# 2nd argument is absolute path to component C++ shared library build directory
+# 3nd argument is absolute path to component SWIG build directory
+
+add_local_paths \
+ @srcdir@ \
+ @abs_builddir@ \
+ @abs_builddir@
+
+@GUILE@ -e main -c '(use-modules (gnuradio test-suite guile-test))' -t @srcdir@