summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore68
-rw-r--r--Guile-TODO88
-rw-r--r--Makefile.common46
-rw-r--r--Makefile.swig43
-rw-r--r--Makefile.swig.gen.t196
-rw-r--r--config/Makefile.am1
-rw-r--r--config/gr_guile.m465
-rw-r--r--config/gr_scripting.m413
-rw-r--r--config/gr_swig.m434
-rw-r--r--config/gr_tcl.m469
-rw-r--r--config/grc_gnuradio_core.m48
-rw-r--r--config/grc_gr_audio_alsa.m44
-rw-r--r--config/grc_gr_guile.m436
-rw-r--r--configure.ac19
-rw-r--r--gnuradio-core/src/Makefile.am7
-rw-r--r--gnuradio-core/src/guile/.gitignore4
-rw-r--r--gnuradio-core/src/guile/Makefile.am53
-rw-r--r--gnuradio-core/src/guile/Swig/common.scm76
-rw-r--r--gnuradio-core/src/guile/gnuradio/core.scm23
-rw-r--r--gnuradio-core/src/guile/gnuradio/export-safely.scm90
-rw-r--r--gnuradio-core/src/guile/gnuradio/runtime-shim.scm89
-rw-r--r--gnuradio-core/src/guile/gnuradio/test-suite/guile-test241
-rw-r--r--gnuradio-core/src/guile/gnuradio/test-suite/lib.scm618
-rw-r--r--gnuradio-core/src/guile/gnuradio/waveform.scm54
-rw-r--r--gnuradio-core/src/guile/run_guile_tests.in15
-rw-r--r--gnuradio-core/src/guile/tests/00_runtime_basics.test158
-rw-r--r--gnuradio-core/src/guile/tests/00_runtime_ctors.test35
-rw-r--r--gnuradio-core/src/guile/tests/filter_ctors.test248
-rw-r--r--gnuradio-core/src/guile/tests/general_ctors.test429
-rw-r--r--gnuradio-core/src/guile/tests/gengen_ctors.test349
-rw-r--r--gnuradio-core/src/guile/tests/hier_ctors.test40
-rw-r--r--gnuradio-core/src/guile/tests/io_ctors.test78
-rw-r--r--gnuradio-core/src/lib/.gitignore2
-rw-r--r--gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc3
-rw-r--r--gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h131
-rw-r--r--gnuradio-core/src/lib/general/Makefile.am3
-rw-r--r--gnuradio-core/src/lib/general/complex_vec_test.cc37
-rw-r--r--gnuradio-core/src/lib/general/complex_vec_test.h15
-rw-r--r--gnuradio-core/src/lib/general/complex_vec_test.i12
-rw-r--r--gnuradio-core/src/lib/general/general.i6
-rw-r--r--gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.i3
-rw-r--r--gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.i7
-rw-r--r--gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.i7
-rw-r--r--gnuradio-core/src/lib/general/gr_feval.i23
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc.i4
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vfc.cc6
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vfc.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vfc.i9
-rw-r--r--gnuradio-core/src/lib/general/gr_nop.cc2
-rw-r--r--gnuradio-core/src/lib/general/gr_nop.h14
-rw-r--r--gnuradio-core/src/lib/general/gr_nop.i11
-rw-r--r--gnuradio-core/src/lib/general/gr_null_sink.cc2
-rw-r--r--gnuradio-core/src/lib/general/gr_null_sink.h16
-rw-r--r--gnuradio-core/src/lib/general/gr_null_sink.i11
-rw-r--r--gnuradio-core/src/lib/general/gr_null_source.cc2
-rw-r--r--gnuradio-core/src/lib/general/gr_null_source.h14
-rw-r--r--gnuradio-core/src/lib/general/gr_null_source.i11
-rw-r--r--gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i2
-rwxr-xr-xgnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t4
-rwxr-xr-xgnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t10
-rwxr-xr-xgnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t8
-rwxr-xr-xgnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t4
-rwxr-xr-xgnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t10
-rwxr-xr-xgnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t8
-rw-r--r--gnuradio-core/src/lib/io/gr_message_source.i5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.cc2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.h2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.i6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block.i7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.cc5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.h2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.i7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_queue.i6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block.cc6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block.i12
-rw-r--r--gnuradio-core/src/lib/runtime/runtime.i7
-rw-r--r--gnuradio-core/src/lib/swig/.gitignore60
-rw-r--r--gnuradio-core/src/lib/swig/Makefile.am110
-rw-r--r--gnuradio-core/src/lib/swig/Makefile.swig.gen1476
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio.i26
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core.py (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_python.py)16
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_filter.i (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i)22
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_general.i (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i)42
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_gengen.i (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i)22
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_hier.i (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i)22
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_io.i (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i)22
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_runtime.i (renamed from gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i)26
-rw-r--r--gnuradio-core/src/lib/swig/gr_swig_block_magic.i39
-rw-r--r--gnuradio-core/src/lib/swig/guile/std_complex.i37
-rw-r--r--gnuradio-core/src/lib/swig/guile/std_vector.i437
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/Makefile.am1
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/__init__.py4
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/hier_block2.py18
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/prefs.py2
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/scheduler.py70
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/top_block.py20
-rw-r--r--gr-atsc/src/lib/Makefile.am3
-rw-r--r--gr-atsc/src/lib/Makefile.swig.gen196
-rw-r--r--gr-audio-alsa/src/Makefile.am37
-rw-r--r--gr-audio-alsa/src/Makefile.swig.gen196
-rw-r--r--gr-audio-alsa/src/audio_alsa.i10
-rw-r--r--gr-audio-alsa/src/audio_alsa.test36
-rwxr-xr-xgr-audio-alsa/src/qa_audio_alsa.py (renamed from gr-audio-alsa/src/qa_alsa.py)0
-rw-r--r--gr-audio-alsa/src/run_guile_tests.in14
-rw-r--r--gr-audio-jack/src/Makefile.am2
-rw-r--r--gr-audio-jack/src/Makefile.swig.gen196
-rw-r--r--gr-audio-jack/src/audio_jack.i10
-rw-r--r--gr-audio-oss/src/Makefile.swig.gen196
-rw-r--r--gr-audio-oss/src/audio_oss.i10
-rw-r--r--gr-audio-osx/src/Makefile.swig.gen196
-rw-r--r--gr-audio-osx/src/audio_osx.i10
-rw-r--r--gr-audio-portaudio/src/Makefile.swig.gen196
-rw-r--r--gr-audio-portaudio/src/audio_portaudio.i10
-rw-r--r--gr-audio-windows/src/Makefile.am2
-rw-r--r--gr-audio-windows/src/Makefile.swig.gen196
-rw-r--r--gr-audio-windows/src/audio_windows.i10
-rw-r--r--gr-comedi/src/Makefile.swig.gen196
-rw-r--r--gr-comedi/src/comedi.i10
-rw-r--r--gr-cvsd-vocoder/src/lib/Makefile.swig.gen196
-rw-r--r--gr-cvsd-vocoder/src/lib/cvsd_vocoder.i10
-rw-r--r--gr-gcell/src/Makefile.swig.gen196
-rw-r--r--gr-gcell/src/gcell.i10
-rw-r--r--gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen196
-rw-r--r--gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i10
-rw-r--r--gr-guile/.gitignore6
-rw-r--r--gr-guile/Makefile.am22
-rw-r--r--gr-guile/apps/.gitignore6
-rw-r--r--gr-guile/apps/Makefile.am23
-rw-r--r--gr-guile/apps/README2
-rwxr-xr-xgr-guile/apps/gr-run-waveform64
-rw-r--r--gr-guile/example-waveforms/.gitignore6
-rw-r--r--gr-guile/example-waveforms/Makefile.am25
-rw-r--r--gr-guile/example-waveforms/dial-tone.wfd40
-rw-r--r--gr-howto-write-a-block/Makefile.common34
-rw-r--r--gr-howto-write-a-block/Makefile.swig35
-rw-r--r--gr-howto-write-a-block/Makefile.swig.gen.t218
-rwxr-xr-xgr-howto-write-a-block/config.guess18
-rwxr-xr-xgr-howto-write-a-block/config.sub76
-rw-r--r--gr-howto-write-a-block/config/gr_standalone.m417
-rw-r--r--gr-howto-write-a-block/swig/.gitignore3
-rw-r--r--gr-howto-write-a-block/swig/Makefile.am37
-rw-r--r--gr-howto-write-a-block/swig/Makefile.swig.gen218
-rw-r--r--gr-howto-write-a-block/swig/howto.i10
-rw-r--r--gr-msdd6000/src/Makefile.am3
-rw-r--r--gr-msdd6000/src/Makefile.swig.gen494
-rw-r--r--gr-msdd6000/src/msdd_rs.i10
-rw-r--r--gr-noaa/lib/Makefile.am2
-rw-r--r--gr-noaa/swig/Makefile.swig.gen196
-rw-r--r--gr-noaa/swig/noaa_swig.i9
-rw-r--r--gr-pager/lib/Makefile.swig.gen259
-rw-r--r--gr-pager/swig/Makefile.swig.gen196
-rw-r--r--gr-pager/swig/pager_swig.i10
-rw-r--r--gr-qtgui/src/lib/Makefile.swig.gen196
-rw-r--r--gr-qtgui/src/lib/qtgui.i9
-rw-r--r--gr-radio-astronomy/src/lib/Makefile.swig.gen196
-rw-r--r--gr-radio-astronomy/src/lib/ra.i10
-rw-r--r--gr-trellis/src/lib/Makefile.swig.gen196
-rw-r--r--gr-trellis/src/lib/trellis.i9
-rw-r--r--gr-uhd/swig/Makefile.am3
-rw-r--r--gr-uhd/swig/Makefile.swig.gen196
-rw-r--r--gr-uhd/swig/uhd_swig.i12
-rw-r--r--gr-usrp/src/.gitignore3
-rw-r--r--gr-usrp/src/Makefile.swig.gen196
-rw-r--r--gr-usrp/src/usrp_base.i1
-rw-r--r--gr-usrp/src/usrp_swig.i13
-rw-r--r--gr-usrp2/src/.gitignore1
-rw-r--r--gr-usrp2/src/Makefile.swig.gen196
-rw-r--r--gr-usrp2/src/usrp2.i13
-rw-r--r--gr-video-sdl/src/Makefile.swig.gen196
-rw-r--r--gr-video-sdl/src/video_sdl.i10
-rw-r--r--setup_guile_test_env.in80
-rw-r--r--usrp/host/include/usrp/db_base.i3
-rw-r--r--usrp/host/swig/.gitignore5
-rw-r--r--usrp/host/swig/Makefile.swig.gen196
176 files changed, 6203 insertions, 6179 deletions
diff --git a/.gitignore b/.gitignore
index dba263ac2..c8f1ebb25 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@
\#*#
.deps
.libs
+guile.log
TAGS
*-stamp
!.gitattributes
@@ -46,3 +47,70 @@ make.log
/compile
/build
/run_tests.sh
+/setup_guile_test_env
+###
+### Put these here until we get this all sorted out
+###
+gr-atsc/src/lib/atsc.scm
+gr-atsc/src/lib/gnuradio/
+gr-atsc/src/lib/guile/
+gr-atsc/src/lib/python/
+gr-audio-alsa/src/audio_alsa.scm
+gr-audio-alsa/src/gnuradio/
+gr-audio-alsa/src/guile/
+gr-audio-alsa/src/python/
+gr-audio-oss/src/audio_oss.scm
+gr-audio-oss/src/gnuradio/
+gr-audio-oss/src/guile/
+gr-audio-oss/src/python/
+gr-cvsd-vocoder/src/lib/cvsd_vocoder.scm
+gr-cvsd-vocoder/src/lib/gnuradio/
+gr-cvsd-vocoder/src/lib/guile/
+gr-cvsd-vocoder/src/lib/python/
+gr-gsm-fr-vocoder/src/lib/gnuradio/
+gr-gsm-fr-vocoder/src/lib/gsm_full_rate.scm
+gr-gsm-fr-vocoder/src/lib/guile/
+gr-gsm-fr-vocoder/src/lib/python/
+gr-msdd6000/src/gnuradio/
+gr-msdd6000/src/guile/
+gr-msdd6000/src/msdd.scm
+gr-msdd6000/src/msdd_rs.scm
+gr-msdd6000/src/python/
+gr-noaa/swig/gnuradio/
+gr-noaa/swig/guile/
+gr-noaa/swig/noaa_swig.scm
+gr-noaa/swig/python/
+gr-pager/swig/gnuradio/
+gr-pager/swig/guile/
+gr-pager/swig/pager_swig.scm
+gr-pager/swig/python/
+gr-qtgui/src/lib/gnuradio/
+gr-qtgui/src/lib/guile/
+gr-qtgui/src/lib/python/
+gr-qtgui/src/lib/qtgui.scm
+gr-radio-astronomy/src/lib/gnuradio/
+gr-radio-astronomy/src/lib/guile/
+gr-radio-astronomy/src/lib/python/
+gr-radio-astronomy/src/lib/ra.scm
+gr-trellis/src/lib/gnuradio/
+gr-trellis/src/lib/guile/
+gr-trellis/src/lib/python/
+gr-trellis/src/lib/trellis.scm
+gr-uhd/swig/gnuradio/
+gr-uhd/swig/guile/
+gr-uhd/swig/python/
+gr-uhd/swig/uhd_swig.scm
+gr-usrp/src/guile/
+gr-usrp/src/python/
+gr-usrp2/src/gnuradio/
+gr-usrp2/src/guile/
+gr-usrp2/src/python/
+gr-usrp2/src/usrp2.scm
+gr-video-sdl/src/gnuradio/
+gr-video-sdl/src/guile/
+gr-video-sdl/src/python/
+gr-video-sdl/src/video_sdl.scm
+usrp/host/swig/gnuradio/
+usrp/host/swig/guile/
+usrp/host/swig/python/
+###
diff --git a/Guile-TODO b/Guile-TODO
new file mode 100644
index 000000000..a56f69b1c
--- /dev/null
+++ b/Guile-TODO
@@ -0,0 +1,88 @@
+In no particular order:
+
+2) SIGINT handling in gr_top_block::wait
+
+3) Ensure that all 4 combinations of
+ --{enable,disable}-python --{enable,disable}-guile
+ work correctly.
+
+ When both are disabled swig should NOT be run.
+ When --enable-guile --disable-python, python swig stuff should not be generated.
+ When --disable-guile --enable-python, guile swig stuff should not be generated.
+
+5) Ensure that all gr-* components are generating guile code when
+ enabled, and that (1) and (3) are handled in all gr-* components.
+
+5b) Don't forget gr-howto-write-a-block. (It's got its own
+ configure.ac and is built separately from the rest.)
+
+6) Fix printed representation of blocks in gr_block.i
+
+8) Fix gr_message_{sink,source} so that they work under guile.
+ (Not sure if I disabled one or both of these...)
+
+9) Any other FIXME style warnings
+
+10) Finish gnuradio-core test cases
+
+11) Write test cases for gr-* components.
+
+ For the one's that have a h/w dependency, just confirm that we can
+ load the module. See gr_audio_alsa/src/audio_alsa.test for an
+ example.
+
+ For the others, write a test in the style of the ones in
+ gnuradio-core.
+
+12) Swig guile modules names: s/_/-/g
+
+13) Change guile libnames to libguile-gnuradio-<module-name>
+
+14) Add support to setup_guile_test_env.in for
+ "withlibs", OS/X (DYLD_LIBRARY_PATH), windows (PATH)
+
+15) Rewrite gr-run-waveform as C/C++ code that embeds guile.
+ See if we can't statically link libguile into this.
+ Will need to figure out which packages provide libguile.a.
+
+16) Test this stuff with Guile 1.9 to confirm that it works and to see
+ how much faster it is. Load time currently is currently kind of doggy.
+
+
+
+I'm sure I'm forgetting some things...
+
+
+
+80) Confirm make dist and make distcheck work
+
+81) Anything else that would keep us from merging into next.
+
+82) Get some other developers to try it out.
+
+
+
+
+90) Merge to next
+
+100) Handle any fallout we missed.
+
+
+-------------------------------------------------------------------------------
+These are done:
+
+
+1) [DONE] Ensure that libraries containing swig generated code are regenerated
+ when any relevant .i file is touched.
+
+4) [DONE] Fix GR_SWIG_BLOCK_MAGIC so that in the guile case we don't map all
+ the constructors into the same name. E.g. audio_alsa_sink -> sink.
+ (Causes problem when multiple gr-* modules are used.)
+
+7) [DONE] Fix gr-usrp so that it works. Probably related to
+ warning received when generating python bindings.
+ Making the swig/python warning go away will probably resolve the
+ guile problem.
+
+17) [DONE] Get std::vector< std::complex<float> > working
+
diff --git a/Makefile.common b/Makefile.common
index 95dacf987..a09b9fbdb 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -20,6 +20,10 @@
# Boston, MA 02110-1301, USA.
#
+# Make rebuilds less verbose with stuff we can safely ignore
+# about GNU make only extensions.
+AUTOMAKE += -Wno-portability -Wnone
+
AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@
AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@
@@ -29,10 +33,14 @@ LTVERSIONFLAGS = -version-info 0:0:0 -release $(LIBVER)
# includes
grincludedir = $(includedir)/gnuradio
-if PYTHON
# swig includes
swigincludedir = $(grincludedir)/swig
+# Guile scheme code ends up under here:
+guiledir = $(prefix)/share/guile/site
+grguiledir = $(guiledir)/gnuradio
+
+if PYTHON
# Install the gnuradio stuff in the appropriate subdirectory
# This usually ends up at:
# ${prefix}/lib/python${python_version}/site-packages/gnuradio
@@ -114,9 +122,45 @@ grc_blocksdir = $(pkgdatadir)/grc/blocks
STAMPS =
MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT
+## SWIG suffixes for automake to know about
+SUFFIXES = .i .scm .py
+
+if GUILE
+# Compile a .i to what guile needs. We use -o to set the output file name,
+# or even with -outdir guile in SWIG_GUILE_ARGS, swig keeps putting a
+# gnuradio_core_*_wrap.cxx in the source directory.
+gnuradio/%.scm : %.i
+ @echo "Compile .i to .scm"
+ @test -d "guile" || $(mkinstalldirs) "guile"
+ @test -d "gnuradio" || $(mkinstalldirs) "gnuradio"
+ $(SWIG) $(STD_SWIG_GUILE_ARGS) $($*_swig_args) \
+ -MD -MF guile/$*.Std \
+ -module $* -o guile/$*.cc $<
+ $(SED) -e 's|guile/\(.*\)\.cc:|gnuradio/\1.scm:|' guile/$*.Std > guile/$*.d
+ $(SED) -i -e 's/<--dummy-[0-9]\+-->/<top>/g' gnuradio/$*.scm
+ $(SED) -i -e 's/^(export /(export-safely /' gnuradio/$*.scm
+ $(RM) guile/$*.Std
+endif
+
+# Compile a .i file to what python needs
+.i.py:
+ @echo "Compile .i to .py"
+ @test -d "python" || $(mkinstalldirs) "python"
+ $(SWIG) $(STD_SWIG_PYTHON_ARGS) $($*_swig_args) \
+ -MD -MF python/$*.Std \
+ -module $* -o python/$*.cc -oh python/$*.h $<
+ $(SED) -e 's|python/\(.*\)\.cc:|\1.py:|' python/$*.Std > python/$*.d
+ $(RM) python/$*.Std
+
# Don't distribute the files defined in the variable 'no_dist_files'
+no_dist_dirs = python gnuradio guile
dist-hook:
+ @for dir in $(no_dist_dirs); do \
+ echo $(RM) -fr $(distdir)/$$dir; \
+ $(RM) -fr $(distdir)/$$dir; \
+ done;
@for file in $(no_dist_files); do \
echo $(RM) $(distdir)/$$file; \
$(RM) $(distdir)/$$file; \
done;
+
diff --git a/Makefile.swig b/Makefile.swig
index 9e14835e5..810157b55 100644
--- a/Makefile.swig
+++ b/Makefile.swig
@@ -32,6 +32,9 @@
## In some older autotools, $(builddir) is not defined, so
## just use '.' instead.
+CLEANFILES = python/*.cc python/*.h python/*.lo python/*.o
+CLEANFILES += guile/*.cc gnuradio/*.scm guile/*.lo guile/*.o
+
SWIG_PYTHON_FLAGS = \
-fvirtual \
-python \
@@ -40,14 +43,33 @@ SWIG_PYTHON_FLAGS = \
-w511 \
-outdir .
-## standard swig flags used by most components
-
STD_SWIG_PYTHON_ARGS = \
$(SWIG_PYTHON_FLAGS) \
$(STD_DEFINES_AND_INCLUDES) \
$(WITH_SWIG_INCLUDES) \
$(WITH_INCLUDES)
+# NOTE: -Linkage passive and -Linkage module don't define SWIG_init()
+SWIG_GUILE_FLAGS = \
+ -guile \
+ -scm \
+ -scmstub \
+ -package gnuradio \
+ -Linkage module \
+ -proxy \
+ -goopsprefix gr: \
+ -emit-slot-accessors \
+ -emit-setters \
+ -outdir .
+
+## standard swig flags used by most components
+
+STD_SWIG_GUILE_ARGS = \
+ $(SWIG_GUILE_FLAGS) \
+ $(STD_DEFINES_AND_INCLUDES) \
+ $(WITH_SWIG_INCLUDES) \
+ $(WITH_INCLUDES)
+
## standard SWIG LD flags for library creation
STD_SWIG_LA_LD_FLAGS = \
@@ -58,8 +80,7 @@ STD_SWIG_LA_LD_FLAGS = \
## standard SWIG library additions for library creation
-STD_SWIG_LA_LIB_ADD = \
- -lstdc++
+STD_SWIG_LA_LIB_ADD = -lstdc++
## standard SWIG CXXFLAGS
## This allows for code to be compiled with "-O1" instead of "-g -O2"
@@ -67,10 +88,6 @@ STD_SWIG_LA_LIB_ADD = \
STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@
-## SWIG suffix for automake to know about
-
-SUFFIXES = .i
-
## Create $(srcdir)/Makefile.swig.gen, containing all of the rules
## for running SWIG to generate or re-generate outputs. SWIG file
## names are to be defined in TOP_SWIG_IFILES, and must include the
@@ -115,3 +132,13 @@ swig_built_sources =
## on variables defined above.
include $(srcdir)/Makefile.swig.gen
+
+# Create a list of .py files based on the top level .i files.
+PYTHON_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(subst .i,.py,$(HFILE)))
+swig_built_sources += $(PYTHON_GEN)
+
+if GUILE
+# Create a list of .scm files based on the top level .i files.
+GUILE_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(patsubst %.i,gnuradio/%.scm,$(HFILE)))
+swig_built_sources += $(GUILE_GEN)
+endif
diff --git a/Makefile.swig.gen.t b/Makefile.swig.gen.t
index c15a81721..5be0ac4aa 100644
--- a/Makefile.swig.gen.t
+++ b/Makefile.swig.gen.t
@@ -38,6 +38,16 @@
@NAME@_pythondir = $(pythondir)/$(@NAME@_pythondir_category)
@NAME@_pylibdir = $(pyexecdir)/$(@NAME@_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+@NAME@_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/@NAME@
+# FIXME: determince whether these should be installed with gnuradio.
+@NAME@_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
@NAME@_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/@NAME@-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += @NAME@.py @NAME@.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ swig_built_sources += @NAME@.py @NAME@.cc
_@NAME@.la
_@NAME@_la_SOURCES = \
- @NAME@.cc \
+ python/@NAME@.cc \
$(@NAME@_la_swig_sources)
_@NAME@_la_LIBADD = \
@@ -99,160 +96,37 @@ _@NAME@_la_LDFLAGS = \
_@NAME@_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(@NAME@_la_swig_cxxflags)
@NAME@_python_PYTHON = \
@NAME@.py \
$(@NAME@_python)
-## Entry rule for running SWIG
+python/@NAME@.cc: @NAME@.py
+@NAME@.py: @NAME@.i
-@NAME@.h @NAME@.py @NAME@.cc: @NAME@.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/@NAME@-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/@NAME@-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/@NAME@-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/@NAME@-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/@NAME@-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/@NAME@-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/@NAME@-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/@NAME@-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/@NAME@.d
+# end of PYTHON
-$(DEPDIR)/@NAME@-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(@NAME@_swig_args) \
- -MD -MF $(DEPDIR)/@NAME@.Std \
- -module @NAME@ -o @NAME@.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/@NAME@.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/@NAME@.Std \
- > $(DEPDIR)/@NAME@.Sd; \
- $(RM) $(DEPDIR)/@NAME@.Std; \
- $(MV) $(DEPDIR)/@NAME@.Sd $(DEPDIR)/@NAME@.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/@NAME@.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/@NAME@.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/@NAME@.Std $(DEPDIR)/@NAME@.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/@NAME@.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/@NAME@.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/@NAME@.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/@NAME@.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/@NAME@-generate-stamp
+if GUILE
+@NAME@_scmlib_LTLIBRARIES = libguile-@NAME@.la
+libguile_@NAME@_la_SOURCES = \
+ guile/@NAME@.cc \
+ $(@NAME@_la_swig_sources)
+nobase_@NAME@_scm_DATA = gnuradio/@NAME@.scm gnuradio/@NAME@-primitive.scm
+
+libguile_@NAME@_la_LIBADD = $(_@NAME@_la_LIBADD)
+libguile_@NAME@_la_LDFLAGS = $(_@NAME@_la_LDFLAGS)
+libguile_@NAME@_la_CXXFLAGS = $(_@NAME@_la_CXXFLAGS)
+
+guile/@NAME@.cc: gnuradio/@NAME@.scm
+gnuradio/@NAME@.scm: @NAME@.i
+gnuradio/@NAME@-primitive.scm: gnuradio/@NAME@.scm
+
+# Include the guile dependencies for this file
+-include guile/@NAME@.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/@NAME@.d@am__quote@
diff --git a/config/Makefile.am b/config/Makefile.am
index 4dc7216f1..f5f478cff 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -61,6 +61,7 @@ m4macros = \
grc_gr_gcell.m4 \
grc_gr_gpio.m4 \
grc_gr_gsm_fr_vocoder.m4 \
+ grc_gr_guile.m4 \
grc_gr_noaa.m4 \
grc_gr_radar_mono.m4 \
grc_gr_radio_astronomy.m4 \
diff --git a/config/gr_guile.m4 b/config/gr_guile.m4
new file mode 100644
index 000000000..90d4dfe9d
--- /dev/null
+++ b/config/gr_guile.m4
@@ -0,0 +1,65 @@
+dnl
+dnl Copyright 2003,2004,2005 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GNU Radio
+dnl
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+dnl
+
+# GUILE_DEVEL()
+#
+# Checks for Guile and tries to get the include path to 'Guile.h'.
+# It sets the $(GUILE_CPPFLAGS), $(GUILE_LDFLAGS) and $(guiledir) output variables,
+#
+AC_DEFUN([GUILE_DEVEL],[
+ dnl see if GUILE is installed
+ AC_PATH_PROG(GUILE, guile)
+ dnl get the config program
+ AC_PATH_PROG(GUILE_CONFIG, guile-config)
+ if test x${GUILE_CONFIG} != x; then
+ GUILE_CFLAGS="`${GUILE_CONFIG} compile`"
+ GUILE_LIBS="`${GUILE_CONFIG} link`"
+ GUILE_PKLIBDIR="`${GUILE_CONFIG} info pkglibdir`"
+ GUILE_PKDATADIR="`${GUILE_CONFIG} info pkgdatadir`/site"
+ else
+ GUILE_CFLAGS=""
+ GUILE_PKLIBDIR=""
+ GUILE_LIBS="Wl,-Bsymbolic-functions -lguile lgmp -lcrypt"
+ fi
+ AC_SUBST(GUILE_CFLAGS)
+ AC_SUBST(GUILE_PKLIBDIR)
+ AC_SUBST(GUILE_PKDATADIR)
+ AC_SUBST(GUILE_LIBS)
+])
+
+# GUILE_CHECK_MODULE
+#
+# Determines if a particular Guile module can be imported
+#
+# $1 - module name
+# $2 - module description
+# $3 - action if found
+# $4 - action if not found
+# $5 - test command
+
+AC_DEFUN([GUILE_CHECK_MODULE],[
+ AC_MSG_CHECKING([for $2])
+ dnl ########################################
+ dnl # import and test checking
+ dnl ########################################
+ dnl if test x${enable_guile} = xyes; then
+ dnl fi
+])
diff --git a/config/gr_scripting.m4 b/config/gr_scripting.m4
index e030a8102..001f3b7e3 100644
--- a/config/gr_scripting.m4
+++ b/config/gr_scripting.m4
@@ -26,5 +26,16 @@ AC_DEFUN([GR_SCRIPTING],[
SWIG_PROG(1.3.31)
SWIG_ENABLE_CXX
- SWIG_PYTHON
+ dnl We need python at build time, as it's used as for utilities. If python
+ dnl isn't enabled, then we don't want the SWIG support for python.
+ AC_REQUIRE([AM_PATH_PYTHON])
+ if test x${enable_python} = xyes; then
+ SWIG_PYTHON
+ fi
+ if test x${enable_tcl} = xyes; then
+ SWIG_TCL
+ fi
+ if test x${enable_guile} = xyes; then
+ SWIG_GUILE
+ fi
])
diff --git a/config/gr_swig.m4 b/config/gr_swig.m4
index cdb28055c..8a9c73268 100644
--- a/config/gr_swig.m4
+++ b/config/gr_swig.m4
@@ -26,7 +26,8 @@ dnl
# is greater or equal to the value of the argument. It should have the format:
# N[.N[.N]] (N is a number between 0 and 999. Only the first N is mandatory.)
AC_DEFUN([SWIG_PROG],[
- AC_REQUIRE([AC_PROG_MAKE_SET])
+ AC_REQUIRE([AC_PROG_MAKE_SET])
+ if test x${enable_python} = xyes -o x${enable_guile} = xyes; then
AC_CHECK_PROG(SWIG,swig,[`which swig`])
if test -z "$SWIG" ; then
AC_MSG_ERROR([Cannot find 'swig' program. SWIG version >= $1 required])
@@ -48,6 +49,7 @@ AC_DEFUN([SWIG_PROG],[
AC_MSG_ERROR([cannot determine SWIG version])
fi
fi
+ fi
])
# SWIG_ENABLE_CXX()
@@ -56,9 +58,11 @@ AC_DEFUN([SWIG_PROG],[
AC_DEFUN([SWIG_ENABLE_CXX],[
AC_REQUIRE([SWIG_PROG])
AC_REQUIRE([AC_PROG_CXX])
- if test "$SWIG" != "false" ; then
+ if test x${enable_python} = xyes -o x${enable_guile} = xyes; then
+ if test "$SWIG" != "false" ; then
SWIG="$SWIG -c++"
- fi
+ fi
+ fi
])
# SWIG_PYTHON([use-shadow-classes])
@@ -83,3 +87,27 @@ dnl AC_SUBST(SWIG_PYTHON_OPT,[-python$swig_shadow])
fi
AC_SUBST(SWIG_PYTHON_CPPFLAGS,[$PYTHON_CPPFLAGS])
])
+
+AC_DEFUN([SWIG_TCL],[
+ AC_REQUIRE([SWIG_PROG])
+ AC_REQUIRE([TCL_DEVEL])
+ if test "$SWIG" != "false" ; then
+ AC_SUBST(SWIG_TCL_LIB,[-ltcl])
+dnl test ! "x$1" = "xno" && swig_shadow=" -shadow" || swig_shadow=""
+dnl AC_SUBST(SWIG_PYTHON_OPT,[-python$swig_shadow])
+ AC_SUBST(SWIG_TCL_OPT,[-tcl])
+ fi
+ AC_SUBST(SWIG_TCL_CPPFLAGS,[$TCL_CPPFLAGS])
+])
+
+AC_DEFUN([SWIG_GUILE],[
+ AC_REQUIRE([SWIG_PROG])
+ AC_REQUIRE([GUILE_DEVEL])
+ if test "$SWIG" != "false" ; then
+ AC_SUBST(SWIG_GUILE_LIB,[-lguile])
+dnl test ! "x$1" = "xno" && swig_shadow=" -shadow" || swig_shadow=""
+dnl AC_SUBST(SWIG_PYTHON_OPT,[-python$swig_shadow])
+ AC_SUBST(SWIG_GUILE_OPT,[-guile])
+ fi
+ AC_SUBST(SWIG_GUILE_CPPFLAGS,[$GUILE_CPPFLAGS])
+])
diff --git a/config/gr_tcl.m4 b/config/gr_tcl.m4
new file mode 100644
index 000000000..106bc6515
--- /dev/null
+++ b/config/gr_tcl.m4
@@ -0,0 +1,69 @@
+dnl
+dnl Copyright 2003,2004,2005 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GNU Radio
+dnl
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+dnl
+
+# TCL_DEVEL()
+#
+# Checks for Tcl and tries to get the include path to 'Tcl.h'.
+# It sets the $(TCL_CPPFLAGS), $(TCL_LDFLAGS) and $(tcldir) output variables,
+#
+AC_DEFUN([TCL_DEVEL],[
+ dnl see if tclsh is installed
+ if test x${enable_tcl} = xyes; then
+ AC_PATH_PROG(TCLSH,tclsh)
+
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_ARG_WITH(tcldir,
+ AC_HELP_STRING([--with-tcldir=DIR],
+ [tcl installation directory (cross-compiling) [[default=$prefix/lib/tcl2.5/site-packages]]]),
+ [with_tcldir=${withval}],[with_tcldir=${prefix}/lib/tcl2.5/site-packages])
+
+ # if we're cross-compiling, asking the host tcl about any of
+ # this is completely useless...
+
+ dnl if test x$cross_compiling != xno; then
+ dnl tcldir=$with_tcldir
+ dnl pyexecdir=$with_tcldir
+ dnl AC_SUBST(TCL_CPPFLAGS)
+ dnl AC_SUBST(TCL_LDFLAGS)
+ dnl else
+ dnl fi
+ fi
+])
+
+# TCL_CHECK_MODULE
+#
+# Determines if a particular Tcl module can be imported
+#
+# $1 - module name
+# $2 - module description
+# $3 - action if found
+# $4 - action if not found
+# $5 - test command
+
+AC_DEFUN([TCL_CHECK_MODULE],[
+ AC_MSG_CHECKING([for $2])
+ dnl ########################################
+ dnl # import and test checking
+ dnl ########################################
+ dnl if test x${enable_tcl} = xyes; then
+ dnl fi
+])
diff --git a/config/grc_gnuradio_core.m4 b/config/grc_gnuradio_core.m4
index 269634324..8cbba49ef 100644
--- a/config/grc_gnuradio_core.m4
+++ b/config/grc_gnuradio_core.m4
@@ -81,6 +81,8 @@ AC_DEFUN([GRC_GNURADIO_CORE],[
gnuradio-core/gnuradio-core.pc \
gnuradio-core/src/Makefile \
gnuradio-core/src/gen_interpolator_taps/Makefile \
+ gnuradio-core/src/guile/Makefile \
+ gnuradio-core/src/guile/run_guile_tests \
gnuradio-core/src/lib/Makefile \
gnuradio-core/src/lib/filter/Makefile \
gnuradio-core/src/lib/g72x/Makefile \
@@ -110,6 +112,10 @@ AC_DEFUN([GRC_GNURADIO_CORE],[
GRC_BUILD_CONDITIONAL(gnuradio-core, [
dnl run_tests is created from run_tests.in. Make it executable.
- AC_CONFIG_COMMANDS([run_tests_core],[chmod +x gnuradio-core/src/python/gnuradio/gr/run_tests])
+ AC_CONFIG_COMMANDS([run_tests_core],
+ [
+ chmod +x gnuradio-core/src/python/gnuradio/gr/run_tests
+ chmod +x gnuradio-core/src/guile/run_guile_tests
+ ])
])
])
diff --git a/config/grc_gr_audio_alsa.m4 b/config/grc_gr_audio_alsa.m4
index d6955980d..35389d81d 100644
--- a/config/grc_gr_audio_alsa.m4
+++ b/config/grc_gr_audio_alsa.m4
@@ -37,11 +37,13 @@ AC_DEFUN([GRC_GR_AUDIO_ALSA],[
gr-audio-alsa/Makefile \
gr-audio-alsa/gnuradio-audio-alsa.pc \
gr-audio-alsa/src/Makefile \
+ gr-audio-alsa/src/run_guile_tests \
gr-audio-alsa/src/run_tests \
])
GRC_BUILD_CONDITIONAL(gr-audio-alsa,[
dnl run_tests is created from run_tests.in. Make it executable.
- AC_CONFIG_COMMANDS([run_tests_alsa], [chmod +x gr-audio-alsa/src/run_tests])
+ AC_CONFIG_COMMANDS([run_tests_alsa],
+ [chmod +x gr-audio-alsa/src/run_tests gr-audio-alsa/src/run_guile_tests])
])
])
diff --git a/config/grc_gr_guile.m4 b/config/grc_gr_guile.m4
new file mode 100644
index 000000000..35d6834eb
--- /dev/null
+++ b/config/grc_gr_guile.m4
@@ -0,0 +1,36 @@
+dnl Copyright 2001,2002,2003,2004,2005,2006,2008,2009,2010 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GNU Radio
+dnl
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+
+AC_DEFUN([GRC_GR_GUILE],[
+ GRC_ENABLE(gr-guile)
+
+ dnl Don't do gr-guile if gnuradio-core skipped
+ GRC_CHECK_DEPENDENCY(gr-guile, gnuradio-core)
+
+ AC_CONFIG_FILES([ \
+ gr-guile/Makefile \
+ gr-guile/apps/Makefile \
+ gr-guile/example-waveforms/Makefile \
+ ])
+
+ GRC_BUILD_CONDITIONAL(gr-guile,[
+ dnl run_tests is created from run_tests.in. Make it executable.
+ dnl AC_CONFIG_COMMANDS([run_tests_guile], [chmod +x gr-guile/apps/run_guile_tests])
+ ])
+])
diff --git a/configure.ac b/configure.ac
index 91bbe755a..fe32ccf5e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -148,7 +148,20 @@ AC_ARG_ENABLE([python],
esac],
[enable_python=yes]
)
+
+AC_ARG_ENABLE([guile],
+ [AS_HELP_STRING([--enable-guile],
+ [generate SWIG/Guile components (default is yes)])],
+ [case "${enableval}" in
+ yes) enable_guile=yes ;;
+ no) enable_guile=no ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-guile]) ;;
+ esac],
+ [enable_guile=no]
+)
+
AM_CONDITIONAL([PYTHON], [test x$enable_python = xyes])
+AM_CONDITIONAL([GUILE], [test x$enable_guile = xyes])
AC_CHECK_PROG([XMLTO],[xmlto],[yes],[])
AM_CONDITIONAL([HAS_XMLTO], [test x$XMLTO = xyes])
@@ -362,6 +375,7 @@ GRC_GR_COMEDI
GRC_GR_CVSD_VOCODER
GRC_GR_GPIO
GRC_GR_GSM_FR_VOCODER
+GRC_GR_GUILE
GRC_GR_NOAA
GRC_GR_PAGER
GRC_GR_RADAR_MONO
@@ -371,7 +385,7 @@ GRC_GR_VIDEO_SDL
GRC_GR_WXGUI
GRC_GR_QTGUI
GRC_GR_SOUNDER dnl this must come after GRC_USRP
-GRC_GR_UTILS dnl this must come after GRC_GR_WXGUI
+GRC_GR_UTILS dnl this must come after GRC_GR_WXGUI
GRC_GNURADIO_EXAMPLES dnl must come after all GRC_GR_*
GRC_GRC
GRC_GR_UHD
@@ -402,7 +416,8 @@ AC_SUBST(with_LIBDIRPATH)
AC_CONFIG_FILES([\
Makefile \
run_tests.sh \
- config/Makefile \
+ setup_guile_test_env \
+ config/Makefile
])
dnl run_tests.sh is created from run_tests.sh.in . Make it executable.
diff --git a/gnuradio-core/src/Makefile.am b/gnuradio-core/src/Makefile.am
index eb979fe58..648fe299e 100644
--- a/gnuradio-core/src/Makefile.am
+++ b/gnuradio-core/src/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2001,2004,2009 Free Software Foundation, Inc.
+# Copyright 2001,2004,2009,2010 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -25,5 +25,8 @@ SUBDIRS = gen_interpolator_taps lib tests
if PYTHON
SUBDIRS += python
endif
+if GUILE
+SUBDIRS += guile
+endif
-DIST_SUBDIRS = gen_interpolator_taps lib tests python utils
+DIST_SUBDIRS = gen_interpolator_taps lib tests python guile utils
diff --git a/gnuradio-core/src/guile/.gitignore b/gnuradio-core/src/guile/.gitignore
new file mode 100644
index 000000000..82a29a907
--- /dev/null
+++ b/gnuradio-core/src/guile/.gitignore
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/run_guile_tests
+/guile.log
diff --git a/gnuradio-core/src/guile/Makefile.am b/gnuradio-core/src/guile/Makefile.am
new file mode 100644
index 000000000..0c0becbc1
--- /dev/null
+++ b/gnuradio-core/src/guile/Makefile.am
@@ -0,0 +1,53 @@
+#
+# 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/>.
+#
+
+include $(top_srcdir)/Makefile.common
+
+TESTS = run_guile_tests
+
+EXTRA_DIST = \
+ run_guile_tests.in \
+ $(GUILE_TESTS)
+
+# These are the hand-code guile files for gnuradio-core.
+#
+# Swig/common.scm is glue that's required for the goops wrappers.
+# gnuradio/export-safely.scm works around some problems in the goops generated wrappers.
+# gnuradio/core.scm glues the 5 pieces of gnuradio_core_* into a single module.
+# gnuradio/runtime-shim implements "guile friendly" versions of connect & disconnect.
+
+nobase_guile_DATA = \
+ Swig/common.scm \
+ gnuradio/core.scm \
+ gnuradio/export-safely.scm \
+ gnuradio/runtime-shim.scm \
+ gnuradio/waveform.scm \
+ gnuradio/test-suite/guile-test \
+ gnuradio/test-suite/lib.scm
+
+GUILE_TESTS = \
+ tests/00_runtime_basics.test \
+ tests/00_runtime_ctors.test \
+ tests/filter_ctors.test \
+ tests/general_ctors.test \
+ tests/gengen_ctors.test \
+ tests/hier_ctors.test \
+ tests/io_ctors.test
+
+CLEANFILES = guile.log
diff --git a/gnuradio-core/src/guile/Swig/common.scm b/gnuradio-core/src/guile/Swig/common.scm
new file mode 100644
index 000000000..a51d3a71d
--- /dev/null
+++ b/gnuradio-core/src/guile/Swig/common.scm
@@ -0,0 +1,76 @@
+;;;************************************************************************
+;;;*common.scm
+;;;*
+;;;* This file contains generic SWIG GOOPS classes for generated
+;;;* GOOPS file support
+;;;*
+;;;* Copyright (C) 2003 John Lenz (jelenz@wisc.edu)
+;;;* Copyright (C) 2004 Matthias Koeppe (mkoeppe@mail.math.uni-magdeburg.de)
+;;;*
+;;;* This file may be freely redistributed without license or fee provided
+;;;* this copyright message remains intact.
+;;;************************************************************************
+
+(define-module (Swig swigrun))
+
+(define-module (Swig common)
+ #:use-module (oop goops)
+ #:use-module (Swig swigrun))
+
+(define-class <swig-metaclass> (<class>)
+ (new-function #:init-value #f))
+
+(define-method (initialize (class <swig-metaclass>) initargs)
+ (slot-set! class 'new-function (get-keyword #:new-function initargs #f))
+ (next-method))
+
+(define-class <swig> ()
+ (swig-smob #:init-value #f)
+ #:metaclass <swig-metaclass>
+)
+
+(define-method (initialize (obj <swig>) initargs)
+ (next-method)
+ (slot-set! obj 'swig-smob
+ (let ((arg (get-keyword #:init-smob initargs #f)))
+ (if arg
+ arg
+ (let ((ret (apply (slot-ref (class-of obj) 'new-function) (get-keyword #:args initargs '()))))
+ ;; if the class is registered with runtime environment,
+ ;; new-Function will return a <swig> goops class. In that case, extract the smob
+ ;; from that goops class and set it as the current smob.
+ (if (slot-exists? ret 'swig-smob)
+ (slot-ref ret 'swig-smob)
+ ret))))))
+
+(define (display-address o file)
+ (display (number->string (object-address o) 16) file))
+
+(define (display-pointer-address o file)
+ ;; Don't fail if the function SWIG-PointerAddress is not present.
+ (let ((address (false-if-exception (SWIG-PointerAddress o))))
+ (if address
+ (begin
+ (display " @ " file)
+ (display (number->string address 16) file)))))
+
+(define-method (write (o <swig>) file)
+ ;; We display _two_ addresses to show the object's identity:
+ ;; * first the address of the GOOPS proxy object,
+ ;; * second the pointer address.
+ ;; The reason is that proxy objects are created and discarded on the
+ ;; fly, so different proxy objects for the same C object will appear.
+ (let ((class (class-of o)))
+ (if (slot-bound? class 'name)
+ (begin
+ (display "#<" file)
+ (display (class-name class) file)
+ (display #\space file)
+ (display-address o file)
+ (display-pointer-address o file)
+ (display ">" file))
+ (next-method))))
+
+(export <swig-metaclass> <swig>)
+
+;;; common.scm ends here
diff --git a/gnuradio-core/src/guile/gnuradio/core.scm b/gnuradio-core/src/guile/gnuradio/core.scm
new file mode 100644
index 000000000..b24d5afa9
--- /dev/null
+++ b/gnuradio-core/src/guile/gnuradio/core.scm
@@ -0,0 +1,23 @@
+;;; Glue the separate pieces of gnuradio-core into a single module
+
+(define-module (gnuradio core)
+ #:use-module (gnuradio gnuradio_core_runtime)
+ #:use-module (gnuradio runtime-shim)
+ #:use-module (gnuradio gnuradio_core_filter)
+ #:use-module (gnuradio gnuradio_core_io)
+ #:use-module (gnuradio gnuradio_core_general)
+ #:use-module (gnuradio gnuradio_core_gengen)
+ #:use-module (gnuradio gnuradio_core_hier)
+ #:duplicates (merge-generics check))
+
+(re-export-all '(gnuradio gnuradio_core_runtime))
+(re-export-all '(gnuradio runtime-shim))
+(re-export-all '(gnuradio gnuradio_core_filter))
+(re-export-all '(gnuradio gnuradio_core_io))
+(re-export-all '(gnuradio gnuradio_core_general))
+(re-export-all '(gnuradio gnuradio_core_gengen))
+(re-export-all '(gnuradio gnuradio_core_hier))
+
+;;; Return #t if x is not #f
+(define-public (true? x)
+ (and x #t))
diff --git a/gnuradio-core/src/guile/gnuradio/export-safely.scm b/gnuradio-core/src/guile/gnuradio/export-safely.scm
new file mode 100644
index 000000000..664292d2b
--- /dev/null
+++ b/gnuradio-core/src/guile/gnuradio/export-safely.scm
@@ -0,0 +1,90 @@
+;;;
+;;; 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 module implements a macro, export-safely, that avoids
+;;; exporting symbols that are actually generic-functions imported
+;;; (explicity or implicitly) from elsewhere.
+;;;
+;;; This hackery is required so that the swig generated goops wrappers
+;;; don't stomp on each other. For background on what this is about
+;;; see this thread:
+;;;
+;;; http://lists.gnu.org/archive/html/guile-user/2006-05/msg00007.html
+;;;
+;;; Don't expect to understand what's going on here without looking at
+;;; the guts of the module system (implemented in ice-9/boot-9.scm) and
+;;; having a pretty good understanding of goops and generic-functions.
+
+
+(define-module (gnuradio export-safely)
+ #:use-module (oop goops)
+ #:use-module (srfi srfi-1)
+ #:export-syntax (export-safely))
+
+(define-public (generics-in-module module)
+ (let ((lst '()))
+ (module-for-each (lambda (sym var)
+ (if (variable-bound? var)
+ (let ((v (variable-ref var)))
+ (cond ((is-a? v <generic>)
+ (set! lst (cons v lst)))))))
+ module)
+ lst))
+
+(define-public (generic-function-names-in-module module)
+ (map generic-function-name (generics-in-module module)))
+
+(define-public (generic-function-names-in-imported-modules module)
+ (concatenate (map generic-function-names-in-module (module-uses module))))
+
+(define-public (export-syms-if-not-imported-gf list-of-syms)
+ (let ((gf-names (generic-function-names-in-imported-modules (current-module))))
+ (let ((to-export (filter (lambda (sym)
+ (not (memq sym gf-names)))
+ (delete-duplicates list-of-syms))))
+ (module-export! (current-module) to-export))))
+
+(defmacro export-safely names
+ `(export-syms-if-not-imported-gf ',names))
+
+
+(define-public (names-in-module module)
+ (let ((lst '()))
+ (module-for-each (lambda (sym var)
+ (if (variable-bound? var)
+ (set! lst (cons sym lst))))
+ module)
+ lst))
+
+(define-public (names-in-imported-modules module)
+ (delete-duplicates (concatenate (map names-in-module (module-uses module)))))
+
+(define-public (re-export-all src-module-name)
+ (let ((current (current-module))
+ (src-module (resolve-interface src-module-name)))
+
+ (define (ok-to-re-export? name)
+ (let ((var (module-variable current name)))
+ (cond ((not var) #f) ; Undefined var
+ ((eq? var (module-local-variable current name)) #f) ; local var
+ (else #t)))) ; OK
+
+ (module-re-export! current
+ (filter ok-to-re-export?
+ (names-in-module src-module)))))
diff --git a/gnuradio-core/src/guile/gnuradio/runtime-shim.scm b/gnuradio-core/src/guile/gnuradio/runtime-shim.scm
new file mode 100644
index 000000000..c08d3947c
--- /dev/null
+++ b/gnuradio-core/src/guile/gnuradio/runtime-shim.scm
@@ -0,0 +1,89 @@
+;;;
+;;; 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/>.
+;;;
+
+(define-module (gnuradio runtime-shim)
+ #:use-module (oop goops)
+ #:use-module (gnuradio gnuradio_core_runtime)
+ #:duplicates (merge-generics replace check))
+
+(define-class <gr-endpoint> (<object>)
+ (block #:accessor block #:init-keyword #:block)
+ (port #:init-value 0 #:accessor port #:init-keyword #:port))
+
+(define (gr:ep block port)
+ (make <gr-endpoint>
+ #:block (coerce-to-basic-block block) #:port port))
+
+(define (coerce-to-endpoint ep)
+ (cond ((is-a? ep <gr-endpoint>) ep)
+ ((false-if-exception (gr:to-basic-block ep))
+ => (lambda (x) (gr:ep x 0)))
+ ((and (pair? ep) (= 2 (length ep))
+ (false-if-exception (gr:to-basic-block (car ep))))
+ => (lambda (x) (gr:ep x (cadr ep))))
+ (else (error "Cannot coerce to an endpoint: " ep))))
+
+(define (coerce-to-basic-block block)
+ (cond ((is-a? block <gr-basic-block-sptr>) block)
+ ((false-if-exception (gr:to-basic-block block)) => (lambda (x) x))
+ (else (error "Cannot coerce to a gr_basic_block: " block))))
+
+(define (coerce-to-top-block block)
+ (cond ((is-a? block <gr-top-block-sptr>) block)
+ ((false-if-exception (gr:to-top-block block)) => (lambda (x) x))
+ (else (error "Cannot coerce to a gr_top_block: " block))))
+
+(define (coerce-to-hier-block2 block)
+ (cond ((is-a? block <gr-hier-block2-sptr>) block)
+ ((false-if-exception (gr:to-hier-block2 block)) => (lambda (x) x))
+ (else (error "Cannot coerce to a gr_hier_block2: " block))))
+
+
+;;; Connect one or more block endpoints. An endpoint is either a <gr-endpoint>,
+;;; a 2-list (block port), or a block instance. In the latter case, the port number
+;;; is assumed to be zero.
+;;;
+;;; If multiple arguments are provided, connect will attempt to wire them in series,
+;;; interpreting the endpoints as inputs or outputs as appropriate.
+(define-method (gr:connect hb . points)
+ (dis/connect "connect" gr:primitive-connect hb points))
+
+;;; Disconnect one or more block endpoints...
+(define-method (gr:disconnect hb . points)
+ (dis/connect "disconnect" gr:primitive-disconnect hb points))
+
+(define (dis/connect name gf hb points)
+ (let ((hb (coerce-to-hier-block2 hb))
+ (points (list->vector (map coerce-to-endpoint points))))
+
+ (define (op2 p0 p1)
+ (gf hb (block p0) (port p0) (block p1) (port p1)))
+
+ (let ((len (vector-length points)))
+ (case len
+ ((0) (error (string-append name " requires at least 1 endpoint; None provided.")))
+ ((1) (gf hb (vector-ref points 0)))
+ (else
+ (let loop ((n 1))
+ (cond ((< n len)
+ (op2 (vector-ref points (1- n)) (vector-ref points n))
+ (loop (1+ n))))))))))
+
+
+(export-safely <gr-endpoint> gr:ep gr:connect gr:disconnect)
diff --git a/gnuradio-core/src/guile/gnuradio/test-suite/guile-test b/gnuradio-core/src/guile/gnuradio/test-suite/guile-test
new file mode 100644
index 000000000..6dc1a9658
--- /dev/null
+++ b/gnuradio-core/src/guile/gnuradio/test-suite/guile-test
@@ -0,0 +1,241 @@
+#!/usr/bin/guile \
+-e main -s
+!#
+
+;;;; guile-test --- run the Guile test suite
+;;;; Jim Blandy <jimb@red-bean.com> --- May 1999
+;;;;
+;;;; Copyright (C) 1999, 2001, 2006 Free Software Foundation, Inc.
+;;;;
+;;;; This program 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 2, or (at your option)
+;;;; any later version.
+;;;;
+;;;; This program 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 software; see the file COPYING. If not, write to
+;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;;;; Boston, MA 02110-1301 USA
+
+
+;;;; Usage: [guile -e main -s] guile-test [OPTIONS] [TEST ...]
+;;;;
+;;;; Run tests from the Guile test suite. Report failures and
+;;;; unexpected passes to the standard output, along with a summary of
+;;;; all the results. Record each reported test outcome in the log
+;;;; file, `guile.log'. The exit status is #f if any of the tests
+;;;; fail or pass unexpectedly.
+;;;;
+;;;; Normally, guile-test scans the test directory, and executes all
+;;;; files whose names end in `.test'. (It assumes they contain
+;;;; Scheme code.) However, you can have it execute specific tests by
+;;;; listing their filenames on the command line.
+;;;;
+;;;; The option `--test-suite' can be given to specify the test
+;;;; directory. If no such option is given, the test directory is
+;;;; taken from the environment variable TEST_SUITE_DIR (if defined),
+;;;; otherwise a default directory that is hardcoded in this file is
+;;;; used (see "Installation" below).
+;;;;
+;;;; If present, the `--log-file LOG' option tells `guile-test' to put
+;;;; the log output in a file named LOG.
+;;;;
+;;;; If present, the `--debug' option will enable a debugging mode.
+;;;;
+;;;; If present, the `--flag-unresolved' option will cause guile-test
+;;;; to exit with failure status if any tests are UNRESOLVED.
+;;;;
+;;;;
+;;;; Installation:
+;;;;
+;;;; If you change the #! line at the top of this script to point at
+;;;; the Guile interpreter you want to test, you can call this script
+;;;; as an executable instead of having to pass it as a parameter to
+;;;; guile via "guile -e main -s guile-test". Further, you can edit
+;;;; the definition of default-test-suite to point to the parent
+;;;; directory of the `tests' tree, which makes it unnecessary to set
+;;;; the environment variable `TEST_SUITE_DIR'.
+;;;;
+;;;;
+;;;; Shortcomings:
+;;;;
+;;;; At the moment, due to a simple-minded implementation, test files
+;;;; must live in the test directory, and you must specify their names
+;;;; relative to the top of the test directory. If you want to send
+;;;; me a patch that fixes this, but still leaves sane test names in
+;;;; the log file, that would be great. At the moment, all the tests
+;;;; I care about are in the test directory, though.
+;;;;
+;;;; It would be nice if you could specify the Guile interpreter you
+;;;; want to test on the command line. As it stands, if you want to
+;;;; change which Guile interpreter you're testing, you need to edit
+;;;; the #! line at the top of this file, which is stupid.
+
+(define (main . args)
+ (let ((module (resolve-module '(gnuradio test-suite guile-test))))
+ (apply (module-ref module 'main) args)))
+
+(define-module (gnuradio test-suite guile-test)
+ :use-module (gnuradio test-suite lib)
+ :use-module (ice-9 getopt-long)
+ :use-module (ice-9 and-let-star)
+ :use-module (ice-9 rdelim)
+ :export (main data-file-name test-file-name))
+
+
+;;; User configurable settings:
+(define default-test-suite
+ (string-append (getenv "HOME") "/bogus-path/test-suite"))
+
+
+;;; Variables that will receive their actual values later.
+(define test-suite default-test-suite)
+
+(define tmp-dir #f)
+
+
+;;; General utilities, that probably should be in a library somewhere.
+
+;;; Enable debugging
+(define (enable-debug-mode)
+ (write-line %load-path)
+ (set! %load-verbosely #t)
+ (debug-enable 'backtrace 'debug))
+
+;;; Traverse the directory tree at ROOT, applying F to the name of
+;;; each file in the tree, including ROOT itself. For a subdirectory
+;;; SUB, if (F SUB) is true, we recurse into SUB. Do not follow
+;;; symlinks.
+(define (for-each-file f root)
+
+ ;; A "hard directory" is a path that denotes a directory and is not a
+ ;; symlink.
+ (define (file-is-hard-directory? filename)
+ (eq? (stat:type (lstat filename)) 'directory))
+
+ (let visit ((root root))
+ (let ((should-recur (f root)))
+ (if (and should-recur (file-is-hard-directory? root))
+ (let ((dir (opendir root)))
+ (let loop ()
+ (let ((entry (readdir dir)))
+ (cond
+ ((eof-object? entry) #f)
+ ((or (string=? entry ".")
+ (string=? entry "..")
+ (string=? entry "CVS")
+ (string=? entry "RCS"))
+ (loop))
+ (else
+ (visit (string-append root "/" entry))
+ (loop))))))))))
+
+
+;;; The test driver.
+
+
+;;; Localizing test files and temporary data files.
+
+(define (data-file-name filename)
+ (in-vicinity tmp-dir filename))
+
+(define (test-file-name test)
+ (in-vicinity test-suite test))
+
+;;; Return a list of all the test files in the test tree.
+(define (enumerate-tests test-dir)
+ (let ((root-len (+ 1 (string-length test-dir)))
+ (tests '()))
+ (for-each-file (lambda (file)
+ (if (has-suffix? file ".test")
+ (let ((short-name
+ (substring file root-len)))
+ (set! tests (cons short-name tests))))
+ #t)
+ test-dir)
+
+ ;; for-each-file presents the files in whatever order it finds
+ ;; them in the directory. We sort them here, so they'll always
+ ;; appear in the same order. This makes it easier to compare test
+ ;; log files mechanically.
+ (sort tests string<?)))
+
+(define (main args)
+ (let ((options (getopt-long args
+ `((test-suite
+ (single-char #\t)
+ (value #t))
+ (flag-unresolved
+ (single-char #\u))
+ (log-file
+ (single-char #\l)
+ (value #t))
+ (debug
+ (single-char #\d))))))
+ (define (opt tag default)
+ (let ((pair (assq tag options)))
+ (if pair (cdr pair) default)))
+
+ (if (opt 'debug #f)
+ (enable-debug-mode))
+
+ (set! test-suite
+ (or (opt 'test-suite #f)
+ (getenv "TEST_SUITE_DIR")
+ default-test-suite))
+
+ ;; directory where temporary files are created.
+ ;; when run from "make check", this must be under the build-dir,
+ ;; not the src-dir.
+ (set! tmp-dir (getcwd))
+
+ (let* ((tests
+ (let ((foo (opt '() '())))
+ (if (null? foo)
+ (enumerate-tests test-suite)
+ foo)))
+ (log-file
+ (opt 'log-file "guile.log")))
+
+ ;; Open the log file.
+ (let ((log-port (open-output-file log-file)))
+
+ ;; Register some reporters.
+ (let ((global-pass #t)
+ (counter (make-count-reporter)))
+ (register-reporter (car counter))
+ (register-reporter (make-log-reporter log-port))
+ (register-reporter user-reporter)
+ (register-reporter (lambda results
+ (case (car results)
+ ((unresolved)
+ (and (opt 'flag-unresolved #f)
+ (set! global-pass #f)))
+ ((fail upass error)
+ (set! global-pass #f)))))
+
+ ;; Run the tests.
+ (for-each (lambda (test)
+ (display (string-append "Running " test "\n"))
+ (with-test-prefix test
+ (load (test-file-name test))))
+ tests)
+
+ ;; Display the final counts, both to the user and in the log
+ ;; file.
+ (let ((counts ((cadr counter))))
+ (print-counts counts)
+ (print-counts counts log-port))
+
+ (close-port log-port)
+ (quit global-pass))))))
+
+
+;;; Local Variables:
+;;; mode: scheme
+;;; End:
diff --git a/gnuradio-core/src/guile/gnuradio/test-suite/lib.scm b/gnuradio-core/src/guile/gnuradio/test-suite/lib.scm
new file mode 100644
index 000000000..458e627de
--- /dev/null
+++ b/gnuradio-core/src/guile/gnuradio/test-suite/lib.scm
@@ -0,0 +1,618 @@
+;;;; test-suite/lib.scm --- generic support for testing
+;;;; Copyright (C) 1999, 2000, 2001, 2004, 2006, 2007 Free Software Foundation, Inc.
+;;;;
+;;;; This program 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 2, or (at your option)
+;;;; any later version.
+;;;;
+;;;; This program 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 software; see the file COPYING. If not, write to
+;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;;;; Boston, MA 02110-1301 USA
+
+(define-module (gnuradio test-suite lib)
+ :use-module (ice-9 stack-catch)
+ :use-module (ice-9 regex)
+ :use-module (ice-9 syncase)
+ :export (
+
+ ;; Exceptions which are commonly being tested for.
+ exception:bad-variable
+ exception:missing-expression
+ exception:out-of-range exception:unbound-var
+ exception:used-before-defined
+ exception:wrong-num-args exception:wrong-type-arg
+ exception:numerical-overflow
+ exception:struct-set!-denied
+ exception:system-error
+ exception:miscellaneous-error
+ exception:string-contains-nul
+
+ ;; Reporting passes and failures.
+ run-test
+ pass-if expect-fail
+ pass-if-exception expect-fail-exception
+ pass-if-throw expect-fail-throw
+
+ ;; Naming groups of tests in a regular fashion.
+ with-test-prefix with-test-prefix* current-test-prefix
+ format-test-name
+
+ ;; Using the debugging evaluator.
+ with-debugging-evaluator with-debugging-evaluator*
+
+ ;; Reporting results in various ways.
+ register-reporter unregister-reporter reporter-registered?
+ make-count-reporter print-counts
+ make-log-reporter
+ full-reporter
+ user-reporter
+
+ ;; srfi-64 compatibility macros
+ test-equal
+ test-eqv
+ test-eq
+))
+
+
+;;;; If you're using Emacs's Scheme mode:
+;;;; (put 'with-test-prefix 'scheme-indent-function 1)
+
+
+;;;; CORE FUNCTIONS
+;;;;
+;;;; The function (run-test name expected-result thunk) is the heart of the
+;;;; testing environment. The first parameter NAME is a unique name for the
+;;;; test to be executed (for an explanation of this parameter see below under
+;;;; TEST NAMES). The second parameter EXPECTED-RESULT is a boolean value
+;;;; that indicates whether the corresponding test is expected to pass. If
+;;;; EXPECTED-RESULT is #t the test is expected to pass, if EXPECTED-RESULT is
+;;;; #f the test is expected to fail. Finally, THUNK is the function that
+;;;; actually performs the test. For example:
+;;;;
+;;;; (run-test "integer addition" #t (lambda () (= 2 (+ 1 1))))
+;;;;
+;;;; To report success, THUNK should either return #t or throw 'pass. To
+;;;; report failure, THUNK should either return #f or throw 'fail. If THUNK
+;;;; returns a non boolean value or throws 'unresolved, this indicates that
+;;;; the test did not perform as expected. For example the property that was
+;;;; to be tested could not be tested because something else went wrong.
+;;;; THUNK may also throw 'untested to indicate that the test was deliberately
+;;;; not performed, for example because the test case is not complete yet.
+;;;; Finally, if THUNK throws 'unsupported, this indicates that this test
+;;;; requires some feature that is not available in the configured testing
+;;;; environment. All other exceptions thrown by THUNK are considered as
+;;;; errors.
+;;;;
+;;;;
+;;;; Convenience macros for tests expected to pass or fail
+;;;;
+;;;; * (pass-if name body) is a short form for
+;;;; (run-test name #t (lambda () body))
+;;;; * (expect-fail name body) is a short form for
+;;;; (run-test name #f (lambda () body))
+;;;;
+;;;; For example:
+;;;;
+;;;; (pass-if "integer addition" (= 2 (+ 1 1)))
+;;;;
+;;;;
+;;;; Convenience macros to test for exceptions
+;;;;
+;;;; The following macros take exception parameters which are pairs
+;;;; (type . message), where type is a symbol that denotes an exception type
+;;;; like 'wrong-type-arg or 'out-of-range, and message is a string holding a
+;;;; regular expression that describes the error message for the exception
+;;;; like "Argument .* out of range".
+;;;;
+;;;; * (pass-if-exception name exception body) will pass if the execution of
+;;;; body causes the given exception to be thrown. If no exception is
+;;;; thrown, the test fails. If some other exception is thrown, is is an
+;;;; error.
+;;;; * (expect-fail-exception name exception body) will pass unexpectedly if
+;;;; the execution of body causes the given exception to be thrown. If no
+;;;; exception is thrown, the test fails expectedly. If some other
+;;;; exception is thrown, it is an error.
+
+
+;;;; TEST NAMES
+;;;;
+;;;; Every test in the test suite has a unique name, to help
+;;;; developers find tests that are failing (or unexpectedly passing),
+;;;; and to help gather statistics.
+;;;;
+;;;; A test name is a list of printable objects. For example:
+;;;; ("ports.scm" "file" "read and write back list of strings")
+;;;; ("ports.scm" "pipe" "read")
+;;;;
+;;;; Test names may contain arbitrary objects, but they always have
+;;;; the following properties:
+;;;; - Test names can be compared with EQUAL?.
+;;;; - Test names can be reliably stored and retrieved with the standard WRITE
+;;;; and READ procedures; doing so preserves their identity.
+;;;;
+;;;; For example:
+;;;;
+;;;; (pass-if "simple addition" (= 4 (+ 2 2)))
+;;;;
+;;;; In that case, the test name is the list ("simple addition").
+;;;;
+;;;; In the case of simple tests the expression that is tested would often
+;;;; suffice as a test name by itself. Therefore, the convenience macros
+;;;; pass-if and expect-fail provide a shorthand notation that allows to omit
+;;;; a test name in such cases.
+;;;;
+;;;; * (pass-if expression) is a short form for
+;;;; (run-test 'expression #t (lambda () expression))
+;;;; * (expect-fail expression) is a short form for
+;;;; (run-test 'expression #f (lambda () expression))
+;;;;
+;;;; For example:
+;;;;
+;;;; (pass-if (= 2 (+ 1 1)))
+;;;;
+;;;; The WITH-TEST-PREFIX syntax and WITH-TEST-PREFIX* procedure establish
+;;;; a prefix for the names of all tests whose results are reported
+;;;; within their dynamic scope. For example:
+;;;;
+;;;; (begin
+;;;; (with-test-prefix "basic arithmetic"
+;;;; (pass-if "addition" (= (+ 2 2) 4))
+;;;; (pass-if "subtraction" (= (- 4 2) 2)))
+;;;; (pass-if "multiplication" (= (* 2 2) 4)))
+;;;;
+;;;; In that example, the three test names are:
+;;;; ("basic arithmetic" "addition"),
+;;;; ("basic arithmetic" "subtraction"), and
+;;;; ("multiplication").
+;;;;
+;;;; WITH-TEST-PREFIX can be nested. Each WITH-TEST-PREFIX postpends
+;;;; a new element to the current prefix:
+;;;;
+;;;; (with-test-prefix "arithmetic"
+;;;; (with-test-prefix "addition"
+;;;; (pass-if "integer" (= (+ 2 2) 4))
+;;;; (pass-if "complex" (= (+ 2+3i 4+5i) 6+8i)))
+;;;; (with-test-prefix "subtraction"
+;;;; (pass-if "integer" (= (- 2 2) 0))
+;;;; (pass-if "complex" (= (- 2+3i 1+2i) 1+1i))))
+;;;;
+;;;; The four test names here are:
+;;;; ("arithmetic" "addition" "integer")
+;;;; ("arithmetic" "addition" "complex")
+;;;; ("arithmetic" "subtraction" "integer")
+;;;; ("arithmetic" "subtraction" "complex")
+;;;;
+;;;; To print a name for a human reader, we DISPLAY its elements,
+;;;; separated by ": ". So, the last set of test names would be
+;;;; reported as:
+;;;;
+;;;; arithmetic: addition: integer
+;;;; arithmetic: addition: complex
+;;;; arithmetic: subtraction: integer
+;;;; arithmetic: subtraction: complex
+;;;;
+;;;; The Guile benchmarks use with-test-prefix to include the name of
+;;;; the source file containing the test in the test name, to help
+;;;; developers to find failing tests, and to provide each file with its
+;;;; own namespace.
+
+
+;;;; REPORTERS
+;;;;
+;;;; A reporter is a function which we apply to each test outcome.
+;;;; Reporters can log results, print interesting results to the
+;;;; standard output, collect statistics, etc.
+;;;;
+;;;; A reporter function takes two mandatory arguments, RESULT and TEST, and
+;;;; possibly additional arguments depending on RESULT; its return value
+;;;; is ignored. RESULT has one of the following forms:
+;;;;
+;;;; pass - The test named TEST passed.
+;;;; Additional arguments are ignored.
+;;;; upass - The test named TEST passed unexpectedly.
+;;;; Additional arguments are ignored.
+;;;; fail - The test named TEST failed.
+;;;; Additional arguments are ignored.
+;;;; xfail - The test named TEST failed, as expected.
+;;;; Additional arguments are ignored.
+;;;; unresolved - The test named TEST did not perform as expected, for
+;;;; example the property that was to be tested could not be
+;;;; tested because something else went wrong.
+;;;; Additional arguments are ignored.
+;;;; untested - The test named TEST was not actually performed, for
+;;;; example because the test case is not complete yet.
+;;;; Additional arguments are ignored.
+;;;; unsupported - The test named TEST requires some feature that is not
+;;;; available in the configured testing environment.
+;;;; Additional arguments are ignored.
+;;;; error - An error occurred while the test named TEST was
+;;;; performed. Since this result means that the system caught
+;;;; an exception it could not handle, the exception arguments
+;;;; are passed as additional arguments.
+;;;;
+;;;; This library provides some standard reporters for logging results
+;;;; to a file, reporting interesting results to the user, and
+;;;; collecting totals.
+;;;;
+;;;; You can use the REGISTER-REPORTER function and friends to add
+;;;; whatever reporting functions you like. If you don't register any
+;;;; reporters, the library uses FULL-REPORTER, which simply writes
+;;;; all results to the standard output.
+
+
+;;;; MISCELLANEOUS
+;;;;
+
+;;; Define some exceptions which are commonly being tested for.
+(define exception:bad-variable
+ (cons 'syntax-error "Bad variable"))
+(define exception:missing-expression
+ (cons 'misc-error "^missing or extra expression"))
+(define exception:out-of-range
+ (cons 'out-of-range "^.*out of range"))
+(define exception:unbound-var
+ (cons 'unbound-variable "^Unbound variable"))
+(define exception:used-before-defined
+ (cons 'unbound-variable "^Variable used before given a value"))
+(define exception:wrong-num-args
+ (cons 'wrong-number-of-args "^Wrong number of arguments"))
+(define exception:wrong-type-arg
+ (cons 'wrong-type-arg "^Wrong type"))
+(define exception:numerical-overflow
+ (cons 'numerical-overflow "^Numerical overflow"))
+(define exception:struct-set!-denied
+ (cons 'misc-error "^set! denied for field"))
+(define exception:system-error
+ (cons 'system-error ".*"))
+(define exception:miscellaneous-error
+ (cons 'misc-error "^.*"))
+
+;; as per throw in scm_to_locale_stringn()
+(define exception:string-contains-nul
+ (cons 'misc-error "^string contains #\\\\nul character"))
+
+
+;;; Display all parameters to the default output port, followed by a newline.
+(define (display-line . objs)
+ (for-each display objs)
+ (newline))
+
+;;; Display all parameters to the given output port, followed by a newline.
+(define (display-line-port port . objs)
+ (for-each (lambda (obj) (display obj port)) objs)
+ (newline port))
+
+
+;;;; CORE FUNCTIONS
+;;;;
+
+;;; The central testing routine.
+;;; The idea is taken from Greg, the GNUstep regression test environment.
+(define run-test #f)
+(let ((test-running #f))
+ (define (local-run-test name expect-pass thunk)
+ (if test-running
+ (error "Nested calls to run-test are not permitted.")
+ (let ((test-name (full-name name)))
+ (set! test-running #t)
+ (catch #t
+ (lambda ()
+ (let ((result (thunk)))
+ (if (eq? result #t) (throw 'pass))
+ (if (eq? result #f) (throw 'fail))
+ (throw 'unresolved)))
+ (lambda (key . args)
+ (case key
+ ((pass)
+ (report (if expect-pass 'pass 'upass) test-name))
+ ((fail)
+ (report (if expect-pass 'fail 'xfail) test-name))
+ ((unresolved untested unsupported)
+ (report key test-name))
+ ((quit)
+ (report 'unresolved test-name)
+ (quit))
+ (else
+ (report 'error test-name (cons key args))))))
+ (set! test-running #f))))
+ (set! run-test local-run-test))
+
+;;; A short form for tests that are expected to pass, taken from Greg.
+(defmacro pass-if (name . rest)
+ (if (and (null? rest) (pair? name))
+ ;; presume this is a simple test, i.e. (pass-if (even? 2))
+ ;; where the body should also be the name.
+ `(run-test ',name #t (lambda () ,name))
+ `(run-test ,name #t (lambda () ,@rest))))
+
+;;; A short form for tests that are expected to fail, taken from Greg.
+(defmacro expect-fail (name . rest)
+ (if (and (null? rest) (pair? name))
+ ;; presume this is a simple test, i.e. (expect-fail (even? 2))
+ ;; where the body should also be the name.
+ `(run-test ',name #f (lambda () ,name))
+ `(run-test ,name #f (lambda () ,@rest))))
+
+;;; A helper function to implement the macros that test for exceptions.
+;;;
+;;; This doesn't work for all exceptions, just those that were
+;;; raised by scm-error or error. This doesn't include those
+;;; raised by throw in the general case, or SWIG in particular.
+;;;
+;;; See also run-raise-exception, pass-if-throw and expect-fail-throw
+;;; for alternatives that work with all exceptions.
+(define (run-test-exception name exception expect-pass thunk)
+ (run-test name expect-pass
+ (lambda ()
+ (stack-catch (car exception)
+ (lambda () (thunk) #f)
+ (lambda (key proc message . rest)
+ (cond
+ ;; handle explicit key
+ ((string-match (cdr exception) message)
+ #t)
+ ;; handle `(error ...)' which uses `misc-error' for key and doesn't
+ ;; yet format the message and args (we have to do it here).
+ ((and (eq? 'misc-error (car exception))
+ (list? rest)
+ (string-match (cdr exception)
+ (apply simple-format #f message (car rest))))
+ #t)
+ ;; handle syntax errors which use `syntax-error' for key and don't
+ ;; yet format the message and args (we have to do it here).
+ ((and (eq? 'syntax-error (car exception))
+ (list? rest)
+ (string-match (cdr exception)
+ (apply simple-format #f message (car rest))))
+ #t)
+ ;; unhandled; throw again
+ (else
+ (apply throw key proc message rest))))))))
+
+;;; A short form for tests that expect a certain exception to be thrown.
+(defmacro pass-if-exception (name exception body . rest)
+ `(,run-test-exception ,name ,exception #t (lambda () ,body ,@rest)))
+
+;;; A short form for tests expected to fail to throw a certain exception.
+(defmacro expect-fail-exception (name exception body . rest)
+ `(,run-test-exception ,name ,exception #f (lambda () ,body ,@rest)))
+
+
+;;; Helper for macros below
+(define (run-test-throw name exception-key expect-pass thunk)
+ (run-test name expect-pass
+ (lambda ()
+ (stack-catch exception-key
+ (lambda () (thunk) #f)
+ (lambda (key . rest) #t)))))
+
+;;; A short form for tests that expect a certain exception to be thrown,
+;;; where the exception is specified only by the exception-key symbol.
+(defmacro pass-if-throw (name exception-key body . rest)
+ `(,run-test-throw ,name ,exception-key #t (lambda () ,body ,@rest)))
+
+;;; A short form for tests that expect a certain exception to be thrown,
+;;; where the exception is specified only by the exception-key symbol.
+(defmacro expect-fail-throw (name exception-key body . rest)
+ `(,run-test-throw ,name ,exception-key #f (lambda () ,body ,@rest)))
+
+;;;; TEST NAMES
+;;;;
+
+;;;; Turn a test name into a nice human-readable string.
+(define (format-test-name name)
+ (call-with-output-string
+ (lambda (port)
+ (let loop ((name name)
+ (separator ""))
+ (if (pair? name)
+ (begin
+ (display separator port)
+ (display (car name) port)
+ (loop (cdr name) ": ")))))))
+
+;;;; For a given test-name, deliver the full name including all prefixes.
+(define (full-name name)
+ (append (current-test-prefix) (list name)))
+
+;;; A fluid containing the current test prefix, as a list.
+(define prefix-fluid (make-fluid))
+(fluid-set! prefix-fluid '())
+(define (current-test-prefix)
+ (fluid-ref prefix-fluid))
+
+;;; Postpend PREFIX to the current name prefix while evaluting THUNK.
+;;; The name prefix is only changed within the dynamic scope of the
+;;; call to with-test-prefix*. Return the value returned by THUNK.
+(define (with-test-prefix* prefix thunk)
+ (with-fluids ((prefix-fluid
+ (append (fluid-ref prefix-fluid) (list prefix))))
+ (thunk)))
+
+;;; (with-test-prefix PREFIX BODY ...)
+;;; Postpend PREFIX to the current name prefix while evaluating BODY ...
+;;; The name prefix is only changed within the dynamic scope of the
+;;; with-test-prefix expression. Return the value returned by the last
+;;; BODY expression.
+(defmacro with-test-prefix (prefix . body)
+ `(with-test-prefix* ,prefix (lambda () ,@body)))
+
+;;; Call THUNK using the debugging evaluator.
+(define (with-debugging-evaluator* thunk)
+ (let ((dopts #f))
+ (dynamic-wind
+ (lambda ()
+ (set! dopts (debug-options))
+ (debug-enable 'debug))
+ thunk
+ (lambda ()
+ (debug-options dopts)))))
+
+;;; Evaluate BODY... using the debugging evaluator.
+(define-macro (with-debugging-evaluator . body)
+ `(with-debugging-evaluator* (lambda () ,@body)))
+
+
+
+;;;; REPORTERS
+;;;;
+
+;;; The global list of reporters.
+(define reporters '())
+
+;;; The default reporter, to be used only if no others exist.
+(define default-reporter #f)
+
+;;; Add the procedure REPORTER to the current set of reporter functions.
+;;; Signal an error if that reporter procedure object is already registered.
+(define (register-reporter reporter)
+ (if (memq reporter reporters)
+ (error "register-reporter: reporter already registered: " reporter))
+ (set! reporters (cons reporter reporters)))
+
+;;; Remove the procedure REPORTER from the current set of reporter
+;;; functions. Signal an error if REPORTER is not currently registered.
+(define (unregister-reporter reporter)
+ (if (memq reporter reporters)
+ (set! reporters (delq! reporter reporters))
+ (error "unregister-reporter: reporter not registered: " reporter)))
+
+;;; Return true iff REPORTER is in the current set of reporter functions.
+(define (reporter-registered? reporter)
+ (if (memq reporter reporters) #t #f))
+
+;;; Send RESULT to all currently registered reporter functions.
+(define (report . args)
+ (if (pair? reporters)
+ (for-each (lambda (reporter) (apply reporter args))
+ reporters)
+ (apply default-reporter args)))
+
+
+;;;; Some useful standard reporters:
+;;;; Count reporters count the occurrence of each test result type.
+;;;; Log reporters write all test results to a given log file.
+;;;; Full reporters write all test results to the standard output.
+;;;; User reporters write interesting test results to the standard output.
+
+;;; The complete list of possible test results.
+(define result-tags
+ '((pass "PASS" "passes: ")
+ (fail "FAIL" "failures: ")
+ (upass "UPASS" "unexpected passes: ")
+ (xfail "XFAIL" "expected failures: ")
+ (unresolved "UNRESOLVED" "unresolved test cases: ")
+ (untested "UNTESTED" "untested test cases: ")
+ (unsupported "UNSUPPORTED" "unsupported test cases: ")
+ (error "ERROR" "errors: ")))
+
+;;; The list of important test results.
+(define important-result-tags
+ '(fail upass unresolved error))
+
+;;; Display a single test result in formatted form to the given port
+(define (print-result port result name . args)
+ (let* ((tag (assq result result-tags))
+ (label (if tag (cadr tag) #f)))
+ (if label
+ (begin
+ (display label port)
+ (display ": " port)
+ (display (format-test-name name) port)
+ (if (pair? args)
+ (begin
+ (display " - arguments: " port)
+ (write args port)))
+ (newline port))
+ (error "(test-suite lib) FULL-REPORTER: unrecognized result: "
+ result))))
+
+;;; Return a list of the form (COUNTER RESULTS), where:
+;;; - COUNTER is a reporter procedure, and
+;;; - RESULTS is a procedure taking no arguments which returns the
+;;; results seen so far by COUNTER. The return value is an alist
+;;; mapping outcome symbols (`pass', `fail', etc.) onto counts.
+(define (make-count-reporter)
+ (let ((counts (map (lambda (tag) (cons (car tag) 0)) result-tags)))
+ (list
+ (lambda (result name . args)
+ (let ((pair (assq result counts)))
+ (if pair
+ (set-cdr! pair (+ 1 (cdr pair)))
+ (error "count-reporter: unexpected test result: "
+ (cons result (cons name args))))))
+ (lambda ()
+ (append counts '())))))
+
+;;; Print a count reporter's results nicely. Pass this function the value
+;;; returned by a count reporter's RESULTS procedure.
+(define (print-counts results . port?)
+ (let ((port (if (pair? port?)
+ (car port?)
+ (current-output-port))))
+ (newline port)
+ (display-line-port port "Totals for this test run:")
+ (for-each
+ (lambda (tag)
+ (let ((result (assq (car tag) results)))
+ (if result
+ (display-line-port port (caddr tag) (cdr result))
+ (display-line-port port
+ "Test suite bug: "
+ "no total available for `" (car tag) "'"))))
+ result-tags)
+ (newline port)))
+
+;;; Return a reporter procedure which prints all results to the file
+;;; FILE, in human-readable form. FILE may be a filename, or a port.
+(define (make-log-reporter file)
+ (let ((port (if (output-port? file) file
+ (open-output-file file))))
+ (lambda args
+ (apply print-result port args)
+ (force-output port))))
+
+;;; A reporter that reports all results to the user.
+(define (full-reporter . args)
+ (apply print-result (current-output-port) args))
+
+;;; A reporter procedure which shows interesting results (failures,
+;;; unexpected passes etc.) to the user.
+(define (user-reporter result name . args)
+ (if (memq result important-result-tags)
+ (apply full-reporter result name args)))
+
+(set! default-reporter full-reporter)
+
+
+;;; Macros for a bit of compatibility with srfi-64
+;;; (test-equal [name] expected test-expr)
+(define-syntax test-equal
+ (syntax-rules ()
+ ((_ expected test-expr)
+ (pass-if (equal? expected test-expr)))
+ ((_ name expected test-exprt)
+ (pass-if name (equal? expected test-expr)))))
+
+;;; (test-eqv [name] expected test-expr)
+(define-syntax test-eqv
+ (syntax-rules ()
+ ((_ expected test-expr)
+ (pass-if (eqv? expected test-expr)))
+ ((_ name expected test-exprt)
+ (pass-if name (eqv? expected test-expr)))))
+
+;;; (test-eq [name] expected test-expr)
+(define-syntax test-eq
+ (syntax-rules ()
+ ((_ expected test-expr)
+ (pass-if (eq? expected test-expr)))
+ ((_ name expected test-exprt)
+ (pass-if name (eq? expected test-expr)))))
diff --git a/gnuradio-core/src/guile/gnuradio/waveform.scm b/gnuradio-core/src/guile/gnuradio/waveform.scm
new file mode 100644
index 000000000..0031be931
--- /dev/null
+++ b/gnuradio-core/src/guile/gnuradio/waveform.scm
@@ -0,0 +1,54 @@
+;;;
+;;; 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/>.
+;;;
+
+(define-module (gnuradio waveform)
+ #:use-module (ice-9 syncase)
+ #:export-syntax (define-waveform))
+
+
+(define *registry* '()) ; alist
+(define *last-registered* #f)
+
+
+(define-syntax define-waveform
+ (syntax-rules (vars blocks connections)
+ ((_ (name cmd-line-args)
+ (vars (v-name v-val) ...)
+ (blocks (b-name b-val) ...)
+ (connections (endpoint1 endpoint2 ...) ...))
+ (waveform-register 'name
+ (lambda (cmd-line-args)
+ (let* ((v-name v-val) ...
+ (b-name b-val) ...
+ (tb (gr:top-block-swig "waveform-top-block")))
+ (gr:connect tb endpoint1 endpoint2 ...) ...
+ tb))))))
+
+
+(define-public (waveform-register name thunk)
+ (set! *registry* (assoc-set! *registry* name thunk))
+ (set! *last-registered* thunk)
+ #t)
+
+(define-public (waveform-lookup name)
+ (let ((r (assoc name *registry*)))
+ (and r (cdr r))))
+
+(define-public (waveform-last-registered)
+ *last-registered*)
diff --git a/gnuradio-core/src/guile/run_guile_tests.in b/gnuradio-core/src/guile/run_guile_tests.in
new file mode 100644
index 000000000..3aca7bdb0
--- /dev/null
+++ b/gnuradio-core/src/guile/run_guile_tests.in
@@ -0,0 +1,15 @@
+#!/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
+
+# We're in gnuradio-core, we don't need these
+# add_local_paths \
+# "" \
+# "" \
+# ""
+
+@GUILE@ -e main -c '(use-modules (gnuradio test-suite guile-test))' -t @srcdir@/tests
diff --git a/gnuradio-core/src/guile/tests/00_runtime_basics.test b/gnuradio-core/src/guile/tests/00_runtime_basics.test
new file mode 100644
index 000000000..18b298f22
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/00_runtime_basics.test
@@ -0,0 +1,158 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+(define (vector-map f v)
+ (list->vector (map f (vector->list v))))
+
+
+(with-test-prefix "connect-1"
+ (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
+ (expected-result (vector-map (lambda (x) (* x 2)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-i src-data #f))
+ (op (gr:multiply-const-ii 2))
+ (dst (gr:vector-sink-i)))
+
+ ;; using gr:ep to create endpoints
+ (gr:connect tb (gr:ep src 0) (gr:ep op 0))
+ (gr:connect tb (gr:ep op 0) (gr:ep dst 0))
+
+ (gr:run tb)
+ ;;(pass-if (equal? expected-result (gr:data dst)))
+ (test-equal expected-result (gr:data dst))
+ ))
+
+(with-test-prefix "connect-2"
+ (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
+ (expected-result (vector-map (lambda (x) (* x 2)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-i src-data #f))
+ (op (gr:multiply-const-ii 2))
+ (dst (gr:vector-sink-i)))
+
+ ;; using just blocks
+ (gr:connect tb src op)
+ (gr:connect tb op dst)
+
+ (gr:run tb)
+ (test-equal expected-result (gr:data dst))))
+
+
+(with-test-prefix "connect-3"
+ (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
+ (expected-result (vector-map (lambda (x) (* x 2)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-i src-data #f))
+ (op (gr:multiply-const-ii 2))
+ (dst (gr:vector-sink-i)))
+
+ ;; using lists to represent endpoints
+ (gr:connect tb `(,src 0) `(,op 0))
+ (gr:connect tb `(,op 0) `(,dst 0))
+
+ (gr:run tb)
+ (test-equal expected-result (gr:data dst))))
+
+
+(with-test-prefix "connect-4"
+ (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
+ (expected-result (vector-map (lambda (x) (* x 2)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-i src-data #f))
+ (op (gr:multiply-const-ii 2))
+ (dst (gr:vector-sink-i)))
+
+ ;; using multiple endpoints
+ (gr:connect tb src op dst)
+
+ (gr:run tb)
+ (test-equal expected-result (gr:data dst))))
+
+(with-test-prefix "connect-5"
+ (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
+ (expected-result (vector-map (lambda (x) (* x 2)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-i src-data #f))
+ (op (gr:multiply-const-ii 2))
+ (dst (gr:vector-sink-i)))
+
+ (pass-if-throw "bad port exception" 'swig-exception
+ (gr:connect tb src op (gr:ep dst 1)))
+ ))
+
+(with-test-prefix "gr_top_block::start throw"
+ (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
+ (expected-result (vector-map (lambda (x) (* x 2)) src-data))
+ (tb (gr:top-block-swig "QA top block"))
+ (src (gr:vector-source-i src-data #f))
+ (op (gr:multiply-const-ii 2))
+ (dst (gr:vector-sink-i)))
+
+ ;; We deliberately don't connect op's output
+ (gr:connect tb src op)
+
+ ;; Which will lead to an exception here...
+ (pass-if-throw "throws std::runtime_error" 'swig-exception
+ (gr:run tb))
+ ))
+
+(with-test-prefix "io-signature-1"
+ (let ((ios1 (gr:io-signature 1 2 8))
+ (ios2 (gr:io-signature2 1 2 16 32))
+ (ios3 (gr:io-signature3 1 -1 14 32 48))
+ (iosv (gr:io-signaturev 1 4 '(1 2 3))))
+
+ (test-equal 1 (gr:min-streams ios1))
+ (test-equal 2 (gr:max-streams ios1))
+ (test-equal 8 (gr:sizeof-stream-item ios1 0))
+ (test-equal 8 (gr:sizeof-stream-item ios1 1))
+
+ (test-equal 1 (gr:min-streams ios2))
+ (test-equal 2 (gr:max-streams ios2))
+ (test-equal 16 (gr:sizeof-stream-item ios2 0))
+ (test-equal 32 (gr:sizeof-stream-item ios2 1))
+
+ (test-equal 1 (gr:min-streams ios3))
+ (test-equal -1 (gr:max-streams ios3))
+ (test-equal 14 (gr:sizeof-stream-item ios3 0))
+ (test-equal 32 (gr:sizeof-stream-item ios3 1))
+ (test-equal 48 (gr:sizeof-stream-item ios3 2))
+ (test-equal '#(14 32 48) (gr:sizeof-stream-items ios3))
+
+ (test-equal 1 (gr:min-streams iosv))
+ (test-equal 4 (gr:max-streams iosv))
+ (test-equal 1 (gr:sizeof-stream-item iosv 0))
+ (test-equal 2 (gr:sizeof-stream-item iosv 1))
+ (test-equal 3 (gr:sizeof-stream-item iosv 2))
+ (test-equal 3 (gr:sizeof-stream-item iosv 3))
+ (test-equal '#(1 2 3) (gr:sizeof-stream-items iosv))
+ ))
+
diff --git a/gnuradio-core/src/guile/tests/00_runtime_ctors.test b/gnuradio-core/src/guile/tests/00_runtime_ctors.test
new file mode 100644
index 000000000..0c131f5bd
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/00_runtime_ctors.test
@@ -0,0 +1,35 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+;;; Add test code for all constructors in these files
+;;;
+;;; ./runtime/gr_hier_block2.h
+;;; ./runtime/gr_msg_queue.h
diff --git a/gnuradio-core/src/guile/tests/filter_ctors.test b/gnuradio-core/src/guile/tests/filter_ctors.test
new file mode 100644
index 000000000..6a35bd296
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/filter_ctors.test
@@ -0,0 +1,248 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+;;; Add test code for all constructors in these files
+;;;
+
+;;; ./filter/gr_adaptive_fir_ccf.h WONTFIX: not wrapped
+;; gr_adaptive_fir_ccf(char *name, int decimation, const std::vector<float> &taps);
+;; (pass-if (true? (gr:adaptive-fir-ccf "foo" 0 #(1.0 2.0 3.0 4.0))))
+
+;;; ./filter/gr_cma_equalizer_cc.h
+(pass-if (true? (gr:cma-equalizer-cc 0 0 0)))
+
+;;; ./filter/gr_fft_filter_ccc.h FIXME: not found
+;; (pass-if (true? (gr:fft-filter-ccc 0 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fft_filter_fff.h FIXME: not found
+;; (pass-if (true? (gr:fft-filter-fff 0 #(1.0 2.0))))
+
+;;; ./filter/gr_filter_delay_fc.h FIXME: not found
+;; (pass-if (true? (gr:filter-delay-fc #(1.0 2.0))))
+
+;;; ./filter/gr_fir_ccc_generic.h FIXME: not found
+;; (pass-if (true? (gr:fir-ccc-generic)))
+;; (pass-if (true? (gr:fir-ccc-generic #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_ccc_simd.h FIXME: not found
+;; (pass-if (true? (gr:fir-ccc-simd)))
+;; (pass-if (true? (gr:fir-ccc-simd #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_ccc_x86.h FIXME: not found
+;; (pass-if (true? (gr:fir-ccc-x86)))
+;; (pass-if (true? (gr:fir-ccc-x86 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_ccf_generic.h FIXME: not found
+;; (pass-if (true? (gr:fir-ccf-generic)))
+;; (pass-if (true? (gr:fir-ccf-generic #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_ccf_simd.h FIXME: not found
+;; (pass-if (true? (gr:fir-ccf-simd 0 0 0 0)))
+
+;;; ./filter/gr_fir_ccf_x86.h FIXME: not found
+;; (pass-if (true? (gr:fir-ccf-x86)))
+;; (pass-if (true? (gr:fir-ccf-x86 #(1.0 2.0))))
+
+;;; ./filter/gr_fir_fcc_generic.h FIXME: not found
+;; (pass-if (true? (gr:fir-fcc-generic)))
+;; (pass-if (true? (gr:fir-fcc-generic #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_fcc_simd.h FIXME: not found
+;; (pass-if (true? (gr:fir-fcc-simd 0 0 0 0)))
+
+;;; ./filter/gr_fir_fcc_x86.h FIXME: not found
+;; (pass-if (true? (gr:fir-fcc-x86)))
+;; (pass-if (true? (gr:fir-fcc-x86 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_fff_altivec.h FIXME: not found
+;; (pass-if (true? (gr:fir-fff-altivec)))
+;; (pass-if (true? (gr:fir-fff-altivec #(1.0 2.0))))
+
+;;; ./filter/gr_fir_fff_armv7_a.h FIXME: not found
+;; (pass-if (true? (gr:fir-fff-armv7-a)))
+;; (pass-if (true? (gr:fir-fff-armv7-a #(1.0 2.0))))
+
+;;; ./filter/gr_fir_fff_generic.h FIXME: not found
+;; (pass-if (true? (gr:fir-fff-generic)))
+;; (pass-if (true? (gr:fir-fff-generic #(1.0 2.0))))
+
+;;; ./filter/gr_fir_fff_simd.h FIXME: not found
+;; (pass-if (true? (gr:fir-fff-simd 0 0 0)))
+
+;;; ./filter/gr_fir_fff_x86.h FIXME: not found
+;; (pass-if (true? (gr:fir-fff-x86)))
+;; (pass-if (true? (gr:fir-fff-x86 #(1.0 2.0))))
+
+;;; ./filter/gr_fir_filter_ccc.h FIXME: not found
+;; (pass-if (true? (gr:fir-filter-ccc 1 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_filter_ccf.h FIXME: not found
+;; (pass-if (true? (gr:fir-filter-ccf 1 #(1.0 2.0))))
+
+;;; ./filter/gr_fir_filter_fcc.h FIXME: not found
+;; (pass-if (true? (gr:fir-filter-fcc 1 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_filter_fff.h FIXME: not found
+;; (pass-if (true? (gr:fir-filter-fff 1 #(1.0 2.0))))
+
+;;; ./filter/gr_fir_filter_fsf.h FIXME: not found
+;; (pass-if (true? (gr:fir-filter-fsf 1 #(1.0 2.0))))
+
+;;; ./filter/gr_fir_filter_scc.h FIXME: not found
+;; (pass-if (true? (gr:fir-filter-scc 1 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_fsf_generic.h FIXME: not found
+;; (pass-if (true? (gr:fir-fsf-generic)))
+;; (pass-if (true? (gr:fir-fsf-generic #(1.0 2.0))))
+
+;;; ./filter/gr_fir_fsf_simd.h FIXME: not found
+;; (pass-if (true? (gr:fir-fsf-simd 0 0 0)))
+
+;;; ./filter/gr_fir_fsf_x86.h FIXME: not found
+;; (pass-if (true? (gr:fir-fsf-x86)))
+;; (pass-if (true? (gr:fir-fsf-x86 #(1.0 2.0))))
+
+;;; ./filter/gr_fir_scc_generic.h FIXME: not found
+;; (pass-if (true? (gr:fir-scc-generic)))
+;; (pass-if (true? (gr:fir-scc-generic #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_scc_simd.h FIXME: not found
+;; (pass-if (true? (gr:fir-scc-simd)))
+;; (pass-if (true? (gr:fir-scc-simd #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_scc_x86.h FIXME: not found
+;; (pass-if (true? (gr:fir-scc-x86)))
+;; (pass-if (true? (gr:fir-scc-x86 #(1+3i 23+5i))))
+
+;;; ./filter/gr_fir_sysconfig_armv7_a.h FIXME: virtual methods
+;; (pass-if (true? (gr:fir-sysconfig-armv7-a )))
+
+;;; ./filter/gr_fir_sysconfig_generic.h FIXME: virtual methods
+;; (pass-if (true? (gr:fir-sysconfig-generic )))
+
+;;; ./filter/gr_fir_sysconfig_powerpc.h FIXME: virtual methods
+;; (pass-if (true? (gr:fir-sysconfig-powerpc )))
+
+;;; ./filter/gr_fir_sysconfig_x86.h FIXME: virtual methods
+;; (pass-if (true? (gr:fir-sysconfig-x86 )))
+
+;;; ./filter/gr_fractional_interpolator_cc.h FIXME: not found
+;; (pass-if (true? (gr:fractional-interpolator-cc 1.0 1.0)))
+
+;;; ./filter/gr_fractional_interpolator_ff.h FIXME: not found
+;; (pass-if (true? (gr:fractional-interpolator-ff 1.0 1.0)))
+
+;;; ./filter/gr_freq_xlating_fir_filter_ccc.h FIXME: not found
+;; (pass-if (true? (gr:freq-xlating-fir-filter-ccc 1.0 1.0)))
+
+;;; ./filter/gr_freq_xlating_fir_filter_ccf.h FIXME: not found
+;; (pass-if (true? (gr:freq-xlating-fir-filter-ccf 1.0 1.0)))
+
+;;; ./filter/gr_freq_xlating_fir_filter_fcc.h FIXME: not found
+;; (pass-if (true? (gr:freq-xlating-fir-filter-fcc 1.0 1.0)))
+
+;;; ./filter/gr_freq_xlating_fir_filter_fcf.h FIXME: not found
+;; (pass-if (true? (gr:freq-xlating-fir-filter-fcf 1.0 1.0)))
+
+;;; ./filter/gr_freq_xlating_fir_filter_scc.h FIXME: not found
+;; (pass-if (true? (gr:freq-xlating-fir-filter-scc 1.0 1.0)))
+
+;;; ./filter/gr_freq_xlating_fir_filter_scf.h FIXME: not found
+;; (pass-if (true? (gr:freq-xlating-fir-filter-scf 1.0 1.0)))
+
+;;; ./filter/gr_goertzel_fc.h FIXME: not found
+;; (pass-if (true? (gr:goertzel-fc 1 1 1)))
+
+;;; ./filter/gr_hilbert_fc.h FIXME: not found
+;; (pass-if (true? (gr:hilbert-fc )))
+
+;;; ./filter/gr_iir_filter_ffd.h FIXME: not found
+;; (pass-if (true? (gr:iir-filter-ffd )))
+
+;;; ./filter/gr_interp_fir_filter_ccc.h FIXME: not found
+;; (pass-if (true? (gr:interp-fir-filter-ccc )))
+
+;;; ./filter/gr_interp_fir_filter_ccf.h FIXME: not found
+;; (pass-if (true? (gr:interp-fir-filter-ccf )))
+
+;;; ./filter/gr_interp_fir_filter_fcc.h FIXME: not found
+;; (pass-if (true? (gr:interp-fir-filter-fcc )))
+
+;;; ./filter/gr_interp_fir_filter_fff.h FIXME: not found
+;; (pass-if (true? (gr:interp-fir-filter-fff )))
+
+;;; ./filter/gr_interp_fir_filter_fsf.h FIXME: not found
+;; (pass-if (true? (gr:interp-fir-filter-fsf )))
+
+;;; ./filter/gr_interp_fir_filter_scc.h
+;; (pass-if (true? (gr:interp-fir-filter-scc )))
+
+;;; ./filter/gr_pfb_arb_resampler_ccf.h
+;; (pass-if (true? (gr:pfb-arb-resampler-ccf )))
+
+;;; ./filter/gr_pfb_channelizer_ccf.h
+;; (pass-if (true? (gr:pfb-channelizer-ccf )))
+
+;;; ./filter/gr_pfb_clock_sync_ccf.h
+;; (pass-if (true? (gr:pfb-clock-sync-ccf )))
+
+;;; ./filter/gr_pfb_clock_sync_fff.h
+;; (pass-if (true? (gr:pfb-clock-sync-fff )))
+
+;;; ./filter/gr_pfb_decimator_ccf.h
+;; (pass-if (true? (gr:pfb-decimator-ccf )))
+
+;;; ./filter/gr_pfb_interpolator_ccf.h
+;; (pass-if (true? (gr:pfb-interpolator-ccf )))
+
+;;; ./filter/gr_rational_resampler_base_ccc.h
+;; (pass-if (true? (gr:rational-resampler-base-ccc )))
+
+;;; ./filter/gr_rational_resampler_base_ccf.h
+;; (pass-if (true? (gr:rational-resampler-base-ccf )))
+
+;;; ./filter/gr_rational_resampler_base_fcc.h
+;; (pass-if (true? (gr:rational-resampler-base-fcc )))
+
+;;; ./filter/gr_rational_resampler_base_fff.h
+;; (pass-if (true? (gr:rational-resampler-base-fff )))
+
+;;; ./filter/gr_rational_resampler_base_fsf.h
+;; (pass-if (true? (gr:rational-resampler-base-fsf )))
+
+;;; ./filter/gr_rational_resampler_base_scc.h
+;; (pass-if (true? (gr:rational-resampler-base-scc )))
+
+;;; ./filter/gr_single_pole_iir_filter_cc.h
+;; (pass-if (true? (gr:single-pole-iir-filter-cc )))
+
+;;; ./filter/gr_single_pole_iir_filter_ff.h
+;; (pass-if (true? (gr:single-pole-iir-filter-ff )))
diff --git a/gnuradio-core/src/guile/tests/general_ctors.test b/gnuradio-core/src/guile/tests/general_ctors.test
new file mode 100644
index 000000000..a18766400
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/general_ctors.test
@@ -0,0 +1,429 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+(use-modules (ice-9 format))
+
+
+(define (verbose-equal? expected actual)
+ (cond ((equal? expected actual) #t)
+ (else
+ (format #t "Expected:\n~y\n" expected)
+ (format #t "Actual:\n~y\n" actual)
+ #f)))
+
+
+;;; Test complex<float> scalars
+(pass-if (equal? 5.0+5.0i (gr:complex-scalar-test0)))
+(pass-if (equal? 1.5+0.5i (gr:complex-scalar-test1 1+1i)))
+
+;;; Test complex<float> vectors
+(pass-if (verbose-equal? #(0+0i 1+1i 2+2i 3+3i 4+4i)
+ (gr:complex-vec-test0)))
+
+(pass-if (verbose-equal? #(1.5+0.5i 2.5+1.5i 3.5+2.5i)
+ (gr:complex-vec-test1 #(1+1i 2+2i 3+3i))))
+
+
+;;; Add test code for all constructors in these files
+
+;;; ./general/gr_additive_scrambler_bb.h
+(pass-if (true? (gr:additive-scrambler-bb 0 0 0 0)))
+
+;; Here's one that will throw if its arg is 0
+(pass-if (true? (gr:unpack-k-bits-bb 10)))
+(pass-if-throw "confirm throw gr:unpack-k-bits-bb" #t (true? (gr:unpack-k-bits-bb 0)))
+
+;;; ./general/gr_agc2_cc.h
+(pass-if (true? (gr:agc2-cc 1e-1 1e-2 1.0 1.0 0.0)))
+
+;;; ./general/gr_agc2_ff.h
+(pass-if (true? (gr:agc2-ff 0 0 0 0 0)))
+
+;;; ./general/gr_agc_cc.h
+(pass-if (true? (gr:agc-cc 0 0 0 0)))
+
+;;; ./general/gr_agc_ff.h
+(pass-if (true? (gr:agc-ff 0 0 0 0)))
+
+;;; ./general/gr_align_on_samplenumbers_ss.h
+(pass-if (true? (gr:align-on-samplenumbers-ss 2 128)))
+(pass-if-throw "confirm throw gr:align-on-samplenumbers-ss" #t (true? (gr:align-on-samplenumbers-ss 0 0)))
+
+;;; ./general/gr_bin_statistics_f.h WONTFIX: requires gr_feval_dd & swig directors
+;;;(pass-if (true? (gr:bin-statistics-f 1 (gr:msg-queue) 0 0 0)))
+
+;;; ./general/gr_binary_slicer_fb.h
+(pass-if (true? (gr:binary-slicer-fb)))
+
+;;; ./general/gr_bytes_to_syms.h
+(pass-if (true? (gr:bytes-to-syms)))
+
+;;; ./general/gr_char_to_float.h
+(pass-if (true? (gr:char-to-float)))
+
+;;; ./general/gr_check_counting_s.h
+(pass-if (true? (gr:check-counting-s #f)))
+
+;;; ./general/gr_check_lfsr_32k_s.h
+(pass-if (true? (gr:check-lfsr-32k-s)))
+
+;;; ./general/gr_clock_recovery_mm_cc.h
+(pass-if (true? (gr:clock-recovery-mm-cc 1 1 1 1 1)))
+(pass-if-throw "confirm throw gr:clock-recovery-mm-cc" #t (true? (gr:clock-recovery-mm-cc -1 1 1 1 1)))
+
+;;; ./general/gr_clock_recovery_mm_ff.h
+(pass-if (true? (gr:clock-recovery-mm-ff 1 1 1 1 1)))
+(pass-if-throw "confirm throw gr:clock-recovery-mm-ff" #t (true? (gr:clock-recovery-mm-ff -1 1 1 1 1)))
+
+;;; ./general/gr_complex_to_interleaved_short.h
+(pass-if (true? (gr:complex-to-interleaved-short)))
+
+;;; ./general/gr_complex_to_xxx.h
+(pass-if (true? (gr:complex-to-float 1)))
+(pass-if (true? (gr:complex-to-real 1)))
+(pass-if (true? (gr:complex-to-imag 1)))
+(pass-if (true? (gr:complex-to-mag 1)))
+(pass-if (true? (gr:complex-to-mag-squared 1)))
+(pass-if (true? (gr:complex-to-arg 1)))
+
+;;; ./general/gr_conjugate_cc.h
+(pass-if (true? (gr:conjugate-cc)))
+
+;;; ./general/gr_constellation_decoder_cb.h FIXME: wrong-arg-type (not sure why...)
+;gr_constellation_decoder_cb (const std::vector<gr_complex> &sym_position,
+; const std::vector<unsigned char> &sym_value_out);
+;; (pass-if (true? (gr:constellation-decoder-cb #(2+3i 23+5i) #(0 1))))
+
+;;; ./general/gr_copy.h
+(pass-if (true? (gr:copy 1)))
+
+;;; ./general/gr_correlate_access_code_bb.h
+(pass-if (true? (gr:correlate-access-code-bb "foo" 0)))
+(pass-if-throw "confirm throw correlate-access-code-bb" #t
+ (true? (gr:correlate-access-code-bb
+ "00000000000000000000000000000000000000000000000000000000000000000" 0)))
+
+;;; ./general/gr_costas_loop_cc.h
+(pass-if (true? (gr:costas-loop-cc 0 0 0 0 2)))
+(pass-if-throw "confirm throw gr:costas-loop-cc" #t (true? (gr:costas-loop-cc 0 0 0 0 3)))
+
+;;; ./general/gr_cpfsk_bc.h
+(pass-if (true? (gr:cpfsk-bc 1 1 1)))
+
+;;; ./general/gr_ctcss_squelch_ff.h
+(pass-if (true? (gr:ctcss-squelch-ff 0 0 0 0 0 #t)))
+
+;;; ./general/gr_decode_ccsds_27_fb.h
+(pass-if (true? (gr:decode-ccsds-27-fb)))
+
+;;; ./general/gr_deinterleave.h
+(pass-if (true? (gr:deinterleave 1)))
+
+;;; ./general/gr_delay.h
+(pass-if (true? (gr:delay 1 1)))
+
+;;; ./general/gr_descrambler_bb.h
+(pass-if (true? (gr:descrambler-bb 0 0 0)))
+
+;;; ./general/gr_diff_decoder_bb.h
+(pass-if (true? (gr:diff-decoder-bb 0)))
+
+;;; ./general/gr_diff_encoder_bb.h
+(pass-if (true? (gr:diff-encoder-bb 0)))
+
+;;; ./general/gr_diff_phasor_cc.h
+(pass-if (true? (gr:diff-phasor-cc)))
+
+;;; ./general/gr_dpll_bb.h
+(pass-if (true? (gr:dpll-bb 0 0)))
+
+;;; ./general/gr_encode_ccsds_27_bb.h
+(pass-if (true? (gr:encode-ccsds-27-bb)))
+
+;;; ./general/gr_fake_channel_coder_pp.h FIXME: file name doesn't match class name
+(pass-if (true? (gr:fake-channel-encoder-pp 1 1)))
+(pass-if-throw "confirm throw" #t (true? (gr:fake-channel-encoder-pp -1 1)))
+
+;;; ./general/gr_feedforward_agc_cc.h
+(pass-if (true? (gr:feedforward-agc-cc 1 1)))
+
+;;; ./general/gr_fft_vcc.h
+(pass-if (true? (gr:fft-vcc 1 #f #(1.0 2.0) #t)))
+
+;;; ./general/gr_fft_vfc.h
+;; bool set_window(const std::vector<float> &window);
+(pass-if (true? (gr:fft-vfc 4 #t #(1.0 2.0 3.0 4.0))))
+(pass-if-throw "confirm throw gr:fft-vfc" #t (true? (gr:fft-vfc 4 #f #(1.0 2.0 3.0 4.0))))
+
+;;; ./general/gr_fll_band_edge_cc.h
+(pass-if (true? (gr:fll-band-edge-cc 0 0 0 0 0)))
+
+;; ;;; ./general/gr_float_to_char.h
+(pass-if (true? (gr:float-to-char)))
+
+;; ;;; ./general/gr_float_to_complex.h
+(pass-if (true? (gr:float-to-complex 1)))
+
+;;; ./general/gr_float_to_short.h
+(pass-if (true? (gr:float-to-short)))
+
+;;; ./general/gr_float_to_uchar.h
+(pass-if (true? (gr:float-to-uchar)))
+
+;;; ./general/gr_fmdet_cf.h
+(pass-if (true? (gr:fmdet-cf 0 0 0 0)))
+
+;;; ./general/gr_framer_sink_1.h
+(pass-if (true? (gr:framer-sink-1 (gr:msg-queue))))
+
+;;; ./general/gr_frequency_modulator_fc.h
+(pass-if (true? (gr:frequency-modulator-fc 0)))
+
+;;; ./general/gr_glfsr_source_b.h
+(pass-if (true? (gr:glfsr-source-b 1 #t 0 1)))
+(pass-if-throw "confirm throw" #t (true? (gr:glfsr_source_b 33 #t 0 0)))
+
+;;; ./general/gr_glfsr_source_f.h
+(pass-if (true? (gr:glfsr-source-f 1 #t 1 1)))
+(pass-if-throw "confirm throw" #t (true? (gr:glfsr_source_f 33 #t 0 0)))
+
+;;; ./general/gr_head.h
+(pass-if (true? (gr:head 1 1)))
+
+;;; ./general/gr_interleave.h
+(pass-if (true? (gr:interleave 1)))
+
+;;; ./general/gr_interleaved_short_to_complex.h
+(pass-if (true? (gr:interleaved-short-to-complex)))
+
+;;; ./general/gr_keep_one_in_n.h
+(pass-if (true? (gr:keep-one-in-n 1 1)))
+
+;;; ./general/gr_kludge_copy.h
+(pass-if (true? (gr:kludge-copy 1)))
+
+;;; ./general/gr_lfsr_32k_source_s.h
+(pass-if (true? (gr:lfsr-32k-source-s)))
+
+;;; ./general/gr_lms_dfe_cc.h
+(pass-if (true? (gr:lms-dfe-ff 1 1 1 1)))
+
+;;; ./general/gr_lms_dfe_ff.h
+(pass-if (true? (gr:lms-dfe-ff 1 1 1 1)))
+
+;;; ./general/gr_map_bb.h
+;; gr_map_bb (const std::vector<int> &map);
+(pass-if (true? (gr:map-bb #(1 2))))
+
+;;; ./general/gr_mpsk_receiver_cc.h
+(pass-if (true? (gr:mpsk-receiver-cc 1 1 1 1 1 1 1 1 1 1 1)))
+
+;;; ./general/gr_nlog10_ff.h
+(pass-if (true? (gr:nlog10-ff 1 1 1)))
+
+;;; ./general/gr_nop.h
+(pass-if (true? (gr:nop 1)))
+
+;;; ./general/gr_null_sink.h
+(pass-if (true? (gr:null-sink 1)))
+
+;;; ./general/gr_null_source.h
+(pass-if (true? (gr:null-source 1)))
+
+;;; ./general/gr_ofdm_cyclic_prefixer.h
+(pass-if (true? (gr:ofdm-cyclic-prefixer 1 1)))
+
+;;; ./general/gr_ofdm_frame_acquisition.h FIXME: "No matching method for generic function `ofdm_frame_acquisition'"
+;; gr_ofdm_frame_acquisition (unsigned int occupied_carriers,
+;; unsigned int fft_length,
+;; unsigned int cplen,
+;; const std::vector<gr_complex> &known_symbol,
+;; unsigned int max_fft_shift_len);
+;; (pass-if (true? (gr:ofdm-frame-acquisition 0 0 0 #(1+3i 23+5i) 0)))
+
+;;; ./general/gr_ofdm_frame_sink.h FIXME: "No matching method for generic function `ofdm_frame_sink'"
+;; gr_ofdm_frame_sink(const std::vector<gr_complex> &sym_position,
+;; const std::vector<unsigned char> &sym_value_out,
+;; gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
+;; float phase_gain, float freq_gain);
+;;(pass-if (true? (gr:ofdm-frame-sink #(1+3i 23+5i) #(1 2) (gr:msg-queue) 1 0.25 0)))
+
+;;; ./general/gr_ofdm_insert_preamble.h FIXME: Wrong type argument in position ~A:
+;; gr_ofdm_insert_preamble(int fft_length,
+;; const std::vector<std::vector<gr_complex> > &preamble);
+;;(pass-if (true? (gr:ofdm-insert-preamble 1 #(#(1+3i 23+5i)))))
+
+;;; ./general/gr_ofdm_mapper_bcv.h FIXME: Wrong type argument in position ~A:
+;; gr_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation,
+;; unsigned int msgq_limit,
+;; unsigned int bits_per_symbol,
+;; unsigned int fft_length);
+;; (pass-if (true? (gr:ofdm-mapper-bcv #(1+3i 23+5i) 1 1 1)))
+
+;;; ./general/gr_ofdm_sampler.h
+(pass-if (true? (gr:ofdm-sampler 1 1 1)))
+
+;;; ./general/gr_pa_2x2_phase_combiner.h
+(pass-if (true? (gr:pa-2x2-phase-combiner)))
+
+;;; ./general/gr_packet_sink.h
+(pass-if (true? (gr:packet-sink #(1 2) (gr:msg-queue) -1)))
+
+;;; ./general/gr_peak_detector2_fb.h
+(pass-if (true? (gr:peak-detector2-fb 0 0 0)))
+
+;;; ./general/gr_phase_modulator_fc.h
+(pass-if (true? (gr:phase-modulator-fc 0)))
+
+;;; ./general/gr_pll_carriertracking_cc.h
+(pass-if (true? (gr:pll-carriertracking-cc 0 0 0 0)))
+
+;;; ./general/gr_pll_freqdet_cf.h
+(pass-if (true? (gr:pll-freqdet-cf 0 0 0 0)))
+
+;;; ./general/gr_pll_refout_cc.h
+(pass-if (true? (gr:pll-refout-cc 0 0 0 0)))
+
+;;; ./general/gr_pn_correlator_cc.h
+(pass-if (true? (gr:pn-correlator-cc 1 1 1)))
+
+;;; ./general/gr_probe_avg_mag_sqrd_c.h
+(pass-if (true? (gr:probe-avg-mag-sqrd-c 0 0)))
+
+;;; ./general/gr_probe_avg_mag_sqrd_cf.h
+(pass-if (true? (gr:probe-avg-mag-sqrd-cf 0 0)))
+
+;;; ./general/gr_probe_avg_mag_sqrd_f.h
+(pass-if (true? (gr:probe-avg-mag-sqrd-f 0 0)))
+
+;;; ./general/gr_probe_density_b.h
+(pass-if (true? (gr:probe-density-b 0)))
+
+;;; ./general/gr_probe_mpsk_snr_c.h
+(pass-if (true? (gr:probe-mpsk-snr-c 0)))
+
+;;; ./general/gr_probe_signal_f.h
+(pass-if (true? (gr:probe-signal-f)))
+
+;;; ./general/gr_pwr_squelch_cc.h
+(pass-if (true? (gr:pwr-squelch-cc 0 0 0 #f)))
+
+;;; ./general/gr_pwr_squelch_ff.h
+(pass-if (true? (gr:pwr-squelch-ff 0.0 0.0 0 #f)))
+
+;;; ./general/gr_quadrature_demod_cf.h
+(pass-if (true? (gr:quadrature-demod-cf 0)))
+
+;;; ./general/gr_rail_ff.h
+(pass-if (true? (gr:rail-ff 0 0)))
+
+;;; ./general/gr_regenerate_bb.h
+(pass-if (true? (gr:regenerate-bb 0 0)))
+
+;;; ./general/gr_repeat.h
+(pass-if (true? (gr:repeat 1 1)))
+
+;;; ./general/gr_rms_cf.h
+(pass-if (true? (gr:rms-cf 0)))
+
+;;; ./general/gr_rms_ff.h
+(pass-if (true? (gr:rms-ff 0)))
+
+;;; ./general/gr_scrambler_bb.h
+(pass-if (true? (gr:scrambler-bb 0 0 0)))
+
+;;; ./general/gr_short_to_float.h
+(pass-if (true? (gr:short-to-float)))
+
+;;; ./general/gr_simple_correlator.h
+(pass-if (true? (gr:simple-correlator 0)))
+
+;;; ./general/gr_simple_framer.h
+(pass-if (true? (gr:simple-framer 0)))
+
+;;; ./general/gr_simple_squelch_cc.h
+(pass-if (true? (gr:simple-squelch-cc 0 0)))
+
+;;; ./general/gr_skiphead.h
+(pass-if (true? (gr:skiphead 1 1)))
+
+;;; ./general/gr_squash_ff.h
+(pass-if (true? (gr:squash-ff #(1.0 2.0 3.0 4.0 5.0) #(1.0 2.0 3.0 4.0 5.0))))
+
+;;; ./general/gr_squelch_base_cc.h WONTFIX: not wrapped
+;;; (pass-if (true? (gr:squelch-base-cc "foo" 0 #f)))
+
+;;; ./general/gr_squelch_base_ff.h WONTFIX: not wrapped
+;; (pass-if (true? (gr:squelch-base-ff "foo" 0 #f)))
+
+;;; ./general/gr_stream_mux.h
+(pass-if (true? (gr:stream-mux 1 #(1 2))))
+
+;;; ./general/gr_stream_to_streams.h
+(pass-if (true? (gr:stream-to-streams 1 1)))
+
+;;; ./general/gr_stream_to_vector.h
+(pass-if (true? (gr:stream-to-vector 1 1)))
+
+;;; ./general/gr_streams_to_stream.h
+(pass-if (true? (gr:streams-to-stream 1 1)))
+
+;;; ./general/gr_streams_to_vector.h
+(pass-if (true? (gr:streams-to-vector 1 1)))
+
+;;; ./general/gr_stretch_ff.h
+(pass-if (true? (gr:stretch-ff 1 1)))
+
+;;; ./general/gr_test.h
+(pass-if (true? (gr:test "foo" 1 1 1 1 1 1 1 1)))
+
+;;; ./general/gr_threshold_ff.h
+(pass-if (true? (gr:threshold-ff 0 0)))
+
+;;; ./general/gr_throttle.h
+(pass-if (true? (gr:throttle 1 1)))
+
+;;; ./general/gr_uchar_to_float.h
+(pass-if (true? (gr:uchar-to-float)))
+
+;;; ./general/gr_vco_f.h
+(pass-if (true? (gr:vco-f 0 0 0)))
+
+;;; ./general/gr_vector_to_stream.h
+(pass-if (true? (gr:vector-to-stream 1 1)))
+
+;;; ./general/gr_vector_to_streams.h
+(pass-if (true? (gr:vector-to-streams 1 1)))
+
+;;; ./general/gr_wavelet_ff.h
+(pass-if (true? (gr:wavelet-ff 1024 20 #t)))
+
+;;; ./general/gr_wvps_ff.h
+(pass-if (true? (gr:wvps-ff 2)))
diff --git a/gnuradio-core/src/guile/tests/gengen_ctors.test b/gnuradio-core/src/guile/tests/gengen_ctors.test
new file mode 100644
index 000000000..10eb1d9e0
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/gengen_ctors.test
@@ -0,0 +1,349 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+;;; Add test code for all constructors in these files
+;;;
+
+;;; ./gengen/gr_add_cc.h
+(pass-if (true? (gr:add-cc 1)))
+
+;;; ./gengen/gr_add_const_cc.h
+(pass-if (true? (gr:add-const-cc 0)))
+
+;;; ./gengen/gr_add_const_ff.h
+(pass-if (true? (gr:add-const-ff 0)))
+
+;;; ./gengen/gr_add_const_ii.h
+(pass-if (true? (gr:add-const-ii 0)))
+
+;;; ./gengen/gr_add_const_sf.h
+(pass-if (true? (gr:add-const-sf 0)))
+
+;;; ./gengen/gr_add_const_ss.h
+(pass-if (true? (gr:add-const-ss 0)))
+
+;;; ./gengen/gr_add_const_vcc.h FIXME: Wrong type argument in position ~A:
+;; gr_make_add_const_vcc (const std::vector<gr_complex> &k);
+;; (pass-if (true? (gr:add-const-vcc #(1+3i 23+5i))))
+
+;;; ./gengen/gr_add_const_vff.h
+(pass-if (true? (gr:add-const-vff #(1.0 2.0))))
+
+;;; ./gengen/gr_add_const_vii.h
+(pass-if (true? (gr:add-const-vii #(1 2))))
+
+;;; ./gengen/gr_add_const_vss.h
+(pass-if (true? (gr:add-const-vss #(1 2))))
+
+;;; ./gengen/gr_add_ff.h
+(pass-if (true? (gr:add-ff 1)))
+
+;;; ./gengen/gr_add_ii.h
+(pass-if (true? (gr:add-ii 1)))
+
+;;; ./gengen/gr_add_ss.h
+(pass-if (true? (gr:add-ss 1)))
+
+;;; ./gengen/gr_and_bb.h
+(pass-if (true? (gr:and-bb)))
+
+;;; ./gengen/gr_and_const_bb.h
+(pass-if (true? (gr:and-const-bb 0)))
+
+;;; ./gengen/gr_and_const_ii.h
+(pass-if (true? (gr:and-const-ii 0)))
+
+;;; ./gengen/gr_and_const_ss.h
+(pass-if (true? (gr:and-const-ss 0)))
+
+;;; ./gengen/gr_and_ii.h
+(pass-if (true? (gr:and-ii)))
+
+;;; ./gengen/gr_and_ss.h
+(pass-if (true? (gr:and-ss)))
+
+;;; ./gengen/gr_argmax_fs.h
+(pass-if (true? (gr:argmax-fs 1)))
+
+;;; ./gengen/gr_argmax_is.h
+(pass-if (true? (gr:argmax-is 1)))
+
+;;; ./gengen/gr_argmax_ss.h
+(pass-if (true? (gr:argmax-ss 1)))
+
+;;; ./gengen/gr_chunks_to_symbols_bc.h FIXME: not found
+;; (pass-if (true? (gr:chunks-to-symbols-bc #(1+3i 23+5i) 1)))
+
+;;; ./gengen/gr_chunks_to_symbols_bf.h
+(pass-if (true? (gr:chunks-to-symbols-bf #(1.0 2.0) 1)))
+
+;;; ./gengen/gr_chunks_to_symbols_ic.h FIXME: not found
+;; gr_make_chunks_to_symbols_ic (const std::vector<gr_complex> &symbol_table, const int D = 1);
+;; (pass-if (true? (gr:chunks-to-symbols-ic #(1+3i 23+5i) 1)))
+
+;;; ./gengen/gr_chunks_to_symbols_if.h FIXME: not found
+;; gr_make_chunks_to_symbols_if (const std::vector<float> &symbol_table, const int D = 1);
+;; (pass-if (true? (gr:chunks_to_symbols_if #(1.0 2.0) 1)))
+
+;;; ./gengen/gr_chunks_to_symbols_sc.h FIXME: not found
+;; (pass-if (true? (gr:chunks_to_symbols_sc #(1.0 2.0) 1)))
+
+;;; ./gengen/gr_chunks_to_symbols_sf.h FIXME: not found
+;; (pass-if (true? (gr:chunks_to_symbols_sf #(1.0 2.0) 1)))
+
+;;; ./gengen/gr_divide_cc.h
+(pass-if (true? (gr:divide-cc 1)))
+
+;;; ./gengen/gr_divide_ff.h
+(pass-if (true? (gr:divide-ff 1)))
+
+;;; ./gengen/gr_divide_ii.h
+(pass-if (true? (gr:divide-ii 1)))
+
+;;; ./gengen/gr_divide_ss.h
+(pass-if (true? (gr:divide-ss 1)))
+
+;;; ./gengen/gr_integrate_cc.h
+(pass-if (true? (gr:integrate-cc 0)))
+
+;;; ./gengen/gr_integrate_ff.h
+(pass-if (true? (gr:integrate-ff 0)))
+
+;;; ./gengen/gr_integrate_ii.h
+(pass-if (true? (gr:integrate-ii 0)))
+
+;;; ./gengen/gr_integrate_ss.h
+(pass-if (true? (gr:integrate-ss 0)))
+
+;;; ./gengen/gr_max_ff.h
+(pass-if (true? (gr:max-ff 1)))
+
+;;; ./gengen/gr_max_ii.h
+(pass-if (true? (gr:max-ii 1)))
+
+;;; ./gengen/gr_max_ss.h
+(pass-if (true? (gr:max-ss 1)))
+
+;;; ./gengen/gr_moving_average_cc.h
+(pass-if (true? (gr:moving-average-cc 1 1+3i 4096)))
+
+;;; ./gengen/gr_moving_average_ff.h
+(pass-if (true? (gr:moving-average-ff 1 0 4096)))
+
+;;; ./gengen/gr_moving_average_ii.h
+(pass-if (true? (gr:moving-average-ii 1 0 4096)))
+
+;;; ./gengen/gr_moving_average_ss.h
+(pass-if (true? (gr:moving-average-ss 1 0 4096)))
+
+;;; ./gengen/gr_multiply_cc.h
+(pass-if (true? (gr:multiply-cc 1)))
+
+;;; ./gengen/gr_multiply_const_cc.h
+(pass-if (true? (gr:multiply-const-cc 1)))
+
+;;; ./gengen/gr_multiply_const_ff.h
+(pass-if (true? (gr:multiply-const-ff 1)))
+
+;;; ./gengen/gr_multiply_const_ii.h
+(pass-if (true? (gr:multiply-const-ii 1)))
+
+;;; ./gengen/gr_multiply_const_ss.h
+(pass-if (true? (gr:multiply-const-ss 1)))
+
+;;; ./gengen/gr_multiply_const_vcc.h FIXME: wrong type argument in position ~A:
+;; gr_make_multiply_const_vcc (const std::vector<gr_complex> &k);
+;; (pass-if (true? (gr:multiply-const-vcc #(1+3i 23+5i))))
+
+;;; ./gengen/gr_multiply_const_vff.h
+(pass-if (true? (gr:multiply-const-vff #(1.0 2.0))))
+
+;;; ./gengen/gr_multiply_const_vii.h
+(pass-if (true? (gr:multiply-const-vii #(1 2))))
+
+;;; ./gengen/gr_multiply_const_vss.h
+(pass-if (true? (gr:multiply-const-vss #(1 2))))
+
+;;; ./gengen/gr_multiply_ff.h
+(pass-if (true? (gr:multiply-ff 1)))
+
+;;; ./gengen/gr_multiply_ii.h
+(pass-if (true? (gr:multiply-ii 1)))
+
+;;; ./gengen/gr_multiply_ss.h
+(pass-if (true? (gr:multiply-ss 1)))
+
+;;; ./gengen/gr_mute_cc.h FIXME: not found
+;; (pass-if (true? (gr:mute-cc false)))
+
+;;; ./gengen/gr_mute_ff.h FIXME: not found
+;;(pass-if (true? (gr:mute-ff false)))
+
+;;; ./gengen/gr_mute_ii.h FIXME: not found
+;; (pass-if (true? (gr:mute-ii false)))
+
+;;; ./gengen/gr_mute_ss.h FIXME: not found
+;; (pass-if (true? (gr:mute-ss false)))
+
+;;; ./gengen/gr_noise_source_c.h
+(pass-if (true? (gr:noise-source-c 1 0 3021)))
+
+;;; ./gengen/gr_noise_source_f.h
+(pass-if (true? (gr:noise-source-f 1 0 3021)))
+
+;;; ./gengen/gr_noise_source_i.h
+(pass-if (true? (gr:noise-source-i 1 0 3021)))
+
+;;; ./gengen/gr_noise_source_s.h
+(pass-if (true? (gr:noise-source-s 1 0 3021)))
+
+;;; ./gengen/gr_not_bb.h
+(pass-if (true? (gr:not-bb)))
+
+;;; ./gengen/gr_not_ii.h
+(pass-if (true? (gr:not-ii)))
+
+;;; ./gengen/gr_not_ss.h
+(pass-if (true? (gr:not-ss)))
+
+;;; ./gengen/gr_or_bb.h
+(pass-if (true? (gr:or-bb)))
+
+;;; ./gengen/gr_or_ii.h
+(pass-if (true? (gr:or-ii)))
+
+;;; ./gengen/gr_or_ss.h
+(pass-if (true? (gr:or-ss)))
+
+;;; ./gengen/gr_packed_to_unpacked_bb.h
+(pass-if (true? (gr:packed-to-unpacked-bb 1 1)))
+
+;;; ./gengen/gr_packed_to_unpacked_ii.h
+(pass-if (true? (gr:packed-to-unpacked-ii 1 1)))
+
+;;; ./gengen/gr_packed_to_unpacked_ss.h
+(pass-if (true? (gr:packed-to-unpacked-ss 1 1)))
+
+;;; ./gengen/gr_peak_detector_fb.h
+(pass-if (true? (gr:peak-detector-fb 0.25 0.40 10 0.001)))
+
+;;; ./gengen/gr_peak_detector_ib.h
+(pass-if (true? (gr:peak-detector-ib 0.25 0.40 10 0.001)))
+
+;;; ./gengen/gr_peak_detector_sb.h
+(pass-if (true? (gr:peak-detector-sb 0.25 0.40 10 0.001)))
+
+;;; ./gengen/gr_sample_and_hold_bb.h
+(pass-if (true? (gr:sample-and-hold-bb)))
+
+;;; ./gengen/gr_sample_and_hold_ff.h
+(pass-if (true? (gr:sample-and-hold-ff)))
+
+;;; ./gengen/gr_sample_and_hold_ii.h
+(pass-if (true? (gr:sample-and-hold-ii)))
+
+;;; ./gengen/gr_sample_and_hold_ss.h
+(pass-if (true? (gr:sample-and-hold-ss)))
+
+;;; ./gengen/gr_sig_source_c.h
+(pass-if (true? (gr:sig-source-c 0 0 0 0 0)))
+
+;;; ./gengen/gr_sig_source_f.h
+(pass-if (true? (gr:sig-source-f 0 0 0 0 0)))
+
+;;; ./gengen/gr_sig_source_i.h
+(pass-if (true? (gr:sig-source-i 0 0 0 0 0)))
+
+;;; ./gengen/gr_sig_source_s.h
+(pass-if (true? (gr:sig-source-s 0 0 0 0 0)))
+
+;;; ./gengen/gr_sub_cc.h
+(pass-if (true? (gr:sub-cc 1)))
+
+;;; ./gengen/gr_sub_ff.h
+(pass-if (true? (gr:sub-ff 1)))
+
+;;; ./gengen/gr_sub_ii.h
+(pass-if (true? (gr:sub-ii 1)))
+
+;;; ./gengen/gr_sub_ss.h
+(pass-if (true? (gr:sub-ss 1)))
+
+;;; ./gengen/gr_unpacked_to_packed_bb.h
+(pass-if (true? (gr:unpacked-to-packed-bb 1 1)))
+
+;;; ./gengen/gr_unpacked_to_packed_ii.h
+(pass-if (true? (gr:unpacked-to-packed-ii 1 1)))
+
+;;; ./gengen/gr_unpacked_to_packed_ss.h
+(pass-if (true? (gr:unpacked-to-packed-ss 1 1)))
+
+;;; ./gengen/gr_vector_sink_b.h
+(pass-if (true? (gr:vector-sink-b 1)))
+
+;;; ./gengen/gr_vector_sink_c.h
+(pass-if (true? (gr:vector-sink-c 1)))
+
+;;; ./gengen/gr_vector_sink_f.h
+(pass-if (true? (gr:vector-sink-f 1)))
+
+;;; ./gengen/gr_vector_sink_i.h
+(pass-if (true? (gr:vector-sink-i 1)))
+
+;;; ./gengen/gr_vector_sink_s.h
+(pass-if (true? (gr:vector-sink-s 1)))
+
+;;; ./gengen/gr_vector_source_b.h FIXME: not found
+;; (pass-if (true? (gr:vector-source-b #(1 2) false 1)))
+
+;;; ./gengen/gr_vector_source_c.h FIXME: not found
+;; gr_make_vector_source_c (const std::vector<gr_complex> &data, bool repeat = false, int vlen = 1)
+;; (pass-if (true? (gr:vector-source-c #(1+3i 23+5i) false 1)))
+
+;;; ./gengen/gr_vector_source_f.h FIXME: not found
+;; gr_make_vector_source_f (const std::vector<float> &data, bool repeat = false, int vlen = 1)
+;; (pass-if (true? (gr:vector-source-f #(1.0 2.0) false 1)))
+
+;;; ./gengen/gr_vector_source_i.h FIXME: not found
+;; gr_make_vector_source_i (const std::vector<int> &data, bool repeat = false, int vlen = 1)
+;; (pass-if (true? (gr:vector-source-i #(1 2) false 1)))
+
+;;; ./gengen/gr_vector_source_s.h FIXME: not found
+;; (pass-if (true? (gr:vector-source-s #(1 2) false 1)))
+
+;;; ./gengen/gr_xor_bb.h
+(pass-if (true? (gr:xor-bb)))
+
+;;; ./gengen/gr_xor_ii.h
+(pass-if (true? (gr:xor-ii)))
+
+;;; ./gengen/gr_xor_ss.h
+(pass-if (true? (gr:xor-ss)))
diff --git a/gnuradio-core/src/guile/tests/hier_ctors.test b/gnuradio-core/src/guile/tests/hier_ctors.test
new file mode 100644
index 000000000..8a83c86d5
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/hier_ctors.test
@@ -0,0 +1,40 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+;;; Add test code for all constructors in these files
+;;;
+
+;;; ./hier/gr_channel_model.h
+;; gr_make_channel_model(double noise_voltage=0.0, double frequency_offset=0.0,
+;; double epsilon=1.0,
+;; const std::vector<gr_complex> &taps=std::vector<gr_complex>(1, 1),
+;; double noise_seed=3021);
+;; (pass-if (true? (gr:channel_model )))
diff --git a/gnuradio-core/src/guile/tests/io_ctors.test b/gnuradio-core/src/guile/tests/io_ctors.test
new file mode 100644
index 000000000..80fb2d3f2
--- /dev/null
+++ b/gnuradio-core/src/guile/tests/io_ctors.test
@@ -0,0 +1,78 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+;;; Add test code for all constructors in these files
+;;;
+
+;;; ./io/gr_file_descriptor_sink.h
+;;(pass-if (true? (gr:file-descriptor-sink 0 0))) FIXME: throws gr_io_signature(3)
+
+;;; ./io/gr_file_descriptor_source.h
+;; (pass-if (true? (gr:file-descriptor-source 1 1 false))) FIXME: not found
+
+;;; ./io/gr_file_sink.h
+(pass-if (true? (gr:file-sink 1 "foo")))
+
+;;; ./io/gr_file_source.h FIXME: not found
+;; (pass-if (true? (gr:file-source 1 "foo" false)))
+
+;;; ./io/gr_histo_sink_f.h FIXME: not found
+;; gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
+;; (pass-if (true? (gr:histo-sink-f 1)))
+
+;;; ./io/gr_message_sink.h FIXME: not found
+;; (pass-if (true? (gr:message-sink 1 1 false)))
+
+;;; ./io/gr_message_source.h
+;; (pass-if (true? (gr:message-source )))
+
+;;; ./io/gr_oscope_sink_f.h FIXME: not found
+;; _oscope_sink_x (const std::string name, gr_io_signature_sptr input_sig,
+;; double sample_rate);
+;; (pass-if (true? (gr:oscope-sink-f "foo" 1 1)))
+
+;;; ./io/gr_oscope_sink_x.h FIXME: not found
+;; gr_oscope_sink_x (const std::string name, gr_io_signature_sptr input_sig,
+;; double sampling_rate);
+;; (pass-if (true? (gr:oscope_sink_x "foo" 1 1)))
+
+;;; ./io/gr_udp_sink.h FIXME: not found
+;; (pass-if (true? (gr:udp-sink 1 "foo" 1472 true)))
+
+;;; ./io/gr_udp_source.h FIXME: not found
+;; (pass-if (true? (gr:message-source 0 "foo" 0 1472 true true)))
+
+;;; ./io/gr_wavfile_sink.h FIXME: not found
+;; (pass-if (true? (gr:message-source "foo" 1 1 1)))
+
+;;; ./io/gr_wavfile_source.h FIXME: not found
+;; (pass-if (true? (gr:message-source "foo" false)))
+
diff --git a/gnuradio-core/src/lib/.gitignore b/gnuradio-core/src/lib/.gitignore
index e3bc1ee6a..0d5077da5 100644
--- a/gnuradio-core/src/lib/.gitignore
+++ b/gnuradio-core/src/lib/.gitignore
@@ -1,7 +1,5 @@
/Makefile
/Makefile.in
-/.la
-/.lo
/.deps
/.libs
/*.la
diff --git a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc
index 8252509bb..f80bfd518 100644
--- a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc
+++ b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc
@@ -36,6 +36,7 @@ gr_cma_equalizer_cc::gr_cma_equalizer_cc(int num_taps, float modulus, float mu)
: gr_adaptive_fir_ccf("cma_equalizer_cc", 1, std::vector<float>(num_taps)),
d_modulus(modulus), d_mu(mu)
{
- d_taps[0] = 1.0;
+ if (num_taps > 0)
+ d_taps[0] = 1.0;
}
diff --git a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h
deleted file mode 100644
index bd7fa33cf..000000000
--- a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h
+++ /dev/null
@@ -1,131 +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.
- */
-
-/*
- * WARNING: This file is automatically generated by generate_gri_fir_XXX.py
- * Any changes made to this file will be overwritten.
- */
-
-
-#ifndef INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_CCF_H
-#define INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_CCF_H
-
-#include <vector>
-#include <gr_types.h>
-#include <gr_reverse.h>
-#include <string.h>
-#include <cstdio>
-
-/*!
- * \brief FIR with internal buffer for gr_complex input,
- gr_complex output and float taps
- * \ingroup filter
- *
- */
-
-class gri_fir_filter_with_buffer_ccf {
-
-protected:
- std::vector<float> d_taps; // reversed taps
- gr_complex *d_buffer;
- unsigned int d_idx;
-
-public:
-
- // CONSTRUCTORS
-
- /*!
- * \brief construct new FIR with given taps.
- *
- * Note that taps must be in forward order, e.g., coefficient 0 is
- * stored in new_taps[0], coefficient 1 is stored in
- * new_taps[1], etc.
- */
- gri_fir_filter_with_buffer_ccf (const std::vector<float> &taps);
-
- ~gri_fir_filter_with_buffer_ccf ();
-
- // MANIPULATORS
-
- /*!
- * \brief compute a single output value.
- *
- * \p input is a single input value of the filter type
- *
- * \returns the filtered input value.
- */
- gr_complex filter (gr_complex input);
-
-
- /*!
- * \brief compute a single output value; designed for decimating filters.
- *
- * \p input is a single input value of the filter type. The value of dec is the
- * decimating value of the filter, so input[] must have dec valid values.
- * The filter pushes dec number of items onto the circ. buffer before computing
- * a single output.
- *
- * \returns the filtered input value.
- */
- gr_complex filter (const gr_complex input[], unsigned long dec);
-
- /*!
- * \brief compute an array of N output values.
- *
- * \p input must have (n - 1 + ntaps()) valid entries.
- * input[0] .. input[n - 1 + ntaps() - 1] are referenced to compute the output values.
- */
- void filterN (gr_complex output[], const gr_complex input[],
- unsigned long n);
-
- /*!
- * \brief compute an array of N output values, decimating the input
- *
- * \p input must have (decimate * (n - 1) + ntaps()) valid entries.
- * input[0] .. input[decimate * (n - 1) + ntaps() - 1] are referenced to
- * compute the output values.
- */
- void filterNdec (gr_complex output[], const gr_complex input[],
- unsigned long n, unsigned long decimate);
-
- /*!
- * \brief install \p new_taps as the current taps.
- */
- void set_taps (const std::vector<float> &taps);
-
- // ACCESSORS
-
- /*!
- * \return number of taps in filter.
- */
- unsigned ntaps () const { return d_taps.size (); }
-
- /*!
- * \return current taps
- */
- const std::vector<float> get_taps () const
- {
- return gr_reverse(d_taps);
- }
-};
-
-#endif /* INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_CCF_H */
diff --git a/gnuradio-core/src/lib/general/Makefile.am b/gnuradio-core/src/lib/general/Makefile.am
index 3d8a42805..735795789 100644
--- a/gnuradio-core/src/lib/general/Makefile.am
+++ b/gnuradio-core/src/lib/general/Makefile.am
@@ -34,6 +34,7 @@ EXTRA_DIST = \
gr_constants.cc.in
libgeneral_la_SOURCES = \
+ complex_vec_test.cc \
gr_additive_scrambler_bb.cc \
gr_agc_cc.cc \
gr_agc_ff.cc \
@@ -188,6 +189,7 @@ libgeneral_qa_la_SOURCES = \
qa_gri_lfsr.cc
grinclude_HEADERS = \
+ complex_vec_test.h \
gr_additive_scrambler_bb.h \
gr_agc_cc.h \
gr_agc_ff.h \
@@ -359,6 +361,7 @@ noinst_HEADERS = \
if PYTHON
swiginclude_HEADERS = \
+ complex_vec_test.i \
general.i \
gr_additive_scrambler_bb.i \
gr_agc_cc.i \
diff --git a/gnuradio-core/src/lib/general/complex_vec_test.cc b/gnuradio-core/src/lib/general/complex_vec_test.cc
new file mode 100644
index 000000000..21bca1765
--- /dev/null
+++ b/gnuradio-core/src/lib/general/complex_vec_test.cc
@@ -0,0 +1,37 @@
+#include <complex_vec_test.h>
+#include <stddef.h>
+
+std::vector<std::complex<float> >
+complex_vec_test0()
+{
+ std::vector<std::complex<float> > r(5);
+
+ for (size_t i = 0; i < r.size(); i++)
+ r[i] = std::complex<float>(i, i);
+
+ return r;
+}
+
+std::vector<std::complex<float> >
+complex_vec_test1(const std::vector<std::complex<float> > &input)
+{
+ std::vector<std::complex<float> > r(input.size());
+
+ for (size_t i = 0; i < input.size(); i++)
+ r[i] = std::complex<float>(input[i].real()+0.5, input[i].imag()-0.5);
+
+ return r;
+}
+
+std::complex<float>
+complex_scalar_test0()
+{
+ return std::complex<float>(5, 5);
+}
+
+std::complex<float>
+complex_scalar_test1(std::complex<float> input)
+{
+ return std::complex<float>(input.real()+0.5, input.imag()-0.5);
+}
+
diff --git a/gnuradio-core/src/lib/general/complex_vec_test.h b/gnuradio-core/src/lib/general/complex_vec_test.h
new file mode 100644
index 000000000..f1a8a14e2
--- /dev/null
+++ b/gnuradio-core/src/lib/general/complex_vec_test.h
@@ -0,0 +1,15 @@
+#include <vector>
+#include <complex>
+
+std::vector<std::complex<float> >
+complex_vec_test0();
+
+std::vector<std::complex<float> >
+complex_vec_test1(const std::vector<std::complex<float> > &input);
+
+std::complex<float>
+complex_scalar_test0();
+
+std::complex<float>
+complex_scalar_test1(std::complex<float> input);
+
diff --git a/gnuradio-core/src/lib/general/complex_vec_test.i b/gnuradio-core/src/lib/general/complex_vec_test.i
new file mode 100644
index 000000000..1c62cfda2
--- /dev/null
+++ b/gnuradio-core/src/lib/general/complex_vec_test.i
@@ -0,0 +1,12 @@
+std::vector<std::complex<float> >
+complex_vec_test0();
+
+std::vector<std::complex<float> >
+complex_vec_test1(const std::vector<std::complex<float> > &input);
+
+std::complex<float>
+complex_scalar_test0();
+
+std::complex<float>
+complex_scalar_test1(std::complex<float> input);
+
diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i
index 68cafce2e..2c86a6240 100644
--- a/gnuradio-core/src/lib/general/general.i
+++ b/gnuradio-core/src/lib/general/general.i
@@ -53,7 +53,7 @@
#include <gr_complex_to_xxx.h>
#include <gr_complex_to_interleaved_short.h>
#include <gr_interleaved_short_to_complex.h>
-#include <gr_endianness.h>
+//#include <gr_endianness.h>
#include <gr_firdes.h>
#include <gr_interleave.h>
#include <gr_deinterleave.h>
@@ -141,6 +141,7 @@
#include <gr_copy.h>
#include <gr_fll_band_edge_cc.h>
#include <gr_additive_scrambler_bb.h>
+#include <complex_vec_test.h>
%}
%include "gr_nop.i"
@@ -173,7 +174,7 @@
%include "gr_align_on_samplenumbers_ss.i"
%include "gr_complex_to_xxx.i"
%include "gr_complex_to_interleaved_short.i"
-%include "gr_endianness.i"
+//%include "gr_endianness.i"
%include "gr_interleaved_short_to_complex.i"
%include "gr_firdes.i"
%include "gr_interleave.i"
@@ -262,3 +263,4 @@
%include "gr_copy.i"
%include "gr_fll_band_edge_cc.i"
%include "gr_additive_scrambler_bb.i"
+%include "complex_vec_test.i"
diff --git a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.i b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.i
index 841613ca6..ea73dd46d 100644
--- a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.i
+++ b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.i
@@ -22,7 +22,8 @@
GR_SWIG_BLOCK_MAGIC(gr,align_on_samplenumbers_ss);
-gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss(int nchan=2, int align_interval=128);
+gr_align_on_samplenumbers_ss_sptr
+gr_make_align_on_samplenumbers_ss(int nchan=2, int align_interval=128) throw (std::exception);
class gr_align_on_samplenumbers_ss : public gr_block
{
diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.i b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.i
index 98d326b28..27eb70b95 100644
--- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.i
+++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.i
@@ -22,9 +22,10 @@
GR_SWIG_BLOCK_MAGIC(gr,clock_recovery_mm_cc);
-gr_clock_recovery_mm_cc_sptr gr_make_clock_recovery_mm_cc (float omega, float gain_omega,
- float mu, float gain_mu,
- float omega_relative_limit);
+gr_clock_recovery_mm_cc_sptr
+gr_make_clock_recovery_mm_cc (float omega, float gain_omega,
+ float mu, float gain_mu,
+ float omega_relative_limit) throw(std::exception);
class gr_clock_recovery_mm_cc : public gr_sync_block
{
diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.i b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.i
index 4f08aa760..1b2437000 100644
--- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.i
+++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.i
@@ -22,9 +22,10 @@
GR_SWIG_BLOCK_MAGIC(gr,clock_recovery_mm_ff);
-gr_clock_recovery_mm_ff_sptr gr_make_clock_recovery_mm_ff (float omega, float gain_omega,
- float mu, float gain_mu,
- float omega_relative_limit=0.001);
+gr_clock_recovery_mm_ff_sptr
+gr_make_clock_recovery_mm_ff (float omega, float gain_omega,
+ float mu, float gain_mu,
+ float omega_relative_limit=0.001) throw(std::exception);
class gr_clock_recovery_mm_ff : public gr_sync_block
{
diff --git a/gnuradio-core/src/lib/general/gr_feval.i b/gnuradio-core/src/lib/general/gr_feval.i
index 8594a6fa1..843ca3f2a 100644
--- a/gnuradio-core/src/lib/general/gr_feval.i
+++ b/gnuradio-core/src/lib/general/gr_feval.i
@@ -65,8 +65,8 @@
// catch (Swig::DirectorException &e) { std::cerr << e.getMessage(); SWIG_fail; }
//}
+#ifdef SWIGPYTHON
%{
-
// class that ensures we acquire and release the Python GIL
class ensure_py_gil_state {
@@ -77,6 +77,19 @@ public:
};
%}
+#endif
+
+#ifdef SWIGGUILE
+#if 0
+// FIXME: this is a bogus stub, just here so things build
+class ensure_py_gil_state {
+public:
+ ensure_py_gil_state() { }
+ ~ensure_py_gil_state() { }
+};
+#endif
+#warning "class ensure_py_gil_state needs to be implemented!"
+#endif
/*
* These are the real C++ base classes, however we don't want these exposed.
@@ -145,7 +158,9 @@ class gr_py_feval_dd : public gr_feval_dd
public:
double calleval(double x)
{
+#ifdef PYTHON
ensure_py_gil_state _lock;
+#endif
return eval(x);
}
};
@@ -155,7 +170,9 @@ class gr_py_feval_cc : public gr_feval_cc
public:
gr_complex calleval(gr_complex x)
{
+#ifdef PYTHON
ensure_py_gil_state _lock;
+#endif
return eval(x);
}
};
@@ -165,7 +182,9 @@ class gr_py_feval_ll : public gr_feval_ll
public:
long calleval(long x)
{
+#ifdef PYTHON
ensure_py_gil_state _lock;
+#endif
return eval(x);
}
};
@@ -175,7 +194,9 @@ class gr_py_feval : public gr_feval
public:
void calleval()
{
+#ifdef PYTHON
ensure_py_gil_state _lock;
+#endif
eval();
}
};
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.i b/gnuradio-core/src/lib/general/gr_fft_vcc.i
index 247571374..f35316e70 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc.i
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004,2007,2008 Free Software Foundation, Inc.
+ * Copyright 2004,2007,2008,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -23,7 +23,7 @@
GR_SWIG_BLOCK_MAGIC(gr, fft_vcc)
gr_fft_vcc_sptr
-gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> window, bool shift=false);
+gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
class gr_fft_vcc : public gr_sync_block
{
diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.cc b/gnuradio-core/src/lib/general/gr_fft_vfc.cc
index 608161efe..561c63740 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vfc.cc
+++ b/gnuradio-core/src/lib/general/gr_fft_vfc.cc
@@ -40,12 +40,12 @@
gr_fft_vfc_sptr
-gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> window)
+gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window)
{
return gnuradio::get_initial_sptr(new gr_fft_vfc (fft_size, forward, window));
}
-gr_fft_vfc::gr_fft_vfc (int fft_size, bool forward, const std::vector<float> window)
+gr_fft_vfc::gr_fft_vfc (int fft_size, bool forward, const std::vector<float> &window)
: gr_sync_block ("fft_vfc",
gr_make_io_signature (1, 1, fft_size * sizeof (float)),
gr_make_io_signature (1, 1, fft_size * sizeof (gr_complex))),
@@ -107,7 +107,7 @@ gr_fft_vfc::work (int noutput_items,
}
bool
-gr_fft_vfc::set_window(const std::vector<float> window)
+gr_fft_vfc::set_window(const std::vector<float> &window)
{
if(window.size()==0 || window.size()==d_fft_size) {
d_window=window;
diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.h b/gnuradio-core/src/lib/general/gr_fft_vfc.h
index 054a383ef..074574477 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vfc.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vfc.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -31,7 +31,7 @@ class gr_fft_vfc;
typedef boost::shared_ptr<gr_fft_vfc> gr_fft_vfc_sptr;
gr_fft_vfc_sptr
-gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float>);
+gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
/*!
* \brief Compute forward FFT. float vector in / complex vector out.
@@ -41,13 +41,13 @@ gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float>);
class gr_fft_vfc : public gr_sync_block
{
friend gr_fft_vfc_sptr
- gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> window);
+ gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
unsigned int d_fft_size;
std::vector<float> d_window;
gri_fft_complex *d_fft;
- gr_fft_vfc (int fft_size, bool forward, const std::vector<float> window);
+ gr_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
public:
~gr_fft_vfc ();
@@ -55,7 +55,7 @@ class gr_fft_vfc : public gr_sync_block
int work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
- bool set_window(const std::vector<float> window);
+ bool set_window(const std::vector<float> &window);
};
diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.i b/gnuradio-core/src/lib/general/gr_fft_vfc.i
index 90c368fe6..149745b58 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vfc.i
+++ b/gnuradio-core/src/lib/general/gr_fft_vfc.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -23,13 +23,14 @@
GR_SWIG_BLOCK_MAGIC(gr, fft_vfc)
gr_fft_vfc_sptr
-gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> window);
+gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window)
+throw(std::exception);
class gr_fft_vfc : public gr_sync_block
{
protected:
- gr_fft_vfc (int fft_size, bool forward, const std::vector<float> window);
+ gr_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
public:
- bool set_window(const std::vector<float> window);
+ bool set_window(const std::vector<float> &window);
};
diff --git a/gnuradio-core/src/lib/general/gr_nop.cc b/gnuradio-core/src/lib/general/gr_nop.cc
index e69c8b340..950ef878e 100644
--- a/gnuradio-core/src/lib/general/gr_nop.cc
+++ b/gnuradio-core/src/lib/general/gr_nop.cc
@@ -33,7 +33,7 @@ gr_nop::gr_nop (size_t sizeof_stream_item)
{
}
-gr_block_sptr
+gr_nop_sptr
gr_make_nop (size_t sizeof_stream_item)
{
return gnuradio::get_initial_sptr (new gr_nop (sizeof_stream_item));
diff --git a/gnuradio-core/src/lib/general/gr_nop.h b/gnuradio-core/src/lib/general/gr_nop.h
index 60b20c5ab..4f18c9183 100644
--- a/gnuradio-core/src/lib/general/gr_nop.h
+++ b/gnuradio-core/src/lib/general/gr_nop.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -26,14 +26,19 @@
#include <gr_block.h>
#include <stddef.h> // size_t
+class gr_nop;
+typedef boost::shared_ptr<gr_nop> gr_nop_sptr;
+
+gr_nop_sptr
+gr_make_nop (size_t sizeof_stream_item);
+
/*!
* \brief Does nothing. Used for testing only.
* \ingroup misc_blk
*/
class gr_nop : public gr_block
{
- friend gr_block_sptr gr_make_nop (size_t sizeof_stream_item);
-
+ friend gr_nop_sptr gr_make_nop (size_t sizeof_stream_item);
gr_nop (size_t sizeof_stream_item);
public:
@@ -43,7 +48,4 @@ class gr_nop : public gr_block
gr_vector_void_star &output_items);
};
-gr_block_sptr
-gr_make_nop (size_t sizeof_stream_item);
-
#endif /* INCLUDED_GR_NOP_H */
diff --git a/gnuradio-core/src/lib/general/gr_nop.i b/gnuradio-core/src/lib/general/gr_nop.i
index 8220e5c6c..85354d421 100644
--- a/gnuradio-core/src/lib/general/gr_nop.i
+++ b/gnuradio-core/src/lib/general/gr_nop.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,11 +20,12 @@
* Boston, MA 02110-1301, USA.
*/
-%ignore gr_nop;
+GR_SWIG_BLOCK_MAGIC(gr,nop)
+
+gr_nop_sptr gr_make_nop (size_t sizeof_stream_item);
+
class gr_nop : public gr_block {
- friend gr_block_sptr gr_make_nop (size_t sizeof_stream_item);
+private:
gr_nop (size_t sizeof_stream_item);
};
-%rename(nop) gr_make_nop;
-gr_block_sptr gr_make_nop (size_t sizeof_stream_item);
diff --git a/gnuradio-core/src/lib/general/gr_null_sink.cc b/gnuradio-core/src/lib/general/gr_null_sink.cc
index 0b7f2d9e8..67ef57a46 100644
--- a/gnuradio-core/src/lib/general/gr_null_sink.cc
+++ b/gnuradio-core/src/lib/general/gr_null_sink.cc
@@ -34,7 +34,7 @@ gr_null_sink::gr_null_sink (size_t sizeof_stream_item)
{
}
-gr_block_sptr
+gr_null_sink_sptr
gr_make_null_sink (size_t sizeof_stream_item)
{
return gnuradio::get_initial_sptr (new gr_null_sink (sizeof_stream_item));
diff --git a/gnuradio-core/src/lib/general/gr_null_sink.h b/gnuradio-core/src/lib/general/gr_null_sink.h
index 66df5d138..6d00382a5 100644
--- a/gnuradio-core/src/lib/general/gr_null_sink.h
+++ b/gnuradio-core/src/lib/general/gr_null_sink.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -26,15 +26,20 @@
#include <gr_sync_block.h>
#include <stddef.h> // size_t
+class gr_null_sink;
+typedef boost::shared_ptr<gr_null_sink> gr_null_sink_sptr;
+
+gr_null_sink_sptr
+gr_make_null_sink (size_t sizeof_stream_item);
+
+
/*!
* \brief Bit bucket
* \ingroup sink_blk
*/
-
class gr_null_sink : public gr_sync_block
{
- friend gr_block_sptr gr_make_null_sink (size_t sizeof_stream_item);
-
+ friend gr_null_sink_sptr gr_make_null_sink (size_t sizeof_stream_item);
gr_null_sink (size_t sizeof_stream_item);
public:
@@ -45,7 +50,4 @@ class gr_null_sink : public gr_sync_block
};
-gr_block_sptr
-gr_make_null_sink (size_t sizeof_stream_item);
-
#endif /* INCLUDED_GR_NULL_SINK_H */
diff --git a/gnuradio-core/src/lib/general/gr_null_sink.i b/gnuradio-core/src/lib/general/gr_null_sink.i
index fc4bcffda..e739ce118 100644
--- a/gnuradio-core/src/lib/general/gr_null_sink.i
+++ b/gnuradio-core/src/lib/general/gr_null_sink.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,11 +20,12 @@
* Boston, MA 02110-1301, USA.
*/
-%ignore gr_null_sink;
+GR_SWIG_BLOCK_MAGIC(gr,null_sink)
+
+gr_null_sink_sptr gr_make_null_sink (size_t sizeof_stream_item);
+
class gr_null_sink : public gr_sync_block {
- friend gr_block_sptr gr_make_null_sink (size_t sizeof_stream_item);
+private:
gr_null_sink (size_t sizeof_stream_item);
};
-%rename(null_sink) gr_make_null_sink;
-gr_block_sptr gr_make_null_sink (size_t sizeof_stream_item);
diff --git a/gnuradio-core/src/lib/general/gr_null_source.cc b/gnuradio-core/src/lib/general/gr_null_source.cc
index b65c39035..85fd2db4b 100644
--- a/gnuradio-core/src/lib/general/gr_null_source.cc
+++ b/gnuradio-core/src/lib/general/gr_null_source.cc
@@ -35,7 +35,7 @@ gr_null_source::gr_null_source (size_t sizeof_stream_item)
{
}
-gr_block_sptr
+gr_null_source_sptr
gr_make_null_source (size_t sizeof_stream_item)
{
return gnuradio::get_initial_sptr (new gr_null_source (sizeof_stream_item));
diff --git a/gnuradio-core/src/lib/general/gr_null_source.h b/gnuradio-core/src/lib/general/gr_null_source.h
index 63b1939bf..b1a46a195 100644
--- a/gnuradio-core/src/lib/general/gr_null_source.h
+++ b/gnuradio-core/src/lib/general/gr_null_source.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -25,14 +25,19 @@
#include <gr_sync_block.h>
+class gr_null_source;
+typedef boost::shared_ptr<gr_null_source> gr_null_source_sptr;
+
+gr_null_source_sptr
+gr_make_null_source (size_t sizeof_stream_item);
+
/*!
* \brief A source of zeros.
* \ingroup source_blk
*/
-
class gr_null_source : public gr_sync_block
{
- friend gr_block_sptr gr_make_null_source (size_t sizeof_stream_item);
+ friend gr_null_source_sptr gr_make_null_source (size_t sizeof_stream_item);
gr_null_source (size_t sizeof_stream_item);
@@ -43,7 +48,4 @@ class gr_null_source : public gr_sync_block
};
-gr_block_sptr
-gr_make_null_source (size_t sizeof_stream_item);
-
#endif /* INCLUDED_GR_NULL_SOURCE_H */
diff --git a/gnuradio-core/src/lib/general/gr_null_source.i b/gnuradio-core/src/lib/general/gr_null_source.i
index f9ddef86f..133161d0a 100644
--- a/gnuradio-core/src/lib/general/gr_null_source.i
+++ b/gnuradio-core/src/lib/general/gr_null_source.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,11 +20,12 @@
* Boston, MA 02110-1301, USA.
*/
-%ignore gr_null_source;
+GR_SWIG_BLOCK_MAGIC(gr,null_source)
+
+gr_null_source_sptr gr_make_null_source (size_t sizeof_stream_item);
+
class gr_null_source : public gr_sync_block {
- friend gr_block_sptr gr_make_null_source (size_t sizeof_stream_item);
+private:
gr_null_source (size_t sizeof_stream_item);
};
-%rename(null_source) gr_make_null_source;
-gr_block_sptr gr_make_null_source (size_t sizeof_stream_item);
diff --git a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i
index 5f9a8f134..2e9aa406b 100644
--- a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i
+++ b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i
@@ -22,7 +22,7 @@
GR_SWIG_BLOCK_MAGIC(gr,unpack_k_bits_bb)
-gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (int k);
+gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (int k) throw(std::exception);
class gr_unpack_k_bits_bb : public gr_sync_interpolator
{
diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t
index 2a0a3ba3f..f49be062e 100755
--- a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t
@@ -30,12 +30,12 @@
#include <gr_io_signature.h>
@SPTR_NAME@
-gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k)
+gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k)
{
return gnuradio::get_initial_sptr (new @NAME@ (k));
}
-@NAME@::@NAME@ (const std::vector<@I_TYPE@> k)
+@NAME@::@NAME@ (const std::vector<@I_TYPE@> &k)
: gr_sync_block ("@BASE_NAME@",
gr_make_io_signature (1, 1, sizeof(@I_TYPE@)*k.size()),
gr_make_io_signature (1, 1, sizeof(@O_TYPE@)*k.size()))
diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
index 33b6fc396..574fc686c 100755
--- a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004,2006 Free Software Foundation, Inc.
+ * Copyright 2004,2006,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -30,7 +30,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k);
+@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
/*!
* \brief output vector = input vector + constant vector
@@ -38,14 +38,14 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*/
class @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k);
+ friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
std::vector<@I_TYPE@> d_k; // the constant
- @NAME@ (const std::vector<@I_TYPE@> k);
+ @NAME@ (const std::vector<@I_TYPE@> &k);
public:
const std::vector<@I_TYPE@> k () const { return d_k; }
- void set_k (const std::vector<@I_TYPE@> k) { d_k = k; }
+ void set_k (const std::vector<@I_TYPE@> &k) { d_k = k; }
int work (int noutput_items,
gr_vector_const_void_star &input_items,
diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t
index a2e7dd70b..ad1643a7e 100755
--- a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004,2006 Free Software Foundation, Inc.
+ * Copyright 2004,2006,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,14 +24,14 @@
GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@)
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k);
+@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
class @NAME@ : public gr_sync_block
{
private:
- @NAME@ (const std::vector<@I_TYPE@> k);
+ @NAME@ (const std::vector<@I_TYPE@> &k);
public:
std::vector<@I_TYPE@> k () const { return d_k; }
- void set_k (const std::vector<@I_TYPE@> k) { d_k = k; }
+ void set_k (const std::vector<@I_TYPE@> &k) { d_k = k; }
};
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t
index 8286453f1..5725c1c46 100755
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t
@@ -30,12 +30,12 @@
#include <gr_io_signature.h>
@SPTR_NAME@
-gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k)
+gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k)
{
return gnuradio::get_initial_sptr (new @NAME@ (k));
}
-@NAME@::@NAME@ (const std::vector<@I_TYPE@> k)
+@NAME@::@NAME@ (const std::vector<@I_TYPE@> &k)
: gr_sync_block ("@BASE_NAME@",
gr_make_io_signature (1, 1, sizeof(@I_TYPE@)*k.size()),
gr_make_io_signature (1, 1, sizeof(@O_TYPE@)*k.size()))
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
index 22334505a..81e781895 100755
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004,2006 Free Software Foundation, Inc.
+ * Copyright 2004,2006,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -30,7 +30,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k);
+@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
/*!
* \brief output vector = input vector * constant vector (element-wise)
@@ -38,14 +38,14 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*/
class @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k);
+ friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
std::vector<@I_TYPE@> d_k; // the constant
- @NAME@ (const std::vector<@I_TYPE@> k);
+ @NAME@ (const std::vector<@I_TYPE@> &k);
public:
const std::vector<@I_TYPE@> k () const { return d_k; }
- void set_k (const std::vector<@I_TYPE@> k) { d_k = k; }
+ void set_k (const std::vector<@I_TYPE@> &k) { d_k = k; }
int work (int noutput_items,
gr_vector_const_void_star &input_items,
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t
index a2e7dd70b..ad1643a7e 100755
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004,2006 Free Software Foundation, Inc.
+ * Copyright 2004,2006,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,14 +24,14 @@
GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@)
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k);
+@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
class @NAME@ : public gr_sync_block
{
private:
- @NAME@ (const std::vector<@I_TYPE@> k);
+ @NAME@ (const std::vector<@I_TYPE@> &k);
public:
std::vector<@I_TYPE@> k () const { return d_k; }
- void set_k (const std::vector<@I_TYPE@> k) { d_k = k; }
+ void set_k (const std::vector<@I_TYPE@> &k) { d_k = k; }
};
diff --git a/gnuradio-core/src/lib/io/gr_message_source.i b/gnuradio-core/src/lib/io/gr_message_source.i
index 8a9c762d0..3566ee5a7 100644
--- a/gnuradio-core/src/lib/io/gr_message_source.i
+++ b/gnuradio-core/src/lib/io/gr_message_source.i
@@ -20,6 +20,10 @@
* Boston, MA 02110-1301, USA.
*/
+#ifdef SWIGGUILE
+#warning "gr_message_source.i: FIXME being ignored by swig/guile for now"
+#else
+
GR_SWIG_BLOCK_MAGIC(gr,message_source);
gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0);
@@ -36,3 +40,4 @@ class gr_message_source : public gr_sync_block
gr_msg_queue_sptr msgq() const;
};
+#endif
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.cc b/gnuradio-core/src/lib/runtime/gr_basic_block.cc
index 2fa1066cb..0e0dad16b 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.cc
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.cc
@@ -56,7 +56,7 @@ gr_basic_block::~gr_basic_block()
}
gr_basic_block_sptr
-gr_basic_block::basic_block()
+gr_basic_block::to_basic_block()
{
return shared_from_this();
}
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h
index b8797fdc6..d059a4bd3 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h
@@ -81,7 +81,7 @@ public:
std::string name() const { return d_name; }
gr_io_signature_sptr input_signature() const { return d_input_signature; }
gr_io_signature_sptr output_signature() const { return d_output_signature; }
- gr_basic_block_sptr basic_block(); // Needed for Python type coercion
+ gr_basic_block_sptr to_basic_block(); // Needed for Python/Guile type coercion
/*!
* \brief Confirm that ninputs and noutputs is an acceptable combination.
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.i b/gnuradio-core/src/lib/runtime/gr_basic_block.i
index 60e08aac3..03d4725d5 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.i
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2006 Free Software Foundation, Inc.
+ * Copyright 2006,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -40,13 +40,15 @@ public:
gr_io_signature_sptr input_signature() const;
gr_io_signature_sptr output_signature() const;
long unique_id() const;
- gr_basic_block_sptr basic_block();
+ gr_basic_block_sptr to_basic_block();
bool check_topology (int ninputs, int noutputs);
};
%rename(block_ncurrently_allocated) gr_basic_block_ncurrently_allocated;
long gr_basic_block_ncurrently_allocated();
+#ifdef SWIGPYTHON
%pythoncode %{
gr_basic_block_sptr.__repr__ = lambda self: "<gr_basic_block %s (%d)>" % (self.name(), self.unique_id ())
%}
+#endif
diff --git a/gnuradio-core/src/lib/runtime/gr_block.i b/gnuradio-core/src/lib/runtime/gr_block.i
index c2e2aa4b8..f4ee43477 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.i
+++ b/gnuradio-core/src/lib/runtime/gr_block.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -53,8 +53,3 @@ class gr_block : public gr_basic_block {
gr_block_detail_sptr detail () const { return d_detail; }
void set_detail (gr_block_detail_sptr detail) { d_detail = detail; }
};
-
-%pythoncode %{
-gr_block_sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(), self.unique_id ())
-gr_block_sptr.block = lambda self: self
-%}
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.cc b/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
index e3a25e1a8..d6e317136 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
@@ -61,6 +61,11 @@ gr_hier_block2::self()
return shared_from_this();
}
+gr_hier_block2_sptr
+gr_hier_block2::to_hier_block2()
+{
+ return cast_to_hier_block2_sptr(shared_from_this());
+}
void
gr_hier_block2::connect(gr_basic_block_sptr block)
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
index f50b1cb94..0a40c36b7 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
@@ -147,6 +147,8 @@ public:
// This is a public method for ease of code organization, but should be
// ignored by the user.
gr_flat_flowgraph_sptr flatten() const;
+
+ gr_hier_block2_sptr to_hier_block2(); // Needed for Python/Guile type coercion
};
inline gr_hier_block2_sptr cast_to_hier_block2_sptr(gr_basic_block_sptr block) {
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.i b/gnuradio-core/src/lib/runtime/gr_hier_block2.i
index a62f50e84..32b656e24 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.i
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.i
@@ -34,6 +34,11 @@ gr_hier_block2_sptr gr_make_hier_block2(const std::string name,
gr_io_signature_sptr output_signature)
throw (std::runtime_error);
+// Rename connect and disconnect so that we can more easily build a
+// better interface in scripting land.
+%rename(primitive_connect) gr_hier_block2::connect;
+%rename(primitive_disconnect) gr_hier_block2::disconnect;
+
class gr_hier_block2 : public gr_basic_block
{
private:
@@ -57,4 +62,6 @@ public:
void disconnect_all();
void lock();
void unlock();
+
+ gr_hier_block2_sptr to_hier_block2(); // Needed for Python/Guile type coercion
};
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.i b/gnuradio-core/src/lib/runtime/gr_msg_queue.i
index 9ca92b6ec..5b8fea49f 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_queue.i
+++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.i
@@ -81,6 +81,7 @@ public:
* functions into the gr.msg_queue wrapper class, so that everything
* appears normal. (An evil laugh is heard in the distance...)
*/
+#ifdef SWIGPYTHON
%inline %{
gr_message_sptr gr_py_msg_queue__delete_head(gr_msg_queue_sptr q) {
gr_message_sptr msg;
@@ -103,3 +104,8 @@ gr_msg_queue_sptr.delete_head = gr_py_msg_queue__delete_head
gr_msg_queue_sptr.insert_tail = gr_py_msg_queue__insert_tail
gr_msg_queue_sptr.handle = gr_py_msg_queue__insert_tail
%}
+#endif
+
+#ifdef SWIGGUILE
+#warning "gr_msg_queue.i: gr_msg_queue_sptr needs to be implemented!"
+#endif
diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i
index 5e9032449..2378a1880 100644
--- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i
+++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i
@@ -42,6 +42,7 @@ class gr_single_threaded_scheduler {
gr_single_threaded_scheduler (const std::vector<gr_block_sptr> &modules);
};
+#ifdef SWIGPYTHON
%inline %{
void sts_pyrun (gr_single_threaded_scheduler_sptr s) {
Py_BEGIN_ALLOW_THREADS; // release global interpreter lock
@@ -49,3 +50,5 @@ class gr_single_threaded_scheduler {
Py_END_ALLOW_THREADS; // acquire global interpreter lock
}
%}
+#endif
+
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.cc b/gnuradio-core/src/lib/runtime/gr_top_block.cc
index 09e46dfbb..f341525c0 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.cc
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.cc
@@ -95,3 +95,9 @@ gr_top_block::dump()
{
d_impl->dump();
}
+
+gr_top_block_sptr
+gr_top_block::to_top_block()
+{
+ return cast_to_top_block_sptr(shared_from_this());
+}
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.h b/gnuradio-core/src/lib/runtime/gr_top_block.h
index 8052954e3..ed244cb7c 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.h
@@ -105,6 +105,13 @@ public:
* Displays flattened flowgraph edges and block connectivity
*/
void dump();
+
+ gr_top_block_sptr to_top_block(); // Needed for Python/Guile type coercion
};
+inline gr_top_block_sptr cast_to_top_block_sptr(gr_basic_block_sptr block) {
+ return boost::dynamic_pointer_cast<gr_top_block, gr_basic_block>(block);
+}
+
+
#endif /* INCLUDED_GR_TOP_BLOCK_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.i b/gnuradio-core/src/lib/runtime/gr_top_block.i
index 670e5b5e5..f18d8890b 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.i
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.i
@@ -43,12 +43,16 @@ public:
void start() throw (std::runtime_error);
void stop();
void wait();
- void run();
+ void run() throw (std::runtime_error);
void lock();
void unlock() throw (std::runtime_error);
void dump();
+
+ gr_top_block_sptr to_top_block(); // Needed for Python/Guile type coercion
};
+#ifdef SWIGPYTHON
+
%inline %{
void top_block_run_unlocked(gr_top_block_sptr r) throw (std::runtime_error)
{
@@ -64,3 +68,9 @@ void top_block_wait_unlocked(gr_top_block_sptr r) throw (std::runtime_error)
Py_END_ALLOW_THREADS; // acquire global interpreter lock
}
%}
+
+#endif
+
+#ifdef SWIG_GUILE
+#warning "gr_top_block.i: top_block_run_unlocked needs to be implemented!"
+#endif
diff --git a/gnuradio-core/src/lib/runtime/runtime.i b/gnuradio-core/src/lib/runtime/runtime.i
index 20cf68a03..ca89b8fbd 100644
--- a/gnuradio-core/src/lib/runtime/runtime.i
+++ b/gnuradio-core/src/lib/runtime/runtime.i
@@ -40,6 +40,13 @@
#include <gr_top_block.h>
%}
+%constant int sizeof_char = sizeof(char);
+%constant int sizeof_short = sizeof(short);
+%constant int sizeof_int = sizeof(int);
+%constant int sizeof_float = sizeof(float);
+%constant int sizeof_double = sizeof(double);
+%constant int sizeof_gr_complex = sizeof(gr_complex);
+
%include <gr_io_signature.i>
%include <gr_buffer.i>
%include <gr_basic_block.i>
diff --git a/gnuradio-core/src/lib/swig/.gitignore b/gnuradio-core/src/lib/swig/.gitignore
index 9d7d01056..35e974948 100644
--- a/gnuradio-core/src/lib/swig/.gitignore
+++ b/gnuradio-core/src/lib/swig/.gitignore
@@ -10,27 +10,41 @@
/swigrun.py
/swigrun_wrap.c
/Makefile.swigdeps.new
-/gnuradio_swig_py_runtime.d
-/gnuradio_swig_py_general.d
-/gnuradio_swig_py_gengen.d
-/gnuradio_swig_py_filter.d
-/gnuradio_swig_py_io.d
/gnuradio_swig_bug_workaround.h
-/gnuradio_swig_py_runtime.cc
-/gnuradio_swig_py_runtime.h
-/gnuradio_swig_py_runtime.py
-/gnuradio_swig_py_general.cc
-/gnuradio_swig_py_general.h
-/gnuradio_swig_py_general.py
-/gnuradio_swig_py_gengen.cc
-/gnuradio_swig_py_gengen.h
-/gnuradio_swig_py_gengen.py
-/gnuradio_swig_py_filter.cc
-/gnuradio_swig_py_filter.h
-/gnuradio_swig_py_filter.py
-/gnuradio_swig_py_io.cc
-/gnuradio_swig_py_io.h
-/gnuradio_swig_py_io.py
-/gnuradio_swig_py_hier.cc
-/gnuradio_swig_py_hier.h
-/gnuradio_swig_py_hier.py
+gnuradio_core_filter.cc
+gnuradio_core_filter.d
+gnuradio_core_filter.h
+gnuradio_core_filter.py
+gnuradio_core_filter.scm
+gnuradio_core_filter-primitive.scm
+gnuradio_core_general.cc
+gnuradio_core_general.d
+gnuradio_core_general.h
+gnuradio_core_general.py
+gnuradio_core_general.scm
+gnuradio_core_general-primitive.scm
+gnuradio_core_gengen.cc
+gnuradio_core_gengen.d
+gnuradio_core_gengen.h
+gnuradio_core_gengen.py
+gnuradio_core_gengen.scm
+gnuradio_core_gengen-primitive.scm
+gnuradio_core_hier.cc
+gnuradio_core_hier.d
+gnuradio_core_hier.h
+gnuradio_core_hier.py
+gnuradio_core_hier.scm
+gnuradio_core_hier-primitive.scm
+gnuradio_core_io.cc
+gnuradio_core_io.d
+gnuradio_core_io.h
+gnuradio_core_io.py
+gnuradio_core_io.scm
+gnuradio_core_io-primitive.scm
+gnuradio_core_runtime.cc
+gnuradio_core_runtime.d
+gnuradio_core_runtime.h
+gnuradio_core_runtime.py
+gnuradio_core_runtime.scm
+gnuradio_core_runtime-primitive.scm
+
diff --git a/gnuradio-core/src/lib/swig/Makefile.am b/gnuradio-core/src/lib/swig/Makefile.am
index 1a50b8c8e..16b5d677e 100644
--- a/gnuradio-core/src/lib/swig/Makefile.am
+++ b/gnuradio-core/src/lib/swig/Makefile.am
@@ -20,12 +20,30 @@
#
include $(top_srcdir)/Makefile.common
+include $(top_srcdir)/Makefile.swig
-if PYTHON
-AM_CPPFLAGS = -I$(srcdir) $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \
- $(WITH_INCLUDES)
+BUILT_SOURCES = $(grinclude_HEADERS) $(swig_built_sources)
+
+CLEANFILES = python/*.cc python/*.h
+if GUILE
+CLEANFILES += guile/*.cc gnuradio/*.scm
+endif
+
+# ----------------------------------------------------------------
+# We've split the previously monstrous gnuradio_core into 6
+# smaller pieces. This reduces compile time coupling and creates
+# smaller pieces for the compiler to digest. prior to this change, on
+# X86_64, g++'s resident set size was 650MB!
+# ----------------------------------------------------------------
+
+TOP_SWIG_IFILES = \
+ gnuradio_core_runtime.i \
+ gnuradio_core_general.i \
+ gnuradio_core_gengen.i \
+ gnuradio_core_filter.i \
+ gnuradio_core_io.i \
+ gnuradio_core_hier.i
-EXTRA_DIST = gen-swig-bug-fix
# SWIG headers get installed in ${prefix}/include/gnuradio/swig
swiginclude_HEADERS = \
@@ -33,71 +51,67 @@ swiginclude_HEADERS = \
gr_swig_block_magic.i \
gr_shared_ptr.i
+# SWIG headers that get installed in ${prefix}/include/gnuradio/swig/...
+nobase_swiginclude_HEADERS = \
+ guile/std_complex.i \
+ guile/std_vector.i
+
+
+if PYTHON
+AM_CPPFLAGS = -I$(srcdir) $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \
+ $(WITH_INCLUDES)
+
+EXTRA_DIST = gen-swig-bug-fix
+
# special install for this top-level Python script which includes all
# of the split Python libraries.
ourpythondir = $(grpythondir)/gr
-ourpython_PYTHON = gnuradio_swig_python.py
+ourpython_PYTHON = gnuradio_core.py
# ----------------------------------------------------------------
# FIXME As of swig 1.3.31, this still seems to be required...
-gnuradio_swig_bug_workaround.h : gnuradio_swig_py_runtime.cc $(srcdir)/gen-swig-bug-fix
- $(PYTHON) $(srcdir)/gen-swig-bug-fix gnuradio_swig_py_runtime.cc $@
+gnuradio_swig_bug_workaround.h : gnuradio_core_runtime.py $(srcdir)/gen-swig-bug-fix
+ $(PYTHON) $(srcdir)/gen-swig-bug-fix python/gnuradio_core_runtime.cc $@
# C/C++ headers get installed in ${prefix}/include/gnuradio
-grinclude_HEADERS = \
- gnuradio_swig_bug_workaround.h
-
-# ----------------------------------------------------------------
-# We've split the previously monstrous gnuradio_swig_python into 6
-# smaller pieces. This reduces compile time coupling and creates
-# smaller pieces for the compiler to digest. prior to this change, on
-# X86_64, g++'s resident set size was 650MB!
-# ----------------------------------------------------------------
-
-TOP_SWIG_IFILES = \
- gnuradio_swig_py_runtime.i \
- gnuradio_swig_py_general.i \
- gnuradio_swig_py_gengen.i \
- gnuradio_swig_py_filter.i \
- gnuradio_swig_py_io.i \
- gnuradio_swig_py_hier.i
+grinclude_HEADERS = gnuradio_swig_bug_workaround.h
# Install so that they end up available as:
# import gnuradio.gr
# This ends up at:
# ${prefix}/lib/python${python_version}/site-packages/gnuradio/gr
-gnuradio_swig_py_runtime_pythondir_category = gnuradio/gr
-gnuradio_swig_py_general_pythondir_category = gnuradio/gr
-gnuradio_swig_py_gengen_pythondir_category = gnuradio/gr
-gnuradio_swig_py_filter_pythondir_category = gnuradio/gr
-gnuradio_swig_py_io_pythondir_category = gnuradio/gr
-gnuradio_swig_py_hier_pythondir_category = gnuradio/gr
+gnuradio_core_runtime_pythondir_category = gnuradio/gr
+gnuradio_core_general_pythondir_category = gnuradio/gr
+gnuradio_core_gengen_pythondir_category = gnuradio/gr
+gnuradio_core_filter_pythondir_category = gnuradio/gr
+gnuradio_core_io_pythondir_category = gnuradio/gr
+gnuradio_core_hier_pythondir_category = gnuradio/gr
# additional libraries for linking with each SWIG-generated library
-gnuradio_swig_py_runtime_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_swig_py_general_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_swig_py_gengen_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_swig_py_filter_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_swig_py_io_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_swig_py_hier_la_swig_libadd = $(GNURADIO_CORE_LA)
-
-include $(top_srcdir)/Makefile.swig
+gnuradio_core_runtime_la_swig_libadd = $(GNURADIO_CORE_LA)
+gnuradio_core_general_la_swig_libadd = $(GNURADIO_CORE_LA)
+gnuradio_core_gengen_la_swig_libadd = $(GNURADIO_CORE_LA)
+gnuradio_core_filter_la_swig_libadd = $(GNURADIO_CORE_LA)
+gnuradio_core_io_la_swig_libadd = $(GNURADIO_CORE_LA)
+gnuradio_core_hier_la_swig_libadd = $(GNURADIO_CORE_LA)
# add some of the variables generated inside the Makefile.swig
# include the SWIG-generated .h files in the BUILT SOURCES, since they
# aren't by default when using Makefile.swig; order doesn't matter.
-BUILT_SOURCES = \
- gnuradio_swig_py_runtime.h \
- gnuradio_swig_py_general.h \
- gnuradio_swig_py_gengen.h \
- gnuradio_swig_py_filter.h \
- gnuradio_swig_py_io.h \
- gnuradio_swig_py_hier.h \
- $(grinclude_HEADERS) \
- $(swig_built_sources)
+PYTHON_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(subst .i,.py,$(HFILE)))
+swig_built_sources += $(PYTHON_GEN)
+endif # end of if python
+
+if GUILE
+SWIG_GUILE_FLAGS += -DIN_GNURADIO_CORE
+#GUILE_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(patsubst %.i,%.scm,$(HFILE)))
+GUILE_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(patsubst %.i,gnuradio/%.scm,$(HFILE)))
+# GUILE_GEN_STAMPS = $(filter %.scm,$(TOP_SWIG_IFILES))
+swig_built_sources += $(GUILE_GEN)
+endif
# Do not distribute the output of SWIG
no_dist_files = $(swig_built_sources)
-endif
+
diff --git a/gnuradio-core/src/lib/swig/Makefile.swig.gen b/gnuradio-core/src/lib/swig/Makefile.swig.gen
index e24ba5a96..dc7a7b3bb 100644
--- a/gnuradio-core/src/lib/swig/Makefile.swig.gen
+++ b/gnuradio-core/src/lib/swig/Makefile.swig.gen
@@ -20,27 +20,37 @@
# Boston, MA 02110-1301, USA.
#
-# Makefile.swig.gen for gnuradio_swig_py_runtime.i
+# Makefile.swig.gen for gnuradio_core_runtime.i
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_runtime
+## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_runtime
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_runtime
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_runtime
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-gnuradio_swig_py_runtime_pythondir_category ?= gnuradio/gnuradio_swig_py_runtime
-gnuradio_swig_py_runtime_pylibdir_category ?= $(gnuradio_swig_py_runtime_pythondir_category)
-gnuradio_swig_py_runtime_pythondir = $(pythondir)/$(gnuradio_swig_py_runtime_pythondir_category)
-gnuradio_swig_py_runtime_pylibdir = $(pyexecdir)/$(gnuradio_swig_py_runtime_pylibdir_category)
+gnuradio_core_runtime_pythondir_category ?= gnuradio/gnuradio_core_runtime
+gnuradio_core_runtime_pylibdir_category ?= $(gnuradio_core_runtime_pythondir_category)
+gnuradio_core_runtime_pythondir = $(pythondir)/$(gnuradio_core_runtime_pythondir_category)
+gnuradio_core_runtime_pylibdir = $(pyexecdir)/$(gnuradio_core_runtime_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_runtime_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gnuradio_core_runtime
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_runtime_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
-gnuradio_swig_py_runtime_swigincludedir = $(swigincludedir)
+gnuradio_core_runtime_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -57,205 +67,69 @@ gnuradio_swig_py_runtime_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gnuradio_swig_py_runtime-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gnuradio_swig_py_runtime.py gnuradio_swig_py_runtime.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
-gnuradio_swig_py_runtime_swiginclude_HEADERS = \
- gnuradio_swig_py_runtime.i \
- $(gnuradio_swig_py_runtime_swiginclude_headers)
+gnuradio_core_runtime_swiginclude_HEADERS = \
+ gnuradio_core_runtime.i \
+ $(gnuradio_core_runtime_swiginclude_headers)
-gnuradio_swig_py_runtime_pylib_LTLIBRARIES = \
- _gnuradio_swig_py_runtime.la
+gnuradio_core_runtime_pylib_LTLIBRARIES = \
+ _gnuradio_core_runtime.la
-_gnuradio_swig_py_runtime_la_SOURCES = \
- gnuradio_swig_py_runtime.cc \
- $(gnuradio_swig_py_runtime_la_swig_sources)
+_gnuradio_core_runtime_la_SOURCES = \
+ python/gnuradio_core_runtime.cc \
+ $(gnuradio_core_runtime_la_swig_sources)
-_gnuradio_swig_py_runtime_la_LIBADD = \
+_gnuradio_core_runtime_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_swig_py_runtime_la_swig_libadd)
+ $(gnuradio_core_runtime_la_swig_libadd)
-_gnuradio_swig_py_runtime_la_LDFLAGS = \
+_gnuradio_core_runtime_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_swig_py_runtime_la_swig_ldflags)
+ $(gnuradio_core_runtime_la_swig_ldflags)
-_gnuradio_swig_py_runtime_la_CXXFLAGS = \
+_gnuradio_core_runtime_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
- $(gnuradio_swig_py_runtime_la_swig_cxxflags)
+ -I$(top_builddir) \
+ $(gnuradio_core_runtime_la_swig_cxxflags)
-gnuradio_swig_py_runtime_python_PYTHON = \
- gnuradio_swig_py_runtime.py \
- $(gnuradio_swig_py_runtime_python)
+gnuradio_core_runtime_python_PYTHON = \
+ gnuradio_core_runtime.py \
+ $(gnuradio_core_runtime_python)
-## Entry rule for running SWIG
+python/gnuradio_core_runtime.cc: gnuradio_core_runtime.py
+gnuradio_core_runtime.py: gnuradio_core_runtime.i
-gnuradio_swig_py_runtime.h gnuradio_swig_py_runtime.py gnuradio_swig_py_runtime.cc: gnuradio_swig_py_runtime.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gnuradio_swig_py_runtime-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_runtime-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gnuradio_swig_py_runtime-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gnuradio_swig_py_runtime-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gnuradio_swig_py_runtime-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gnuradio_swig_py_runtime_swig_args) \
- -MD -MF $(DEPDIR)/gnuradio_swig_py_runtime.Std \
- -module gnuradio_swig_py_runtime -o gnuradio_swig_py_runtime.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gnuradio_swig_py_runtime.Std \
- > $(DEPDIR)/gnuradio_swig_py_runtime.Sd; \
- $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.Std; \
- $(MV) $(DEPDIR)/gnuradio_swig_py_runtime.Sd $(DEPDIR)/gnuradio_swig_py_runtime.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gnuradio_swig_py_runtime.Std $(DEPDIR)/gnuradio_swig_py_runtime.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gnuradio_swig_py_runtime.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gnuradio_swig_py_runtime.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gnuradio_swig_py_runtime.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp
+# Include the python dependencies for this file
+-include python/gnuradio_core_runtime.d
+# end of PYTHON
+
+if GUILE
+gnuradio_core_runtime_scmlib_LTLIBRARIES = libguile-gnuradio_core_runtime.la
+libguile_gnuradio_core_runtime_la_SOURCES = \
+ guile/gnuradio_core_runtime.cc \
+ $(gnuradio_core_runtime_la_swig_sources)
+nobase_gnuradio_core_runtime_scm_DATA = gnuradio/gnuradio_core_runtime.scm gnuradio/gnuradio_core_runtime-primitive.scm
+
+libguile_gnuradio_core_runtime_la_LIBADD = $(_gnuradio_core_runtime_la_LIBADD)
+libguile_gnuradio_core_runtime_la_LDFLAGS = $(_gnuradio_core_runtime_la_LDFLAGS)
+libguile_gnuradio_core_runtime_la_CXXFLAGS = $(_gnuradio_core_runtime_la_CXXFLAGS)
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+guile/gnuradio_core_runtime.cc: gnuradio/gnuradio_core_runtime.scm
+gnuradio/gnuradio_core_runtime.scm: gnuradio_core_runtime.i
+gnuradio/gnuradio_core_runtime-primitive.scm: gnuradio/gnuradio_core_runtime.scm
+
+# Include the guile dependencies for this file
+-include guile/gnuradio_core_runtime.d
+
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_py_runtime.d@am__quote@
# -*- Makefile -*-
#
@@ -279,27 +153,37 @@ $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp:
# Boston, MA 02110-1301, USA.
#
-# Makefile.swig.gen for gnuradio_swig_py_general.i
+# Makefile.swig.gen for gnuradio_core_general.i
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_general
+## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_general
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_general
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_general
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-gnuradio_swig_py_general_pythondir_category ?= gnuradio/gnuradio_swig_py_general
-gnuradio_swig_py_general_pylibdir_category ?= $(gnuradio_swig_py_general_pythondir_category)
-gnuradio_swig_py_general_pythondir = $(pythondir)/$(gnuradio_swig_py_general_pythondir_category)
-gnuradio_swig_py_general_pylibdir = $(pyexecdir)/$(gnuradio_swig_py_general_pylibdir_category)
+gnuradio_core_general_pythondir_category ?= gnuradio/gnuradio_core_general
+gnuradio_core_general_pylibdir_category ?= $(gnuradio_core_general_pythondir_category)
+gnuradio_core_general_pythondir = $(pythondir)/$(gnuradio_core_general_pythondir_category)
+gnuradio_core_general_pylibdir = $(pyexecdir)/$(gnuradio_core_general_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_general_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gnuradio_core_general
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_general_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
-gnuradio_swig_py_general_swigincludedir = $(swigincludedir)
+gnuradio_core_general_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -316,205 +200,69 @@ gnuradio_swig_py_general_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gnuradio_swig_py_general-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gnuradio_swig_py_general.py gnuradio_swig_py_general.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
-gnuradio_swig_py_general_swiginclude_HEADERS = \
- gnuradio_swig_py_general.i \
- $(gnuradio_swig_py_general_swiginclude_headers)
+gnuradio_core_general_swiginclude_HEADERS = \
+ gnuradio_core_general.i \
+ $(gnuradio_core_general_swiginclude_headers)
-gnuradio_swig_py_general_pylib_LTLIBRARIES = \
- _gnuradio_swig_py_general.la
+gnuradio_core_general_pylib_LTLIBRARIES = \
+ _gnuradio_core_general.la
-_gnuradio_swig_py_general_la_SOURCES = \
- gnuradio_swig_py_general.cc \
- $(gnuradio_swig_py_general_la_swig_sources)
+_gnuradio_core_general_la_SOURCES = \
+ python/gnuradio_core_general.cc \
+ $(gnuradio_core_general_la_swig_sources)
-_gnuradio_swig_py_general_la_LIBADD = \
+_gnuradio_core_general_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_swig_py_general_la_swig_libadd)
+ $(gnuradio_core_general_la_swig_libadd)
-_gnuradio_swig_py_general_la_LDFLAGS = \
+_gnuradio_core_general_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_swig_py_general_la_swig_ldflags)
+ $(gnuradio_core_general_la_swig_ldflags)
-_gnuradio_swig_py_general_la_CXXFLAGS = \
+_gnuradio_core_general_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
- $(gnuradio_swig_py_general_la_swig_cxxflags)
+ -I$(top_builddir) \
+ $(gnuradio_core_general_la_swig_cxxflags)
-gnuradio_swig_py_general_python_PYTHON = \
- gnuradio_swig_py_general.py \
- $(gnuradio_swig_py_general_python)
+gnuradio_core_general_python_PYTHON = \
+ gnuradio_core_general.py \
+ $(gnuradio_core_general_python)
-## Entry rule for running SWIG
+python/gnuradio_core_general.cc: gnuradio_core_general.py
+gnuradio_core_general.py: gnuradio_core_general.i
-gnuradio_swig_py_general.h gnuradio_swig_py_general.py gnuradio_swig_py_general.cc: gnuradio_swig_py_general.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gnuradio_swig_py_general-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_general-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gnuradio_swig_py_general-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gnuradio_swig_py_general-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_general-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gnuradio_swig_py_general-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gnuradio_swig_py_general-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gnuradio_swig_py_general-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/gnuradio_swig_py_general-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gnuradio_swig_py_general_swig_args) \
- -MD -MF $(DEPDIR)/gnuradio_swig_py_general.Std \
- -module gnuradio_swig_py_general -o gnuradio_swig_py_general.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gnuradio_swig_py_general.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gnuradio_swig_py_general.Std \
- > $(DEPDIR)/gnuradio_swig_py_general.Sd; \
- $(RM) $(DEPDIR)/gnuradio_swig_py_general.Std; \
- $(MV) $(DEPDIR)/gnuradio_swig_py_general.Sd $(DEPDIR)/gnuradio_swig_py_general.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gnuradio_swig_py_general.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_general.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gnuradio_swig_py_general.Std $(DEPDIR)/gnuradio_swig_py_general.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gnuradio_swig_py_general.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gnuradio_swig_py_general.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gnuradio_swig_py_general.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_general.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gnuradio_swig_py_general-generate-stamp
+# Include the python dependencies for this file
+-include python/gnuradio_core_general.d
+# end of PYTHON
+
+if GUILE
+gnuradio_core_general_scmlib_LTLIBRARIES = libguile-gnuradio_core_general.la
+libguile_gnuradio_core_general_la_SOURCES = \
+ guile/gnuradio_core_general.cc \
+ $(gnuradio_core_general_la_swig_sources)
+nobase_gnuradio_core_general_scm_DATA = gnuradio/gnuradio_core_general.scm gnuradio/gnuradio_core_general-primitive.scm
+
+libguile_gnuradio_core_general_la_LIBADD = $(_gnuradio_core_general_la_LIBADD)
+libguile_gnuradio_core_general_la_LDFLAGS = $(_gnuradio_core_general_la_LDFLAGS)
+libguile_gnuradio_core_general_la_CXXFLAGS = $(_gnuradio_core_general_la_CXXFLAGS)
+
+guile/gnuradio_core_general.cc: gnuradio/gnuradio_core_general.scm
+gnuradio/gnuradio_core_general.scm: gnuradio_core_general.i
+gnuradio/gnuradio_core_general-primitive.scm: gnuradio/gnuradio_core_general.scm
+
+# Include the guile dependencies for this file
+-include guile/gnuradio_core_general.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_py_general.d@am__quote@
# -*- Makefile -*-
#
@@ -538,27 +286,37 @@ $(DEPDIR)/gnuradio_swig_py_general-generate-stamp:
# Boston, MA 02110-1301, USA.
#
-# Makefile.swig.gen for gnuradio_swig_py_gengen.i
+# Makefile.swig.gen for gnuradio_core_gengen.i
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_gengen
+## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_gengen
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_gengen
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_gengen
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-gnuradio_swig_py_gengen_pythondir_category ?= gnuradio/gnuradio_swig_py_gengen
-gnuradio_swig_py_gengen_pylibdir_category ?= $(gnuradio_swig_py_gengen_pythondir_category)
-gnuradio_swig_py_gengen_pythondir = $(pythondir)/$(gnuradio_swig_py_gengen_pythondir_category)
-gnuradio_swig_py_gengen_pylibdir = $(pyexecdir)/$(gnuradio_swig_py_gengen_pylibdir_category)
+gnuradio_core_gengen_pythondir_category ?= gnuradio/gnuradio_core_gengen
+gnuradio_core_gengen_pylibdir_category ?= $(gnuradio_core_gengen_pythondir_category)
+gnuradio_core_gengen_pythondir = $(pythondir)/$(gnuradio_core_gengen_pythondir_category)
+gnuradio_core_gengen_pylibdir = $(pyexecdir)/$(gnuradio_core_gengen_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_gengen_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gnuradio_core_gengen
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_gengen_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
-gnuradio_swig_py_gengen_swigincludedir = $(swigincludedir)
+gnuradio_core_gengen_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -575,205 +333,69 @@ gnuradio_swig_py_gengen_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gnuradio_swig_py_gengen-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gnuradio_swig_py_gengen.py gnuradio_swig_py_gengen.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
-gnuradio_swig_py_gengen_swiginclude_HEADERS = \
- gnuradio_swig_py_gengen.i \
- $(gnuradio_swig_py_gengen_swiginclude_headers)
+gnuradio_core_gengen_swiginclude_HEADERS = \
+ gnuradio_core_gengen.i \
+ $(gnuradio_core_gengen_swiginclude_headers)
-gnuradio_swig_py_gengen_pylib_LTLIBRARIES = \
- _gnuradio_swig_py_gengen.la
+gnuradio_core_gengen_pylib_LTLIBRARIES = \
+ _gnuradio_core_gengen.la
-_gnuradio_swig_py_gengen_la_SOURCES = \
- gnuradio_swig_py_gengen.cc \
- $(gnuradio_swig_py_gengen_la_swig_sources)
+_gnuradio_core_gengen_la_SOURCES = \
+ python/gnuradio_core_gengen.cc \
+ $(gnuradio_core_gengen_la_swig_sources)
-_gnuradio_swig_py_gengen_la_LIBADD = \
+_gnuradio_core_gengen_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_swig_py_gengen_la_swig_libadd)
+ $(gnuradio_core_gengen_la_swig_libadd)
-_gnuradio_swig_py_gengen_la_LDFLAGS = \
+_gnuradio_core_gengen_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_swig_py_gengen_la_swig_ldflags)
+ $(gnuradio_core_gengen_la_swig_ldflags)
-_gnuradio_swig_py_gengen_la_CXXFLAGS = \
+_gnuradio_core_gengen_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
- $(gnuradio_swig_py_gengen_la_swig_cxxflags)
+ -I$(top_builddir) \
+ $(gnuradio_core_gengen_la_swig_cxxflags)
-gnuradio_swig_py_gengen_python_PYTHON = \
- gnuradio_swig_py_gengen.py \
- $(gnuradio_swig_py_gengen_python)
+gnuradio_core_gengen_python_PYTHON = \
+ gnuradio_core_gengen.py \
+ $(gnuradio_core_gengen_python)
-## Entry rule for running SWIG
+python/gnuradio_core_gengen.cc: gnuradio_core_gengen.py
+gnuradio_core_gengen.py: gnuradio_core_gengen.i
-gnuradio_swig_py_gengen.h gnuradio_swig_py_gengen.py gnuradio_swig_py_gengen.cc: gnuradio_swig_py_gengen.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gnuradio_swig_py_gengen-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_gengen-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gnuradio_swig_py_gengen-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gnuradio_swig_py_gengen-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gnuradio_swig_py_gengen-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gnuradio_swig_py_gengen_swig_args) \
- -MD -MF $(DEPDIR)/gnuradio_swig_py_gengen.Std \
- -module gnuradio_swig_py_gengen -o gnuradio_swig_py_gengen.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gnuradio_swig_py_gengen.Std \
- > $(DEPDIR)/gnuradio_swig_py_gengen.Sd; \
- $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.Std; \
- $(MV) $(DEPDIR)/gnuradio_swig_py_gengen.Sd $(DEPDIR)/gnuradio_swig_py_gengen.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gnuradio_swig_py_gengen.Std $(DEPDIR)/gnuradio_swig_py_gengen.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gnuradio_swig_py_gengen.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gnuradio_swig_py_gengen.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gnuradio_swig_py_gengen.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp
+# Include the python dependencies for this file
+-include python/gnuradio_core_gengen.d
+# end of PYTHON
+
+if GUILE
+gnuradio_core_gengen_scmlib_LTLIBRARIES = libguile-gnuradio_core_gengen.la
+libguile_gnuradio_core_gengen_la_SOURCES = \
+ guile/gnuradio_core_gengen.cc \
+ $(gnuradio_core_gengen_la_swig_sources)
+nobase_gnuradio_core_gengen_scm_DATA = gnuradio/gnuradio_core_gengen.scm gnuradio/gnuradio_core_gengen-primitive.scm
+
+libguile_gnuradio_core_gengen_la_LIBADD = $(_gnuradio_core_gengen_la_LIBADD)
+libguile_gnuradio_core_gengen_la_LDFLAGS = $(_gnuradio_core_gengen_la_LDFLAGS)
+libguile_gnuradio_core_gengen_la_CXXFLAGS = $(_gnuradio_core_gengen_la_CXXFLAGS)
+
+guile/gnuradio_core_gengen.cc: gnuradio/gnuradio_core_gengen.scm
+gnuradio/gnuradio_core_gengen.scm: gnuradio_core_gengen.i
+gnuradio/gnuradio_core_gengen-primitive.scm: gnuradio/gnuradio_core_gengen.scm
+
+# Include the guile dependencies for this file
+-include guile/gnuradio_core_gengen.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_py_gengen.d@am__quote@
# -*- Makefile -*-
#
@@ -797,27 +419,37 @@ $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp:
# Boston, MA 02110-1301, USA.
#
-# Makefile.swig.gen for gnuradio_swig_py_filter.i
+# Makefile.swig.gen for gnuradio_core_filter.i
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_filter
+## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_filter
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_filter
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_filter
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-gnuradio_swig_py_filter_pythondir_category ?= gnuradio/gnuradio_swig_py_filter
-gnuradio_swig_py_filter_pylibdir_category ?= $(gnuradio_swig_py_filter_pythondir_category)
-gnuradio_swig_py_filter_pythondir = $(pythondir)/$(gnuradio_swig_py_filter_pythondir_category)
-gnuradio_swig_py_filter_pylibdir = $(pyexecdir)/$(gnuradio_swig_py_filter_pylibdir_category)
+gnuradio_core_filter_pythondir_category ?= gnuradio/gnuradio_core_filter
+gnuradio_core_filter_pylibdir_category ?= $(gnuradio_core_filter_pythondir_category)
+gnuradio_core_filter_pythondir = $(pythondir)/$(gnuradio_core_filter_pythondir_category)
+gnuradio_core_filter_pylibdir = $(pyexecdir)/$(gnuradio_core_filter_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_filter_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gnuradio_core_filter
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_filter_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
-gnuradio_swig_py_filter_swigincludedir = $(swigincludedir)
+gnuradio_core_filter_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -834,205 +466,69 @@ gnuradio_swig_py_filter_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gnuradio_swig_py_filter-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gnuradio_swig_py_filter.py gnuradio_swig_py_filter.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
-gnuradio_swig_py_filter_swiginclude_HEADERS = \
- gnuradio_swig_py_filter.i \
- $(gnuradio_swig_py_filter_swiginclude_headers)
+gnuradio_core_filter_swiginclude_HEADERS = \
+ gnuradio_core_filter.i \
+ $(gnuradio_core_filter_swiginclude_headers)
-gnuradio_swig_py_filter_pylib_LTLIBRARIES = \
- _gnuradio_swig_py_filter.la
+gnuradio_core_filter_pylib_LTLIBRARIES = \
+ _gnuradio_core_filter.la
-_gnuradio_swig_py_filter_la_SOURCES = \
- gnuradio_swig_py_filter.cc \
- $(gnuradio_swig_py_filter_la_swig_sources)
+_gnuradio_core_filter_la_SOURCES = \
+ python/gnuradio_core_filter.cc \
+ $(gnuradio_core_filter_la_swig_sources)
-_gnuradio_swig_py_filter_la_LIBADD = \
+_gnuradio_core_filter_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_swig_py_filter_la_swig_libadd)
+ $(gnuradio_core_filter_la_swig_libadd)
-_gnuradio_swig_py_filter_la_LDFLAGS = \
+_gnuradio_core_filter_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_swig_py_filter_la_swig_ldflags)
+ $(gnuradio_core_filter_la_swig_ldflags)
-_gnuradio_swig_py_filter_la_CXXFLAGS = \
+_gnuradio_core_filter_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
- $(gnuradio_swig_py_filter_la_swig_cxxflags)
+ -I$(top_builddir) \
+ $(gnuradio_core_filter_la_swig_cxxflags)
-gnuradio_swig_py_filter_python_PYTHON = \
- gnuradio_swig_py_filter.py \
- $(gnuradio_swig_py_filter_python)
+gnuradio_core_filter_python_PYTHON = \
+ gnuradio_core_filter.py \
+ $(gnuradio_core_filter_python)
-## Entry rule for running SWIG
+python/gnuradio_core_filter.cc: gnuradio_core_filter.py
+gnuradio_core_filter.py: gnuradio_core_filter.i
-gnuradio_swig_py_filter.h gnuradio_swig_py_filter.py gnuradio_swig_py_filter.cc: gnuradio_swig_py_filter.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gnuradio_swig_py_filter-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_filter-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gnuradio_swig_py_filter-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gnuradio_swig_py_filter-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gnuradio_swig_py_filter-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/gnuradio_swig_py_filter-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gnuradio_swig_py_filter_swig_args) \
- -MD -MF $(DEPDIR)/gnuradio_swig_py_filter.Std \
- -module gnuradio_swig_py_filter -o gnuradio_swig_py_filter.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gnuradio_swig_py_filter.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gnuradio_swig_py_filter.Std \
- > $(DEPDIR)/gnuradio_swig_py_filter.Sd; \
- $(RM) $(DEPDIR)/gnuradio_swig_py_filter.Std; \
- $(MV) $(DEPDIR)/gnuradio_swig_py_filter.Sd $(DEPDIR)/gnuradio_swig_py_filter.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gnuradio_swig_py_filter.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_filter.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gnuradio_swig_py_filter.Std $(DEPDIR)/gnuradio_swig_py_filter.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gnuradio_swig_py_filter.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gnuradio_swig_py_filter.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gnuradio_swig_py_filter.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_filter.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp
+# Include the python dependencies for this file
+-include python/gnuradio_core_filter.d
+# end of PYTHON
+
+if GUILE
+gnuradio_core_filter_scmlib_LTLIBRARIES = libguile-gnuradio_core_filter.la
+libguile_gnuradio_core_filter_la_SOURCES = \
+ guile/gnuradio_core_filter.cc \
+ $(gnuradio_core_filter_la_swig_sources)
+nobase_gnuradio_core_filter_scm_DATA = gnuradio/gnuradio_core_filter.scm gnuradio/gnuradio_core_filter-primitive.scm
+
+libguile_gnuradio_core_filter_la_LIBADD = $(_gnuradio_core_filter_la_LIBADD)
+libguile_gnuradio_core_filter_la_LDFLAGS = $(_gnuradio_core_filter_la_LDFLAGS)
+libguile_gnuradio_core_filter_la_CXXFLAGS = $(_gnuradio_core_filter_la_CXXFLAGS)
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+guile/gnuradio_core_filter.cc: gnuradio/gnuradio_core_filter.scm
+gnuradio/gnuradio_core_filter.scm: gnuradio_core_filter.i
+gnuradio/gnuradio_core_filter-primitive.scm: gnuradio/gnuradio_core_filter.scm
+
+# Include the guile dependencies for this file
+-include guile/gnuradio_core_filter.d
+
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_py_filter.d@am__quote@
# -*- Makefile -*-
#
@@ -1056,27 +552,37 @@ $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp:
# Boston, MA 02110-1301, USA.
#
-# Makefile.swig.gen for gnuradio_swig_py_io.i
+# Makefile.swig.gen for gnuradio_core_io.i
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_io
+## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_io
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_io
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_io
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-gnuradio_swig_py_io_pythondir_category ?= gnuradio/gnuradio_swig_py_io
-gnuradio_swig_py_io_pylibdir_category ?= $(gnuradio_swig_py_io_pythondir_category)
-gnuradio_swig_py_io_pythondir = $(pythondir)/$(gnuradio_swig_py_io_pythondir_category)
-gnuradio_swig_py_io_pylibdir = $(pyexecdir)/$(gnuradio_swig_py_io_pylibdir_category)
+gnuradio_core_io_pythondir_category ?= gnuradio/gnuradio_core_io
+gnuradio_core_io_pylibdir_category ?= $(gnuradio_core_io_pythondir_category)
+gnuradio_core_io_pythondir = $(pythondir)/$(gnuradio_core_io_pythondir_category)
+gnuradio_core_io_pylibdir = $(pyexecdir)/$(gnuradio_core_io_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_io_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gnuradio_core_io
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_io_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
-gnuradio_swig_py_io_swigincludedir = $(swigincludedir)
+gnuradio_core_io_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -1093,205 +599,69 @@ gnuradio_swig_py_io_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gnuradio_swig_py_io-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gnuradio_swig_py_io.py gnuradio_swig_py_io.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
-gnuradio_swig_py_io_swiginclude_HEADERS = \
- gnuradio_swig_py_io.i \
- $(gnuradio_swig_py_io_swiginclude_headers)
+gnuradio_core_io_swiginclude_HEADERS = \
+ gnuradio_core_io.i \
+ $(gnuradio_core_io_swiginclude_headers)
-gnuradio_swig_py_io_pylib_LTLIBRARIES = \
- _gnuradio_swig_py_io.la
+gnuradio_core_io_pylib_LTLIBRARIES = \
+ _gnuradio_core_io.la
-_gnuradio_swig_py_io_la_SOURCES = \
- gnuradio_swig_py_io.cc \
- $(gnuradio_swig_py_io_la_swig_sources)
+_gnuradio_core_io_la_SOURCES = \
+ python/gnuradio_core_io.cc \
+ $(gnuradio_core_io_la_swig_sources)
-_gnuradio_swig_py_io_la_LIBADD = \
+_gnuradio_core_io_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_swig_py_io_la_swig_libadd)
+ $(gnuradio_core_io_la_swig_libadd)
-_gnuradio_swig_py_io_la_LDFLAGS = \
+_gnuradio_core_io_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_swig_py_io_la_swig_ldflags)
+ $(gnuradio_core_io_la_swig_ldflags)
-_gnuradio_swig_py_io_la_CXXFLAGS = \
+_gnuradio_core_io_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
- $(gnuradio_swig_py_io_la_swig_cxxflags)
+ -I$(top_builddir) \
+ $(gnuradio_core_io_la_swig_cxxflags)
-gnuradio_swig_py_io_python_PYTHON = \
- gnuradio_swig_py_io.py \
- $(gnuradio_swig_py_io_python)
+gnuradio_core_io_python_PYTHON = \
+ gnuradio_core_io.py \
+ $(gnuradio_core_io_python)
-## Entry rule for running SWIG
+python/gnuradio_core_io.cc: gnuradio_core_io.py
+gnuradio_core_io.py: gnuradio_core_io.i
-gnuradio_swig_py_io.h gnuradio_swig_py_io.py gnuradio_swig_py_io.cc: gnuradio_swig_py_io.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gnuradio_swig_py_io-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_io-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gnuradio_swig_py_io-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gnuradio_swig_py_io-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_io-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gnuradio_swig_py_io-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gnuradio_swig_py_io-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gnuradio_swig_py_io-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/gnuradio_swig_py_io-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gnuradio_swig_py_io_swig_args) \
- -MD -MF $(DEPDIR)/gnuradio_swig_py_io.Std \
- -module gnuradio_swig_py_io -o gnuradio_swig_py_io.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gnuradio_swig_py_io.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gnuradio_swig_py_io.Std \
- > $(DEPDIR)/gnuradio_swig_py_io.Sd; \
- $(RM) $(DEPDIR)/gnuradio_swig_py_io.Std; \
- $(MV) $(DEPDIR)/gnuradio_swig_py_io.Sd $(DEPDIR)/gnuradio_swig_py_io.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gnuradio_swig_py_io.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_io.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gnuradio_swig_py_io.Std $(DEPDIR)/gnuradio_swig_py_io.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gnuradio_swig_py_io.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gnuradio_swig_py_io.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gnuradio_swig_py_io.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_io.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gnuradio_swig_py_io-generate-stamp
+# Include the python dependencies for this file
+-include python/gnuradio_core_io.d
+# end of PYTHON
+
+if GUILE
+gnuradio_core_io_scmlib_LTLIBRARIES = libguile-gnuradio_core_io.la
+libguile_gnuradio_core_io_la_SOURCES = \
+ guile/gnuradio_core_io.cc \
+ $(gnuradio_core_io_la_swig_sources)
+nobase_gnuradio_core_io_scm_DATA = gnuradio/gnuradio_core_io.scm gnuradio/gnuradio_core_io-primitive.scm
+
+libguile_gnuradio_core_io_la_LIBADD = $(_gnuradio_core_io_la_LIBADD)
+libguile_gnuradio_core_io_la_LDFLAGS = $(_gnuradio_core_io_la_LDFLAGS)
+libguile_gnuradio_core_io_la_CXXFLAGS = $(_gnuradio_core_io_la_CXXFLAGS)
+
+guile/gnuradio_core_io.cc: gnuradio/gnuradio_core_io.scm
+gnuradio/gnuradio_core_io.scm: gnuradio_core_io.i
+gnuradio/gnuradio_core_io-primitive.scm: gnuradio/gnuradio_core_io.scm
+
+# Include the guile dependencies for this file
+-include guile/gnuradio_core_io.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_py_io.d@am__quote@
# -*- Makefile -*-
#
@@ -1315,27 +685,37 @@ $(DEPDIR)/gnuradio_swig_py_io-generate-stamp:
# Boston, MA 02110-1301, USA.
#
-# Makefile.swig.gen for gnuradio_swig_py_hier.i
+# Makefile.swig.gen for gnuradio_core_hier.i
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_hier
+## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_hier
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_hier
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_hier
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-gnuradio_swig_py_hier_pythondir_category ?= gnuradio/gnuradio_swig_py_hier
-gnuradio_swig_py_hier_pylibdir_category ?= $(gnuradio_swig_py_hier_pythondir_category)
-gnuradio_swig_py_hier_pythondir = $(pythondir)/$(gnuradio_swig_py_hier_pythondir_category)
-gnuradio_swig_py_hier_pylibdir = $(pyexecdir)/$(gnuradio_swig_py_hier_pylibdir_category)
+gnuradio_core_hier_pythondir_category ?= gnuradio/gnuradio_core_hier
+gnuradio_core_hier_pylibdir_category ?= $(gnuradio_core_hier_pythondir_category)
+gnuradio_core_hier_pythondir = $(pythondir)/$(gnuradio_core_hier_pythondir_category)
+gnuradio_core_hier_pylibdir = $(pyexecdir)/$(gnuradio_core_hier_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_hier_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gnuradio_core_hier
+# FIXME: determince whether these should be installed with gnuradio.
+gnuradio_core_hier_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
-gnuradio_swig_py_hier_swigincludedir = $(swigincludedir)
+gnuradio_core_hier_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -1352,203 +732,67 @@ gnuradio_swig_py_hier_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gnuradio_swig_py_hier-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gnuradio_swig_py_hier.py gnuradio_swig_py_hier.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
-gnuradio_swig_py_hier_swiginclude_HEADERS = \
- gnuradio_swig_py_hier.i \
- $(gnuradio_swig_py_hier_swiginclude_headers)
+gnuradio_core_hier_swiginclude_HEADERS = \
+ gnuradio_core_hier.i \
+ $(gnuradio_core_hier_swiginclude_headers)
-gnuradio_swig_py_hier_pylib_LTLIBRARIES = \
- _gnuradio_swig_py_hier.la
+gnuradio_core_hier_pylib_LTLIBRARIES = \
+ _gnuradio_core_hier.la
-_gnuradio_swig_py_hier_la_SOURCES = \
- gnuradio_swig_py_hier.cc \
- $(gnuradio_swig_py_hier_la_swig_sources)
+_gnuradio_core_hier_la_SOURCES = \
+ python/gnuradio_core_hier.cc \
+ $(gnuradio_core_hier_la_swig_sources)
-_gnuradio_swig_py_hier_la_LIBADD = \
+_gnuradio_core_hier_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_swig_py_hier_la_swig_libadd)
+ $(gnuradio_core_hier_la_swig_libadd)
-_gnuradio_swig_py_hier_la_LDFLAGS = \
+_gnuradio_core_hier_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_swig_py_hier_la_swig_ldflags)
+ $(gnuradio_core_hier_la_swig_ldflags)
-_gnuradio_swig_py_hier_la_CXXFLAGS = \
+_gnuradio_core_hier_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
- $(gnuradio_swig_py_hier_la_swig_cxxflags)
+ -I$(top_builddir) \
+ $(gnuradio_core_hier_la_swig_cxxflags)
-gnuradio_swig_py_hier_python_PYTHON = \
- gnuradio_swig_py_hier.py \
- $(gnuradio_swig_py_hier_python)
+gnuradio_core_hier_python_PYTHON = \
+ gnuradio_core_hier.py \
+ $(gnuradio_core_hier_python)
-## Entry rule for running SWIG
+python/gnuradio_core_hier.cc: gnuradio_core_hier.py
+gnuradio_core_hier.py: gnuradio_core_hier.i
-gnuradio_swig_py_hier.h gnuradio_swig_py_hier.py gnuradio_swig_py_hier.cc: gnuradio_swig_py_hier.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gnuradio_swig_py_hier-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_hier-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gnuradio_swig_py_hier-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gnuradio_swig_py_hier-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gnuradio_swig_py_hier-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/gnuradio_swig_py_hier-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gnuradio_swig_py_hier_swig_args) \
- -MD -MF $(DEPDIR)/gnuradio_swig_py_hier.Std \
- -module gnuradio_swig_py_hier -o gnuradio_swig_py_hier.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gnuradio_swig_py_hier.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gnuradio_swig_py_hier.Std \
- > $(DEPDIR)/gnuradio_swig_py_hier.Sd; \
- $(RM) $(DEPDIR)/gnuradio_swig_py_hier.Std; \
- $(MV) $(DEPDIR)/gnuradio_swig_py_hier.Sd $(DEPDIR)/gnuradio_swig_py_hier.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gnuradio_swig_py_hier.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_hier.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gnuradio_swig_py_hier.Std $(DEPDIR)/gnuradio_swig_py_hier.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gnuradio_swig_py_hier.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gnuradio_swig_py_hier.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gnuradio_swig_py_hier.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gnuradio_swig_py_hier.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp
+# Include the python dependencies for this file
+-include python/gnuradio_core_hier.d
+# end of PYTHON
+
+if GUILE
+gnuradio_core_hier_scmlib_LTLIBRARIES = libguile-gnuradio_core_hier.la
+libguile_gnuradio_core_hier_la_SOURCES = \
+ guile/gnuradio_core_hier.cc \
+ $(gnuradio_core_hier_la_swig_sources)
+nobase_gnuradio_core_hier_scm_DATA = gnuradio/gnuradio_core_hier.scm gnuradio/gnuradio_core_hier-primitive.scm
+
+libguile_gnuradio_core_hier_la_LIBADD = $(_gnuradio_core_hier_la_LIBADD)
+libguile_gnuradio_core_hier_la_LDFLAGS = $(_gnuradio_core_hier_la_LDFLAGS)
+libguile_gnuradio_core_hier_la_CXXFLAGS = $(_gnuradio_core_hier_la_CXXFLAGS)
+
+guile/gnuradio_core_hier.cc: gnuradio/gnuradio_core_hier.scm
+gnuradio/gnuradio_core_hier.scm: gnuradio_core_hier.i
+gnuradio/gnuradio_core_hier-primitive.scm: gnuradio/gnuradio_core_hier.scm
+
+# Include the guile dependencies for this file
+-include guile/gnuradio_core_hier.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_py_hier.d@am__quote@
diff --git a/gnuradio-core/src/lib/swig/gnuradio.i b/gnuradio-core/src/lib/swig/gnuradio.i
index 7d0241f1c..47fd4e330 100644
--- a/gnuradio-core/src/lib/swig/gnuradio.i
+++ b/gnuradio-core/src/lib/swig/gnuradio.i
@@ -32,6 +32,7 @@
#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix
#include <gr_types.h>
#include <stddef.h> // size_t
+#include <complex>
%}
%feature("autodoc","1");
@@ -40,8 +41,21 @@
%include <gr_shared_ptr.i>
// non-local SWIG files
-%include <stl.i>
+#ifdef SWIGGUILE // Local overrides to support complex
+// It's kind of screwy, but the target language subdir isn't
+// searched automatically except for under ./swig_lib which
+// doesn't really help us since we run swig in many directories
+%include <guile/std_complex.i>
+%include <guile/std_vector.i>
+%include <std_common.i>
+%include <std_string.i>
+%include <std_map.i>
+%include <std_pair.i>
+#else
%include <std_complex.i>
+%include <std_vector.i>
+%include <stl.i>
+#endif
%include <std_except.i>
typedef std::complex<float> gr_complex;
@@ -57,6 +71,7 @@ namespace std {
%template() vector<int>;
%template() vector<float>;
%template() vector<double>;
+ // %template() std::complex<float>;
%template() vector< std::complex<float> >;
%template() vector< std::vector< unsigned char > >;
@@ -70,15 +85,6 @@ namespace std {
////////////////////////////////////////////////////////////////////////
-%constant int sizeof_char = sizeof(char);
-%constant int sizeof_short = sizeof(short);
-%constant int sizeof_int = sizeof(int);
-%constant int sizeof_float = sizeof(float);
-%constant int sizeof_double = sizeof(double);
-%constant int sizeof_gr_complex = sizeof(gr_complex);
-
-////////////////////////////////////////////////////////////////////////
-
#ifndef SW_RUNTIME
// import runtime.i for all but sw_runtime, since it needs to %include
%import <runtime.i>
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_python.py b/gnuradio-core/src/lib/swig/gnuradio_core.py
index 5324b2309..172051013 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_python.py
+++ b/gnuradio-core/src/lib/swig/gnuradio_core.py
@@ -1,5 +1,5 @@
#
-# Copyright 2006,2009 Free Software Foundation, Inc.
+# Copyright 2006,2009,2010 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,11 +18,11 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
-# This file implements the old gnuradio_swig_python namespace
+# This file implements the old gnuradio_core namespace
-from gnuradio_swig_py_runtime import *
-from gnuradio_swig_py_general import *
-from gnuradio_swig_py_gengen import *
-from gnuradio_swig_py_filter import *
-from gnuradio_swig_py_io import *
-from gnuradio_swig_py_hier import *
+from gnuradio_core_runtime import *
+from gnuradio_core_general import *
+from gnuradio_core_gengen import *
+from gnuradio_core_filter import *
+from gnuradio_core_io import *
+from gnuradio_core_hier import *
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i b/gnuradio-core/src/lib/swig/gnuradio_core_filter.i
index 6396a97d0..0acbfa3a6 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_filter.i
@@ -1,26 +1,26 @@
/* -*- c++ -*- */
/*
- * Copyright 2006,2009 Free Software Foundation, Inc.
- *
+ * Copyright 2006,2009,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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_swig_py_filter
+%module(directors="1") gnuradio_core_filter
#endif
//%feature("autodoc", "1"); // generate python docstrings
@@ -28,3 +28,13 @@
%include "gnuradio.i" // the common stuff
%include "filter.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gnuradio_core_filter" "scm_init_gnuradio_gnuradio_core_filter_module")
+%}
+
+%goops %{
+ (use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
index 3ab1b056a..759a65459 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
@@ -1,26 +1,26 @@
/* -*- c++ -*- */
/*
- * Copyright 2006,2009 Free Software Foundation, Inc.
- *
+ * Copyright 2006,2009,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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_swig_py_general
+%module(directors="1") gnuradio_core_general
#endif
//%feature("autodoc", "1"); // generate python docstrings
@@ -28,3 +28,33 @@
%include "gnuradio.i" // the common stuff
%include "general.i"
+
+ // Simple test case for complex input and output
+%inline
+%{
+ std::complex<float> complexf_add_2j(std::complex<float> x)
+ {
+ return std::complex<float>(x.real(), x.imag() + 2);
+ }
+
+ std::complex<double> complexd_add_2j(std::complex<double> x)
+ {
+ return std::complex<double>(x.real(), x.imag() + 2);
+ }
+
+ std::complex<float> complexf_add_x_2j(float x, std::complex<float> y)
+ {
+ return std::complex<float>(x + y.real(), y.imag() + 2);
+ }
+
+%}
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gnuradio_core_general" "scm_init_gnuradio_gnuradio_core_general_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i b/gnuradio-core/src/lib/swig/gnuradio_core_gengen.i
index 95e85cf6b..c08109173 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_gengen.i
@@ -1,26 +1,26 @@
/* -*- c++ -*- */
/*
- * Copyright 2006,2009 Free Software Foundation, Inc.
- *
+ * Copyright 2006,2009,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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_swig_py_gengen
+%module(directors="1") gnuradio_core_gengen
#endif
//%feature("autodoc", "1"); // generate python docstrings
@@ -28,3 +28,13 @@
%include "gnuradio.i" // the common stuff
%include "gengen.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gnuradio_core_gengen" "scm_init_gnuradio_gnuradio_core_gengen_module")
+%}
+
+%goops %{
+ (use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i b/gnuradio-core/src/lib/swig/gnuradio_core_hier.i
index a82b5ae41..6d7a38321 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_hier.i
@@ -1,26 +1,26 @@
/* -*- c++ -*- */
/*
- * Copyright 2009 Free Software Foundation, Inc.
- *
+ * Copyright 2009,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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_swig_py_hier
+%module(directors="1") gnuradio_hier_hier
#endif
//%feature("autodoc", "1"); // generate python docstrings
@@ -28,3 +28,13 @@
%include "gnuradio.i" // the common stuff
%include "hier.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gnuradio_core_hier" "scm_init_gnuradio_gnuradio_core_hier_module")
+%}
+
+%goops %{
+ (use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i b/gnuradio-core/src/lib/swig/gnuradio_core_io.i
index 9318f5d86..936522ada 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_io.i
@@ -1,26 +1,26 @@
/* -*- c++ -*- */
/*
- * Copyright 2006,2009 Free Software Foundation, Inc.
- *
+ * Copyright 2006,2009,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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_swig_py_io
+%module(directors="1") gnuradio_core_io
#endif
//%feature("autodoc", "1"); // generate python docstrings
@@ -28,3 +28,13 @@
%include "gnuradio.i" // the common stuff
%include "io.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gnuradio_core_io" "scm_init_gnuradio_gnuradio_core_io_module")
+%}
+
+%goops %{
+ (use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i b/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i
index 8f444f9c5..bb10b36b2 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i
@@ -1,19 +1,19 @@
/* -*- c++ -*- */
/*
- * Copyright 2009 Free Software Foundation, Inc.
- *
+ * Copyright 2009,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,
@@ -21,7 +21,7 @@
*/
#ifndef SWIGIMPORTED
-%module(directors="1") gnuradio_swig_py_runtime
+%module(directors="1") gnuradio_core_runtime
#endif
//%feature("autodoc", "1"); // generate python docstrings
@@ -30,3 +30,17 @@
%include "gnuradio.i" // the common stuff
%include "runtime.i"
+
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gnuradio_core_runtime" "scm_init_gnuradio_gnuradio_core_runtime_module")
+%}
+
+%goops %{
+(use-modules (gnuradio export-safely))
+(re-export export-syms-if-not-imported-gf)
+(re-export-syntax export-safely)
+(re-export re-export-all)
+%}
+#endif
diff --git a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i
index 78e838012..a080c2b27 100644
--- a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i
+++ b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004 Free Software Foundation, Inc.
+ * Copyright 2004,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -21,19 +21,40 @@
*/
%define GR_SWIG_BLOCK_MAGIC(PKG, BASE_NAME)
-_GR_SWIG_BLOCK_MAGIC_HELPER(PKG, PKG ## _ ## BASE_NAME, BASE_NAME)
+_GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, PKG ## _ ## BASE_NAME)
%enddef
-%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, NAME, BASE_NAME)
-class NAME;
-typedef boost::shared_ptr<NAME> NAME ## _sptr;
-%template(NAME ## _sptr) boost::shared_ptr<NAME>;
+%define _GR_SWIG_BLOCK_MAGIC_HELPER_COMMON(PKG, BASE_NAME, FULL_NAME)
+class FULL_NAME;
+typedef boost::shared_ptr<FULL_NAME> FULL_NAME ## _sptr;
+%template(FULL_NAME ## _sptr) boost::shared_ptr<FULL_NAME>;
%rename(BASE_NAME) PKG ## _make_ ## BASE_NAME;
+%ignore FULL_NAME;
+%enddef
+#ifdef SWIGPYTHON
+%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, FULL_NAME)
+_GR_SWIG_BLOCK_MAGIC_HELPER_COMMON(PKG, BASE_NAME, FULL_NAME)
%pythoncode %{
-NAME ## _sptr.block = lambda self: NAME ## _block (self)
-NAME ## _sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(), self.unique_id ())
+FULL_NAME ## _sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(), self.unique_id ())
%}
+%enddef
+#endif
-%ignore NAME;
+#ifdef SWIGGUILE
+#ifdef IN_GNURADIO_CORE // normal behavior
+%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, FULL_NAME)
+_GR_SWIG_BLOCK_MAGIC_HELPER_COMMON(PKG, BASE_NAME, FULL_NAME)
+/* FIXME May want to add something here to get a friendlier printed representation */
+%enddef
+#else // Don't strip PKG from name
+%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, FULL_NAME)
+class FULL_NAME;
+typedef boost::shared_ptr<FULL_NAME> FULL_NAME ## _sptr;
+%template(FULL_NAME ## _sptr) boost::shared_ptr<FULL_NAME>;
+%ignore FULL_NAME;
+%rename(FULL_NAME) PKG ## _make_ ## BASE_NAME;
+/* FIXME May want to add something here to get a friendlier printed representation */
%enddef
+#endif
+#endif
diff --git a/gnuradio-core/src/lib/swig/guile/std_complex.i b/gnuradio-core/src/lib/swig/guile/std_complex.i
new file mode 100644
index 000000000..2a5c72aa2
--- /dev/null
+++ b/gnuradio-core/src/lib/swig/guile/std_complex.i
@@ -0,0 +1,37 @@
+%{
+#include <complex>
+%}
+
+// To the target language, complex number conversion
+%typemap(out) complex, complex<double>, std::complex<double> {
+ $result = scm_make_rectangular( gh_double2scm ($1.real ()),
+ gh_double2scm ($1.imag ()) );
+}
+
+// To the target language, complex number conversion
+%typemap(out) complex, complex<float>, std::complex<float> {
+ $result = scm_make_rectangular( gh_double2scm ($1.real ()),
+ gh_double2scm ($1.imag ()) );
+}
+
+// From the target language, complex number conversion
+%typemap(in) complex, complex<double>, std::complex<double> {
+ $1 = std::complex<double>( gh_scm2double (scm_real_part ($input)),
+ gh_scm2double (scm_imag_part ($input)) );
+}
+
+// From the target language, complex number conversion
+%typemap(in) complex, complex<float>, std::complex<float> {
+ $1 = std::complex<float>( gh_scm2double (scm_real_part ($input)),
+ gh_scm2double (scm_imag_part ($input)) );
+}
+
+%typemaps_primitive(%checkcode(CPLXDBL), std::complex<double>);
+%typemaps_primitive(%checkcode(CPLXFLT), std::complex<float>);
+
+%typecheck(SWIG_TYPECHECK_COMPLEX)
+ std::complex<float>, std::complex<double>,
+ const std::complex<float> &, const std::complex<double> &
+{
+ $1 = scm_is_complex($input) ? 1 : 0;
+}
diff --git a/gnuradio-core/src/lib/swig/guile/std_vector.i b/gnuradio-core/src/lib/swig/guile/std_vector.i
new file mode 100644
index 000000000..ef1f20667
--- /dev/null
+++ b/gnuradio-core/src/lib/swig/guile/std_vector.i
@@ -0,0 +1,437 @@
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * std_vector.i
+ *
+ * SWIG typemaps for std::vector
+ * ----------------------------------------------------------------------------- */
+
+%include <std_common.i>
+
+// ------------------------------------------------------------------------
+// std::vector
+//
+// The aim of all that follows would be to integrate std::vector with
+// Guile as much as possible, namely, to allow the user to pass and
+// be returned Guile vectors or lists.
+// const declarations are used to guess the intent of the function being
+// exported; therefore, the following rationale is applied:
+//
+// -- f(std::vector<T>), f(const std::vector<T>&), f(const std::vector<T>*):
+// the parameter being read-only, either a Guile sequence or a
+// previously wrapped std::vector<T> can be passed.
+// -- f(std::vector<T>&), f(std::vector<T>*):
+// the parameter must be modified; therefore, only a wrapped std::vector
+// can be passed.
+// -- std::vector<T> f():
+// the vector is returned by copy; therefore, a Guile vector of T:s
+// is returned which is most easily used in other Guile functions
+// -- std::vector<T>& f(), std::vector<T>* f(), const std::vector<T>& f(),
+// const std::vector<T>* f():
+// the vector is returned by reference; therefore, a wrapped std::vector
+// is returned
+// ------------------------------------------------------------------------
+
+%{
+#include <vector>
+#include <algorithm>
+#include <stdexcept>
+#include <complex>
+%}
+
+%{
+ inline std::complex<float> SWIG_scm2cmplxfloat(SCM x){
+ return std::complex<float>(scm_c_real_part(x), scm_c_imag_part(x));
+ }
+
+ inline std::complex<double> SWIG_scm2cmplxdouble(SCM x){
+ return std::complex<double>(scm_c_real_part(x), scm_c_imag_part(x));
+ }
+
+ inline SCM SWIG_cmplxfloat2scm(std::complex<float> x){
+ return scm_c_make_rectangular(x.real(), x.imag());
+ }
+
+ inline SCM SWIG_cmplxdouble2scm(std::complex<double> x){
+ return scm_c_make_rectangular(x.real(), x.imag());
+ }
+%}
+
+// exported class
+
+namespace std {
+
+ template<class T> class vector {
+ %typemap(in) vector<T> {
+ if (gh_vector_p($input)) {
+ unsigned long size = gh_vector_length($input);
+ $1 = std::vector<T >(size);
+ for (unsigned long i=0; i<size; i++) {
+ SCM o = gh_vector_ref($input,gh_ulong2scm(i));
+ (($1_type &)$1)[i] =
+ *((T*) SWIG_MustGetPtr(o,$descriptor(T *),$argnum, 0));
+ }
+ } else if (gh_null_p($input)) {
+ $1 = std::vector<T >();
+ } else if (gh_pair_p($input)) {
+ SCM head, tail;
+ $1 = std::vector<T >();
+ tail = $input;
+ while (!gh_null_p(tail)) {
+ head = gh_car(tail);
+ tail = gh_cdr(tail);
+ $1.push_back(*((T*)SWIG_MustGetPtr(head,
+ $descriptor(T *),
+ $argnum, 0)));
+ }
+ } else {
+ $1 = *(($&1_type)
+ SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
+ }
+ }
+ %typemap(in) const vector<T>& (std::vector<T> temp),
+ const vector<T>* (std::vector<T> temp) {
+ if (gh_vector_p($input)) {
+ unsigned long size = gh_vector_length($input);
+ temp = std::vector<T >(size);
+ $1 = &temp;
+ for (unsigned long i=0; i<size; i++) {
+ SCM o = gh_vector_ref($input,gh_ulong2scm(i));
+ temp[i] = *((T*) SWIG_MustGetPtr(o,
+ $descriptor(T *),
+ $argnum, 0));
+ }
+ } else if (gh_null_p($input)) {
+ temp = std::vector<T >();
+ $1 = &temp;
+ } else if (gh_pair_p($input)) {
+ temp = std::vector<T >();
+ $1 = &temp;
+ SCM head, tail;
+ tail = $input;
+ while (!gh_null_p(tail)) {
+ head = gh_car(tail);
+ tail = gh_cdr(tail);
+ temp.push_back(*((T*) SWIG_MustGetPtr(head,
+ $descriptor(T *),
+ $argnum, 0)));
+ }
+ } else {
+ $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
+ }
+ }
+ %typemap(out) vector<T> {
+ $result = gh_make_vector(gh_long2scm($1.size()),SCM_UNSPECIFIED);
+ for (unsigned int i=0; i<$1.size(); i++) {
+ T* x = new T((($1_type &)$1)[i]);
+ gh_vector_set_x($result,gh_long2scm(i),
+ SWIG_NewPointerObj(x, $descriptor(T *), 1));
+ }
+ }
+ %typecheck(SWIG_TYPECHECK_VECTOR) vector<T> {
+ /* native sequence? */
+ if (gh_vector_p($input)) {
+ unsigned int size = gh_vector_length($input);
+ if (size == 0) {
+ /* an empty sequence can be of any type */
+ $1 = 1;
+ } else {
+ /* check the first element only */
+ SCM o = gh_vector_ref($input,gh_ulong2scm(0));
+ T* x;
+ if (SWIG_ConvertPtr(o,(void**) &x,
+ $descriptor(T *), 0) != -1)
+ $1 = 1;
+ else
+ $1 = 0;
+ }
+ } else if (gh_null_p($input)) {
+ /* again, an empty sequence can be of any type */
+ $1 = 1;
+ } else if (gh_pair_p($input)) {
+ /* check the first element only */
+ T* x;
+ SCM head = gh_car($input);
+ if (SWIG_ConvertPtr(head,(void**) &x,
+ $descriptor(T *), 0) != -1)
+ $1 = 1;
+ else
+ $1 = 0;
+ } else {
+ /* wrapped vector? */
+ std::vector<T >* v;
+ if (SWIG_ConvertPtr($input,(void **) &v,
+ $&1_descriptor, 0) != -1)
+ $1 = 1;
+ else
+ $1 = 0;
+ }
+ }
+ %typecheck(SWIG_TYPECHECK_VECTOR) const vector<T>&,
+ const vector<T>* {
+ /* native sequence? */
+ if (gh_vector_p($input)) {
+ unsigned int size = gh_vector_length($input);
+ if (size == 0) {
+ /* an empty sequence can be of any type */
+ $1 = 1;
+ } else {
+ /* check the first element only */
+ T* x;
+ SCM o = gh_vector_ref($input,gh_ulong2scm(0));
+ if (SWIG_ConvertPtr(o,(void**) &x,
+ $descriptor(T *), 0) != -1)
+ $1 = 1;
+ else
+ $1 = 0;
+ }
+ } else if (gh_null_p($input)) {
+ /* again, an empty sequence can be of any type */
+ $1 = 1;
+ } else if (gh_pair_p($input)) {
+ /* check the first element only */
+ T* x;
+ SCM head = gh_car($input);
+ if (SWIG_ConvertPtr(head,(void**) &x,
+ $descriptor(T *), 0) != -1)
+ $1 = 1;
+ else
+ $1 = 0;
+ } else {
+ /* wrapped vector? */
+ std::vector<T >* v;
+ if (SWIG_ConvertPtr($input,(void **) &v,
+ $1_descriptor, 0) != -1)
+ $1 = 1;
+ else
+ $1 = 0;
+ }
+ }
+ public:
+ vector(unsigned int size = 0);
+ vector(unsigned int size, const T& value);
+ vector(const vector<T>&);
+ %rename(length) size;
+ unsigned int size() const;
+ %rename("empty?") empty;
+ bool empty() const;
+ %rename("clear!") clear;
+ void clear();
+ %rename("set!") set;
+ %rename("pop!") pop;
+ %rename("push!") push_back;
+ void push_back(const T& x);
+ %extend {
+ T pop() throw (std::out_of_range) {
+ if (self->size() == 0)
+ throw std::out_of_range("pop from empty vector");
+ T x = self->back();
+ self->pop_back();
+ return x;
+ }
+ T& ref(int i) throw (std::out_of_range) {
+ int size = int(self->size());
+ if (i>=0 && i<size)
+ return (*self)[i];
+ else
+ throw std::out_of_range("vector index out of range");
+ }
+ void set(int i, const T& x) throw (std::out_of_range) {
+ int size = int(self->size());
+ if (i>=0 && i<size)
+ (*self)[i] = x;
+ else
+ throw std::out_of_range("vector index out of range");
+ }
+ }
+ };
+
+
+ // specializations for built-ins
+ %define specialize_stl_vector(T,CHECK,CONVERT_FROM,CONVERT_TO)
+ template<> class vector<T > {
+ %typemap(in) vector<T > {
+ if (gh_vector_p($input)) {
+ unsigned long size = gh_vector_length($input);
+ $1 = std::vector<T >(size);
+ for (unsigned long i=0; i<size; i++) {
+ SCM o = gh_vector_ref($input,gh_ulong2scm(i));
+ if (CHECK(o))
+ (($1_type &)$1)[i] = (T)(CONVERT_FROM(o));
+ else
+ scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
+ }
+ } else if (gh_null_p($input)) {
+ $1 = std::vector<T >();
+ } else if (gh_pair_p($input)) {
+ SCM v = gh_list_to_vector($input);
+ unsigned long size = gh_vector_length(v);
+ $1 = std::vector<T >(size);
+ for (unsigned long i=0; i<size; i++) {
+ SCM o = gh_vector_ref(v,gh_ulong2scm(i));
+ if (CHECK(o))
+ (($1_type &)$1)[i] = (T)(CONVERT_FROM(o));
+ else
+ scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
+ }
+ } else {
+ $1 = *(($&1_type)
+ SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
+ }
+ }
+ %typemap(in) const vector<T >& (std::vector<T > temp),
+ const vector<T >* (std::vector<T > temp) {
+ if (gh_vector_p($input)) {
+ unsigned long size = gh_vector_length($input);
+ temp = std::vector<T >(size);
+ $1 = &temp;
+ for (unsigned long i=0; i<size; i++) {
+ SCM o = gh_vector_ref($input,gh_ulong2scm(i));
+ if (CHECK(o))
+ temp[i] = (T)(CONVERT_FROM(o));
+ else
+ scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
+ }
+ } else if (gh_null_p($input)) {
+ temp = std::vector<T >();
+ $1 = &temp;
+ } else if (gh_pair_p($input)) {
+ SCM v = gh_list_to_vector($input);
+ unsigned long size = gh_vector_length(v);
+ temp = std::vector<T >(size);
+ $1 = &temp;
+ for (unsigned long i=0; i<size; i++) {
+ SCM o = gh_vector_ref(v,gh_ulong2scm(i));
+ if (CHECK(o))
+ temp[i] = (T)(CONVERT_FROM(o));
+ else
+ scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
+ }
+ } else {
+ $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
+ }
+ }
+ %typemap(out) vector<T > {
+ $result = gh_make_vector(gh_long2scm($1.size()),SCM_UNSPECIFIED);
+ for (unsigned int i=0; i<$1.size(); i++) {
+ SCM x = CONVERT_TO((($1_type &)$1)[i]);
+ gh_vector_set_x($result,gh_long2scm(i),x);
+ }
+ }
+ %typecheck(SWIG_TYPECHECK_VECTOR) vector<T > {
+ /* native sequence? */
+ if (gh_vector_p($input)) {
+ unsigned int size = gh_vector_length($input);
+ if (size == 0) {
+ /* an empty sequence can be of any type */
+ $1 = 1;
+ } else {
+ /* check the first element only */
+ T* x;
+ SCM o = gh_vector_ref($input,gh_ulong2scm(0));
+ $1 = CHECK(o) ? 1 : 0;
+ }
+ } else if (gh_null_p($input)) {
+ /* again, an empty sequence can be of any type */
+ $1 = 1;
+ } else if (gh_pair_p($input)) {
+ /* check the first element only */
+ T* x;
+ SCM head = gh_car($input);
+ $1 = CHECK(head) ? 1 : 0;
+ } else {
+ /* wrapped vector? */
+ std::vector<T >* v;
+ $1 = (SWIG_ConvertPtr($input,(void **) &v,
+ $&1_descriptor, 0) != -1) ? 1 : 0;
+ }
+ }
+ %typecheck(SWIG_TYPECHECK_VECTOR) const vector<T >&,
+ const vector<T >* {
+ /* native sequence? */
+ if (gh_vector_p($input)) {
+ unsigned int size = gh_vector_length($input);
+ if (size == 0) {
+ /* an empty sequence can be of any type */
+ $1 = 1;
+ } else {
+ /* check the first element only */
+ T* x;
+ SCM o = gh_vector_ref($input,gh_ulong2scm(0));
+ $1 = CHECK(o) ? 1 : 0;
+ }
+ } else if (gh_null_p($input)) {
+ /* again, an empty sequence can be of any type */
+ $1 = 1;
+ } else if (gh_pair_p($input)) {
+ /* check the first element only */
+ T* x;
+ SCM head = gh_car($input);
+ $1 = CHECK(head) ? 1 : 0;
+ } else {
+ /* wrapped vector? */
+ std::vector<T >* v;
+ $1 = (SWIG_ConvertPtr($input,(void **) &v,
+ $1_descriptor, 0) != -1) ? 1 : 0;
+ }
+ }
+ public:
+ vector(unsigned int size = 0);
+ vector(unsigned int size, const T& value);
+ vector(const vector<T >&);
+ %rename(length) size;
+ unsigned int size() const;
+ %rename("empty?") empty;
+ bool empty() const;
+ %rename("clear!") clear;
+ void clear();
+ %rename("set!") set;
+ %rename("pop!") pop;
+ %rename("push!") push_back;
+ void push_back(T x);
+ %extend {
+ T pop() throw (std::out_of_range) {
+ if (self->size() == 0)
+ throw std::out_of_range("pop from empty vector");
+ T x = self->back();
+ self->pop_back();
+ return x;
+ }
+ T ref(int i) throw (std::out_of_range) {
+ int size = int(self->size());
+ if (i>=0 && i<size)
+ return (*self)[i];
+ else
+ throw std::out_of_range("vector index out of range");
+ }
+ void set(int i, T x) throw (std::out_of_range) {
+ int size = int(self->size());
+ if (i>=0 && i<size)
+ (*self)[i] = x;
+ else
+ throw std::out_of_range("vector index out of range");
+ }
+ }
+ };
+ %enddef
+
+ specialize_stl_vector(bool,gh_boolean_p,gh_scm2bool,SWIG_bool2scm);
+ specialize_stl_vector(char,gh_number_p,gh_scm2long,gh_long2scm);
+ specialize_stl_vector(int,gh_number_p,gh_scm2long,gh_long2scm);
+ specialize_stl_vector(long,gh_number_p,gh_scm2long,gh_long2scm);
+ specialize_stl_vector(short,gh_number_p,gh_scm2long,gh_long2scm);
+ specialize_stl_vector(unsigned char,gh_number_p,gh_scm2ulong,gh_ulong2scm);
+ specialize_stl_vector(unsigned int,gh_number_p,gh_scm2ulong,gh_ulong2scm);
+ specialize_stl_vector(unsigned long,gh_number_p,gh_scm2ulong,gh_ulong2scm);
+ specialize_stl_vector(unsigned short,gh_number_p,gh_scm2ulong,gh_ulong2scm);
+ specialize_stl_vector(float,gh_number_p,gh_scm2double,gh_double2scm);
+ specialize_stl_vector(double,gh_number_p,gh_scm2double,gh_double2scm);
+ specialize_stl_vector(std::string,gh_string_p,SWIG_scm2string,SWIG_string2scm);
+ specialize_stl_vector(std::complex<float>, scm_is_complex,
+ SWIG_scm2cmplxfloat, SWIG_cmplxfloat2scm);
+ specialize_stl_vector(std::complex<double>, scm_is_complex,
+ SWIG_scm2cmplxdouble,SWIG_cmplxdouble2scm);
+
+}
+
diff --git a/gnuradio-core/src/python/gnuradio/gr/Makefile.am b/gnuradio-core/src/python/gnuradio/gr/Makefile.am
index 341f58812..c3017adcc 100644
--- a/gnuradio-core/src/python/gnuradio/gr/Makefile.am
+++ b/gnuradio-core/src/python/gnuradio/gr/Makefile.am
@@ -39,7 +39,6 @@ grgrpython_PYTHON = \
gr_threading_24.py \
hier_block2.py \
prefs.py \
- scheduler.py \
top_block.py \
pubsub.py
diff --git a/gnuradio-core/src/python/gnuradio/gr/__init__.py b/gnuradio-core/src/python/gnuradio/gr/__init__.py
index 6f939c470..73ca8e08f 100644
--- a/gnuradio-core/src/python/gnuradio/gr/__init__.py
+++ b/gnuradio-core/src/python/gnuradio/gr/__init__.py
@@ -1,5 +1,5 @@
#
-# Copyright 2003,2004,2006,2008,2009 Free Software Foundation, Inc.
+# Copyright 2003,2004,2006,2008,2009,2010 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -40,7 +40,7 @@ if _RTLD_GLOBAL != 0:
_dlopenflags = sys.getdlopenflags()
sys.setdlopenflags(_dlopenflags|_RTLD_GLOBAL)
-from gnuradio_swig_python import *
+from gnuradio_core import *
from exceptions import *
from hier_block2 import *
from top_block import *
diff --git a/gnuradio-core/src/python/gnuradio/gr/hier_block2.py b/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
index b43c5feda..debb65d91 100644
--- a/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
+++ b/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
@@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio_swig_python import hier_block2_swig
+from gnuradio_core import hier_block2_swig
#
# This hack forces a 'has-a' relationship to look like an 'is-a' one.
@@ -66,7 +66,7 @@ class hier_block2(object):
raise ValueError, ("connect requires at least one endpoint; %d provided." % (len (points),))
else:
if len(points) == 1:
- self._hb.connect(points[0].basic_block())
+ self._hb.primitive_connect(points[0].to_basic_block())
else:
for i in range (1, len (points)):
self._connect(points[i-1], points[i])
@@ -74,11 +74,11 @@ class hier_block2(object):
def _connect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
(dst_block, dst_port) = self._coerce_endpoint(dst)
- self._hb.connect(src_block.basic_block(), src_port,
- dst_block.basic_block(), dst_port)
+ self._hb.primitive_connect(src_block.to_basic_block(), src_port,
+ dst_block.to_basic_block(), dst_port)
def _coerce_endpoint(self, endp):
- if hasattr(endp, 'basic_block'):
+ if hasattr(endp, 'to_basic_block'):
return (endp, 0)
else:
if hasattr(endp, "__getitem__") and len(endp) == 2:
@@ -97,10 +97,10 @@ class hier_block2(object):
"""
if len (points) < 1:
- raise ValueError, ("disconnect requires at least two endpoints; %d provided." % (len (points),))
+ raise ValueError, ("disconnect requires at least one endpoint; %d provided." % (len (points),))
else:
if len (points) == 1:
- self._hb.disconnect(points[0].basic_block())
+ self._hb.primitive_disconnect(points[0].to_basic_block())
else:
for i in range (1, len (points)):
self._disconnect(points[i-1], points[i])
@@ -108,6 +108,6 @@ class hier_block2(object):
def _disconnect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
(dst_block, dst_port) = self._coerce_endpoint(dst)
- self._hb.disconnect(src_block.basic_block(), src_port,
- dst_block.basic_block(), dst_port)
+ self._hb.primitive_disconnect(src_block.to_basic_block(), src_port,
+ dst_block.to_basic_block(), dst_port)
diff --git a/gnuradio-core/src/python/gnuradio/gr/prefs.py b/gnuradio-core/src/python/gnuradio/gr/prefs.py
index 9b31b772b..40347a2f4 100644
--- a/gnuradio-core/src/python/gnuradio/gr/prefs.py
+++ b/gnuradio-core/src/python/gnuradio/gr/prefs.py
@@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA.
#
-import gnuradio_swig_python as gsp
+import gnuradio_core as gsp
_prefs_base = gsp.gr_prefs
diff --git a/gnuradio-core/src/python/gnuradio/gr/scheduler.py b/gnuradio-core/src/python/gnuradio/gr/scheduler.py
deleted file mode 100644
index 4694d48b2..000000000
--- a/gnuradio-core/src/python/gnuradio/gr/scheduler.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# Copyright 2004 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.
-#
-
-from gnuradio.gr.exceptions import *
-from gnuradio_swig_python import single_threaded_scheduler, sts_pyrun
-import gr_threading as _threading
-#import threading as _threading
-
-class scheduler_thread(_threading.Thread):
- def __init__(self, sts):
- _threading.Thread.__init__(self)
- self.sts = sts
- def run(self):
- # Invoke the single threaded scheduler's run method
- #
- # Note that we're in a new thread, and that sts_pyrun
- # releases the global interpreter lock. This has the
- # effect of evaluating the graph in parallel to the
- # main line control code.
- sts_pyrun(self.sts)
- self.sts = None
-
-class scheduler(object):
- def __init__(self, fg):
- graphs = fg.partition_graph(fg.blocks)
- # print "@@@ # graphs = %d" % (len(graphs))
-
- self.state = []
-
- for g in graphs:
- list_of_blocks = [x.block() for x in g]
- sts = single_threaded_scheduler(list_of_blocks)
- thread = scheduler_thread(sts)
- thread.setDaemon(1)
- self.state.append((sts, thread))
-
- def start(self):
- for (sts, thread) in self.state:
- thread.start()
-
- def stop(self):
- for (sts, thread) in self.state:
- sts.stop()
- self.wait()
-
- def wait(self):
- for (sts, thread) in self.state:
- timeout = 0.100
- while True:
- thread.join(timeout)
- if not thread.isAlive():
- break
diff --git a/gnuradio-core/src/python/gnuradio/gr/top_block.py b/gnuradio-core/src/python/gnuradio/gr/top_block.py
index 71e401424..1e36d3b48 100644
--- a/gnuradio-core/src/python/gnuradio/gr/top_block.py
+++ b/gnuradio-core/src/python/gnuradio/gr/top_block.py
@@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio_swig_python import top_block_swig, \
+from gnuradio_core import top_block_swig, \
top_block_wait_unlocked, top_block_run_unlocked
#import gnuradio.gr.gr_threading as _threading
@@ -118,7 +118,7 @@ class top_block(object):
raise ValueError, ("connect requires at least one endpoint; %d provided." % (len (points),))
else:
if len(points) == 1:
- self._tb.connect(points[0].basic_block())
+ self._tb.primitive_connect(points[0].to_basic_block())
else:
for i in range (1, len (points)):
self._connect(points[i-1], points[i])
@@ -126,11 +126,11 @@ class top_block(object):
def _connect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
(dst_block, dst_port) = self._coerce_endpoint(dst)
- self._tb.connect(src_block.basic_block(), src_port,
- dst_block.basic_block(), dst_port)
+ self._tb.primitive_connect(src_block.to_basic_block(), src_port,
+ dst_block.to_basic_block(), dst_port)
def _coerce_endpoint(self, endp):
- if hasattr(endp, 'basic_block'):
+ if hasattr(endp, 'to_basic_block'):
return (endp, 0)
else:
if hasattr(endp, "__getitem__") and len(endp) == 2:
@@ -139,14 +139,14 @@ class top_block(object):
raise ValueError("unable to coerce endpoint")
def disconnect(self, *points):
- '''connect requires one or more arguments that can be coerced to endpoints.
+ '''disconnect requires one or more arguments that can be coerced to endpoints.
If more than two arguments are provided, they are disconnected successively.
'''
if len (points) < 1:
- raise ValueError, ("disconnect requires at least two endpoints; %d provided." % (len (points),))
+ raise ValueError, ("disconnect requires at least one endpoint; %d provided." % (len (points),))
else:
if len(points) == 1:
- self._tb.disconnect(points[0].basic_block())
+ self._tb.primitive_disconnect(points[0].to_basic_block())
else:
for i in range (1, len (points)):
self._disconnect(points[i-1], points[i])
@@ -154,6 +154,6 @@ class top_block(object):
def _disconnect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
(dst_block, dst_port) = self._coerce_endpoint(dst)
- self._tb.disconnect(src_block.basic_block(), src_port,
- dst_block.basic_block(), dst_port)
+ self._tb.primitive_disconnect(src_block.to_basic_block(), src_port,
+ dst_block.to_basic_block(), dst_port)
diff --git a/gr-atsc/src/lib/Makefile.am b/gr-atsc/src/lib/Makefile.am
index bf9c6626a..1ca31d14b 100644
--- a/gr-atsc/src/lib/Makefile.am
+++ b/gr-atsc/src/lib/Makefile.am
@@ -84,7 +84,8 @@ libgnuradio_atsc_la_SOURCES = \
create_atsci_equalizer.cc \
create_atsci_fs_checker.cc \
create_atsci_fs_correlator.cc \
- plinfo.cc
+ plinfo.cc
+
BUILT_SOURCES = \
atsci_viterbi_mux.cc
diff --git a/gr-atsc/src/lib/Makefile.swig.gen b/gr-atsc/src/lib/Makefile.swig.gen
index e52d65335..6598894ed 100644
--- a/gr-atsc/src/lib/Makefile.swig.gen
+++ b/gr-atsc/src/lib/Makefile.swig.gen
@@ -38,6 +38,16 @@ atsc_pylibdir_category ?= $(atsc_pythondir_category)
atsc_pythondir = $(pythondir)/$(atsc_pythondir_category)
atsc_pylibdir = $(pyexecdir)/$(atsc_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+atsc_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/atsc
+# FIXME: determince whether these should be installed with gnuradio.
+atsc_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
atsc_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ atsc_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/atsc-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += atsc.py atsc.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ atsc_pylib_LTLIBRARIES = \
_atsc.la
_atsc_la_SOURCES = \
- atsc.cc \
+ python/atsc.cc \
$(atsc_la_swig_sources)
_atsc_la_LIBADD = \
@@ -99,161 +96,38 @@ _atsc_la_LDFLAGS = \
_atsc_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(atsc_la_swig_cxxflags)
atsc_python_PYTHON = \
atsc.py \
$(atsc_python)
-## Entry rule for running SWIG
+python/atsc.cc: atsc.py
+atsc.py: atsc.i
-atsc.h atsc.py atsc.cc: atsc.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/atsc-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/atsc-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/atsc-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/atsc-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/atsc-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/atsc-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/atsc-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/atsc-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/atsc.d
+# end of PYTHON
-$(DEPDIR)/atsc-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(atsc_swig_args) \
- -MD -MF $(DEPDIR)/atsc.Std \
- -module atsc -o atsc.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/atsc.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/atsc.Std \
- > $(DEPDIR)/atsc.Sd; \
- $(RM) $(DEPDIR)/atsc.Std; \
- $(MV) $(DEPDIR)/atsc.Sd $(DEPDIR)/atsc.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/atsc.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/atsc.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/atsc.Std $(DEPDIR)/atsc.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/atsc.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/atsc.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/atsc.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/atsc.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/atsc-generate-stamp
+if GUILE
+atsc_scmlib_LTLIBRARIES = libguile-atsc.la
+libguile_atsc_la_SOURCES = \
+ guile/atsc.cc \
+ $(atsc_la_swig_sources)
+nobase_atsc_scm_DATA = gnuradio/atsc.scm gnuradio/atsc-primitive.scm
+
+libguile_atsc_la_LIBADD = $(_atsc_la_LIBADD)
+libguile_atsc_la_LDFLAGS = $(_atsc_la_LDFLAGS)
+libguile_atsc_la_CXXFLAGS = $(_atsc_la_CXXFLAGS)
+
+guile/atsc.cc: gnuradio/atsc.scm
+gnuradio/atsc.scm: atsc.i
+gnuradio/atsc-primitive.scm: gnuradio/atsc.scm
+
+# Include the guile dependencies for this file
+-include guile/atsc.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/atsc.d@am__quote@
diff --git a/gr-audio-alsa/src/Makefile.am b/gr-audio-alsa/src/Makefile.am
index ed92cc197..11419d693 100644
--- a/gr-audio-alsa/src/Makefile.am
+++ b/gr-audio-alsa/src/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2004,2008,2009 Free Software Foundation, Inc.
+# Copyright 2004,2008,2009,2010 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -21,7 +21,11 @@
include $(top_srcdir)/Makefile.common
-EXTRA_DIST = run_tests.in
+TESTS =
+
+EXTRA_DIST = run_tests.in run_guile_tests.in
+
+DISTCLEANFILES = run_tests run_guile_tests
# C/C++ headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS = \
@@ -32,12 +36,16 @@ noinst_HEADERS = \
gri_alsa.h
noinst_PYTHON = \
- qa_alsa.py
+ qa_audio_alsa.py
+
+noinst_GUILE = \
+ audio_alsa.test
+
AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES)
-###################################
-# ALSA library, including OS interface, sink, and source
+# ------------------------------------------------------------------------
+# ALSA C++ library, including OS interface, sink, and source
lib_LTLIBRARIES = libgnuradio-audio-alsa.la
@@ -52,11 +60,9 @@ libgnuradio_audio_alsa_la_LIBADD = \
libgnuradio_audio_alsa_la_LDFLAGS = $(NO_UNDEFINED) $(LTVERSIONFLAGS)
-if PYTHON
-###################################
-# SWIG Python interface and library
-TESTS = run_tests
-DISTCLEANFILES = run_tests
+
+# ------------------------------------------------------------------------
+# SWIG generated bindings
TOP_SWIG_IFILES = \
audio_alsa.i
@@ -72,6 +78,16 @@ audio_alsa_pythondir_category = \
audio_alsa_la_swig_libadd = \
libgnuradio-audio-alsa.la
+if PYTHON
+TESTS += run_tests
+endif
+
+if GUILE
+TESTS += run_guile_tests
+endif
+
+
+# Uses the variables above to define how to generate SWIG bindings
include $(top_srcdir)/Makefile.swig
# add some of the variables generated inside the Makefile.swig.gen
@@ -79,4 +95,3 @@ BUILT_SOURCES = $(swig_built_sources)
# Do not distribute the output of SWIG
no_dist_files = $(swig_built_sources)
-endif \ No newline at end of file
diff --git a/gr-audio-alsa/src/Makefile.swig.gen b/gr-audio-alsa/src/Makefile.swig.gen
index 3a84a02b4..5762d22ae 100644
--- a/gr-audio-alsa/src/Makefile.swig.gen
+++ b/gr-audio-alsa/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ audio_alsa_pylibdir_category ?= $(audio_alsa_pythondir_category)
audio_alsa_pythondir = $(pythondir)/$(audio_alsa_pythondir_category)
audio_alsa_pylibdir = $(pyexecdir)/$(audio_alsa_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+audio_alsa_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/audio_alsa
+# FIXME: determince whether these should be installed with gnuradio.
+audio_alsa_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
audio_alsa_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ audio_alsa_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/audio_alsa-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += audio_alsa.py audio_alsa.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ audio_alsa_pylib_LTLIBRARIES = \
_audio_alsa.la
_audio_alsa_la_SOURCES = \
- audio_alsa.cc \
+ python/audio_alsa.cc \
$(audio_alsa_la_swig_sources)
_audio_alsa_la_LIBADD = \
@@ -99,161 +96,38 @@ _audio_alsa_la_LDFLAGS = \
_audio_alsa_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(audio_alsa_la_swig_cxxflags)
audio_alsa_python_PYTHON = \
audio_alsa.py \
$(audio_alsa_python)
-## Entry rule for running SWIG
+python/audio_alsa.cc: audio_alsa.py
+audio_alsa.py: audio_alsa.i
-audio_alsa.h audio_alsa.py audio_alsa.cc: audio_alsa.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/audio_alsa-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/audio_alsa-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/audio_alsa-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/audio_alsa-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_alsa-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/audio_alsa-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/audio_alsa-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/audio_alsa-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/audio_alsa.d
+# end of PYTHON
-$(DEPDIR)/audio_alsa-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(audio_alsa_swig_args) \
- -MD -MF $(DEPDIR)/audio_alsa.Std \
- -module audio_alsa -o audio_alsa.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/audio_alsa.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/audio_alsa.Std \
- > $(DEPDIR)/audio_alsa.Sd; \
- $(RM) $(DEPDIR)/audio_alsa.Std; \
- $(MV) $(DEPDIR)/audio_alsa.Sd $(DEPDIR)/audio_alsa.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/audio_alsa.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/audio_alsa.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/audio_alsa.Std $(DEPDIR)/audio_alsa.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/audio_alsa.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_alsa.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_alsa.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/audio_alsa.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/audio_alsa-generate-stamp
+if GUILE
+audio_alsa_scmlib_LTLIBRARIES = libguile-audio_alsa.la
+libguile_audio_alsa_la_SOURCES = \
+ guile/audio_alsa.cc \
+ $(audio_alsa_la_swig_sources)
+nobase_audio_alsa_scm_DATA = gnuradio/audio_alsa.scm gnuradio/audio_alsa-primitive.scm
+
+libguile_audio_alsa_la_LIBADD = $(_audio_alsa_la_LIBADD)
+libguile_audio_alsa_la_LDFLAGS = $(_audio_alsa_la_LDFLAGS)
+libguile_audio_alsa_la_CXXFLAGS = $(_audio_alsa_la_CXXFLAGS)
+
+guile/audio_alsa.cc: gnuradio/audio_alsa.scm
+gnuradio/audio_alsa.scm: audio_alsa.i
+gnuradio/audio_alsa-primitive.scm: gnuradio/audio_alsa.scm
+
+# Include the guile dependencies for this file
+-include guile/audio_alsa.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/audio_alsa.d@am__quote@
diff --git a/gr-audio-alsa/src/audio_alsa.i b/gr-audio-alsa/src/audio_alsa.i
index 88402333a..c650bd948 100644
--- a/gr-audio-alsa/src/audio_alsa.i
+++ b/gr-audio-alsa/src/audio_alsa.i
@@ -73,3 +73,13 @@ class audio_alsa_sink : public gr_sync_block {
public:
~audio_alsa_sink ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-audio_alsa" "scm_init_gnuradio_audio_alsa_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-audio-alsa/src/audio_alsa.test b/gr-audio-alsa/src/audio_alsa.test
new file mode 100644
index 000000000..240045593
--- /dev/null
+++ b/gr-audio-alsa/src/audio_alsa.test
@@ -0,0 +1,36 @@
+;;; -*- 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.
+
+(use-modules (gnuradio test-suite lib))
+(use-modules (gnuradio core))
+(use-modules (oop goops))
+
+;;; Just see if we can import the module...
+;;; They may not have ALSA drivers, etc.
+
+(use-modules (gnuradio audio_alsa))
+
diff --git a/gr-audio-alsa/src/qa_alsa.py b/gr-audio-alsa/src/qa_audio_alsa.py
index 52dbfdc7a..52dbfdc7a 100755
--- a/gr-audio-alsa/src/qa_alsa.py
+++ b/gr-audio-alsa/src/qa_audio_alsa.py
diff --git a/gr-audio-alsa/src/run_guile_tests.in b/gr-audio-alsa/src/run_guile_tests.in
new file mode 100644
index 000000000..5d08b0dd5
--- /dev/null
+++ b/gr-audio-alsa/src/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@
diff --git a/gr-audio-jack/src/Makefile.am b/gr-audio-jack/src/Makefile.am
index 8e0dfe1e3..f06f445a5 100644
--- a/gr-audio-jack/src/Makefile.am
+++ b/gr-audio-jack/src/Makefile.am
@@ -35,7 +35,7 @@ lib_LTLIBRARIES = libgnuradio-audio-jack.la
libgnuradio_audio_jack_la_SOURCES = \
audio_jack_sink.cc \
- audio_jack_source.cc \
+ audio_jack_source.cc \
gri_jack.cc
libgnuradio_audio_jack_la_LIBADD = \
diff --git a/gr-audio-jack/src/Makefile.swig.gen b/gr-audio-jack/src/Makefile.swig.gen
index 9b1f158c4..78cf1bca6 100644
--- a/gr-audio-jack/src/Makefile.swig.gen
+++ b/gr-audio-jack/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ audio_jack_pylibdir_category ?= $(audio_jack_pythondir_category)
audio_jack_pythondir = $(pythondir)/$(audio_jack_pythondir_category)
audio_jack_pylibdir = $(pyexecdir)/$(audio_jack_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+audio_jack_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/audio_jack
+# FIXME: determince whether these should be installed with gnuradio.
+audio_jack_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
audio_jack_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ audio_jack_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/audio_jack-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += audio_jack.py audio_jack.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ audio_jack_pylib_LTLIBRARIES = \
_audio_jack.la
_audio_jack_la_SOURCES = \
- audio_jack.cc \
+ python/audio_jack.cc \
$(audio_jack_la_swig_sources)
_audio_jack_la_LIBADD = \
@@ -99,161 +96,38 @@ _audio_jack_la_LDFLAGS = \
_audio_jack_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(audio_jack_la_swig_cxxflags)
audio_jack_python_PYTHON = \
audio_jack.py \
$(audio_jack_python)
-## Entry rule for running SWIG
+python/audio_jack.cc: audio_jack.py
+audio_jack.py: audio_jack.i
-audio_jack.h audio_jack.py audio_jack.cc: audio_jack.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/audio_jack-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/audio_jack-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/audio_jack-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/audio_jack-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_jack-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/audio_jack-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/audio_jack-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/audio_jack-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/audio_jack.d
+# end of PYTHON
-$(DEPDIR)/audio_jack-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(audio_jack_swig_args) \
- -MD -MF $(DEPDIR)/audio_jack.Std \
- -module audio_jack -o audio_jack.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/audio_jack.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/audio_jack.Std \
- > $(DEPDIR)/audio_jack.Sd; \
- $(RM) $(DEPDIR)/audio_jack.Std; \
- $(MV) $(DEPDIR)/audio_jack.Sd $(DEPDIR)/audio_jack.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/audio_jack.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/audio_jack.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/audio_jack.Std $(DEPDIR)/audio_jack.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/audio_jack.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_jack.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_jack.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/audio_jack.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/audio_jack-generate-stamp
+if GUILE
+audio_jack_scmlib_LTLIBRARIES = libguile-audio_jack.la
+libguile_audio_jack_la_SOURCES = \
+ guile/audio_jack.cc \
+ $(audio_jack_la_swig_sources)
+nobase_audio_jack_scm_DATA = gnuradio/audio_jack.scm gnuradio/audio_jack-primitive.scm
+
+libguile_audio_jack_la_LIBADD = $(_audio_jack_la_LIBADD)
+libguile_audio_jack_la_LDFLAGS = $(_audio_jack_la_LDFLAGS)
+libguile_audio_jack_la_CXXFLAGS = $(_audio_jack_la_CXXFLAGS)
+
+guile/audio_jack.cc: gnuradio/audio_jack.scm
+gnuradio/audio_jack.scm: audio_jack.i
+gnuradio/audio_jack-primitive.scm: gnuradio/audio_jack.scm
+
+# Include the guile dependencies for this file
+-include guile/audio_jack.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/audio_jack.d@am__quote@
diff --git a/gr-audio-jack/src/audio_jack.i b/gr-audio-jack/src/audio_jack.i
index 62d70d399..b61f67b5e 100644
--- a/gr-audio-jack/src/audio_jack.i
+++ b/gr-audio-jack/src/audio_jack.i
@@ -73,3 +73,13 @@ class audio_jack_sink : public gr_sync_block {
public:
~audio_jack_sink ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-audio_jack" "scm_init_gnuradio_audio_jack_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-audio-oss/src/Makefile.swig.gen b/gr-audio-oss/src/Makefile.swig.gen
index 6fce10c11..c5958fcd5 100644
--- a/gr-audio-oss/src/Makefile.swig.gen
+++ b/gr-audio-oss/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ audio_oss_pylibdir_category ?= $(audio_oss_pythondir_category)
audio_oss_pythondir = $(pythondir)/$(audio_oss_pythondir_category)
audio_oss_pylibdir = $(pyexecdir)/$(audio_oss_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+audio_oss_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/audio_oss
+# FIXME: determince whether these should be installed with gnuradio.
+audio_oss_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
audio_oss_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ audio_oss_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/audio_oss-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += audio_oss.py audio_oss.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ audio_oss_pylib_LTLIBRARIES = \
_audio_oss.la
_audio_oss_la_SOURCES = \
- audio_oss.cc \
+ python/audio_oss.cc \
$(audio_oss_la_swig_sources)
_audio_oss_la_LIBADD = \
@@ -99,161 +96,38 @@ _audio_oss_la_LDFLAGS = \
_audio_oss_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(audio_oss_la_swig_cxxflags)
audio_oss_python_PYTHON = \
audio_oss.py \
$(audio_oss_python)
-## Entry rule for running SWIG
+python/audio_oss.cc: audio_oss.py
+audio_oss.py: audio_oss.i
-audio_oss.h audio_oss.py audio_oss.cc: audio_oss.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/audio_oss-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/audio_oss-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/audio_oss-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/audio_oss-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_oss-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/audio_oss-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/audio_oss-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/audio_oss-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/audio_oss.d
+# end of PYTHON
-$(DEPDIR)/audio_oss-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(audio_oss_swig_args) \
- -MD -MF $(DEPDIR)/audio_oss.Std \
- -module audio_oss -o audio_oss.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/audio_oss.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/audio_oss.Std \
- > $(DEPDIR)/audio_oss.Sd; \
- $(RM) $(DEPDIR)/audio_oss.Std; \
- $(MV) $(DEPDIR)/audio_oss.Sd $(DEPDIR)/audio_oss.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/audio_oss.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/audio_oss.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/audio_oss.Std $(DEPDIR)/audio_oss.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/audio_oss.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_oss.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_oss.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/audio_oss.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/audio_oss-generate-stamp
+if GUILE
+audio_oss_scmlib_LTLIBRARIES = libguile-audio_oss.la
+libguile_audio_oss_la_SOURCES = \
+ guile/audio_oss.cc \
+ $(audio_oss_la_swig_sources)
+nobase_audio_oss_scm_DATA = gnuradio/audio_oss.scm gnuradio/audio_oss-primitive.scm
+
+libguile_audio_oss_la_LIBADD = $(_audio_oss_la_LIBADD)
+libguile_audio_oss_la_LDFLAGS = $(_audio_oss_la_LDFLAGS)
+libguile_audio_oss_la_CXXFLAGS = $(_audio_oss_la_CXXFLAGS)
+
+guile/audio_oss.cc: gnuradio/audio_oss.scm
+gnuradio/audio_oss.scm: audio_oss.i
+gnuradio/audio_oss-primitive.scm: gnuradio/audio_oss.scm
+
+# Include the guile dependencies for this file
+-include guile/audio_oss.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/audio_oss.d@am__quote@
diff --git a/gr-audio-oss/src/audio_oss.i b/gr-audio-oss/src/audio_oss.i
index 0a2e6e6a4..4e54f8f91 100644
--- a/gr-audio-oss/src/audio_oss.i
+++ b/gr-audio-oss/src/audio_oss.i
@@ -63,3 +63,13 @@ class audio_oss_source : public gr_sync_block {
public:
~audio_oss_source ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-audio_oss" "scm_init_gnuradio_audio_oss_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-audio-osx/src/Makefile.swig.gen b/gr-audio-osx/src/Makefile.swig.gen
index b4fd71357..deb600dbc 100644
--- a/gr-audio-osx/src/Makefile.swig.gen
+++ b/gr-audio-osx/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ audio_osx_pylibdir_category ?= $(audio_osx_pythondir_category)
audio_osx_pythondir = $(pythondir)/$(audio_osx_pythondir_category)
audio_osx_pylibdir = $(pyexecdir)/$(audio_osx_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+audio_osx_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/audio_osx
+# FIXME: determince whether these should be installed with gnuradio.
+audio_osx_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
audio_osx_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ audio_osx_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/audio_osx-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += audio_osx.py audio_osx.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ audio_osx_pylib_LTLIBRARIES = \
_audio_osx.la
_audio_osx_la_SOURCES = \
- audio_osx.cc \
+ python/audio_osx.cc \
$(audio_osx_la_swig_sources)
_audio_osx_la_LIBADD = \
@@ -99,161 +96,38 @@ _audio_osx_la_LDFLAGS = \
_audio_osx_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(audio_osx_la_swig_cxxflags)
audio_osx_python_PYTHON = \
audio_osx.py \
$(audio_osx_python)
-## Entry rule for running SWIG
+python/audio_osx.cc: audio_osx.py
+audio_osx.py: audio_osx.i
-audio_osx.h audio_osx.py audio_osx.cc: audio_osx.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/audio_osx-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/audio_osx-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/audio_osx-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/audio_osx-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_osx-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/audio_osx-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/audio_osx-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/audio_osx-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/audio_osx.d
+# end of PYTHON
-$(DEPDIR)/audio_osx-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(audio_osx_swig_args) \
- -MD -MF $(DEPDIR)/audio_osx.Std \
- -module audio_osx -o audio_osx.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/audio_osx.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/audio_osx.Std \
- > $(DEPDIR)/audio_osx.Sd; \
- $(RM) $(DEPDIR)/audio_osx.Std; \
- $(MV) $(DEPDIR)/audio_osx.Sd $(DEPDIR)/audio_osx.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/audio_osx.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/audio_osx.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/audio_osx.Std $(DEPDIR)/audio_osx.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/audio_osx.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_osx.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_osx.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/audio_osx.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/audio_osx-generate-stamp
+if GUILE
+audio_osx_scmlib_LTLIBRARIES = libguile-audio_osx.la
+libguile_audio_osx_la_SOURCES = \
+ guile/audio_osx.cc \
+ $(audio_osx_la_swig_sources)
+nobase_audio_osx_scm_DATA = gnuradio/audio_osx.scm gnuradio/audio_osx-primitive.scm
+
+libguile_audio_osx_la_LIBADD = $(_audio_osx_la_LIBADD)
+libguile_audio_osx_la_LDFLAGS = $(_audio_osx_la_LDFLAGS)
+libguile_audio_osx_la_CXXFLAGS = $(_audio_osx_la_CXXFLAGS)
+
+guile/audio_osx.cc: gnuradio/audio_osx.scm
+gnuradio/audio_osx.scm: audio_osx.i
+gnuradio/audio_osx-primitive.scm: gnuradio/audio_osx.scm
+
+# Include the guile dependencies for this file
+-include guile/audio_osx.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/audio_osx.d@am__quote@
diff --git a/gr-audio-osx/src/audio_osx.i b/gr-audio-osx/src/audio_osx.i
index 7be487269..2e724900b 100644
--- a/gr-audio-osx/src/audio_osx.i
+++ b/gr-audio-osx/src/audio_osx.i
@@ -88,3 +88,13 @@ class audio_osx_source : public gr_sync_block {
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-audio_osx" "scm_init_gnuradio_audio_osx_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-audio-portaudio/src/Makefile.swig.gen b/gr-audio-portaudio/src/Makefile.swig.gen
index 368f2e328..2ae383ed9 100644
--- a/gr-audio-portaudio/src/Makefile.swig.gen
+++ b/gr-audio-portaudio/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ audio_portaudio_pylibdir_category ?= $(audio_portaudio_pythondir_category)
audio_portaudio_pythondir = $(pythondir)/$(audio_portaudio_pythondir_category)
audio_portaudio_pylibdir = $(pyexecdir)/$(audio_portaudio_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+audio_portaudio_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/audio_portaudio
+# FIXME: determince whether these should be installed with gnuradio.
+audio_portaudio_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
audio_portaudio_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ audio_portaudio_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/audio_portaudio-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += audio_portaudio.py audio_portaudio.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ audio_portaudio_pylib_LTLIBRARIES = \
_audio_portaudio.la
_audio_portaudio_la_SOURCES = \
- audio_portaudio.cc \
+ python/audio_portaudio.cc \
$(audio_portaudio_la_swig_sources)
_audio_portaudio_la_LIBADD = \
@@ -99,161 +96,38 @@ _audio_portaudio_la_LDFLAGS = \
_audio_portaudio_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(audio_portaudio_la_swig_cxxflags)
audio_portaudio_python_PYTHON = \
audio_portaudio.py \
$(audio_portaudio_python)
-## Entry rule for running SWIG
+python/audio_portaudio.cc: audio_portaudio.py
+audio_portaudio.py: audio_portaudio.i
-audio_portaudio.h audio_portaudio.py audio_portaudio.cc: audio_portaudio.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/audio_portaudio-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/audio_portaudio-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/audio_portaudio-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/audio_portaudio-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_portaudio-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/audio_portaudio-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/audio_portaudio-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/audio_portaudio-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/audio_portaudio.d
+# end of PYTHON
-$(DEPDIR)/audio_portaudio-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(audio_portaudio_swig_args) \
- -MD -MF $(DEPDIR)/audio_portaudio.Std \
- -module audio_portaudio -o audio_portaudio.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/audio_portaudio.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/audio_portaudio.Std \
- > $(DEPDIR)/audio_portaudio.Sd; \
- $(RM) $(DEPDIR)/audio_portaudio.Std; \
- $(MV) $(DEPDIR)/audio_portaudio.Sd $(DEPDIR)/audio_portaudio.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/audio_portaudio.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/audio_portaudio.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/audio_portaudio.Std $(DEPDIR)/audio_portaudio.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/audio_portaudio.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_portaudio.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_portaudio.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/audio_portaudio.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/audio_portaudio-generate-stamp
+if GUILE
+audio_portaudio_scmlib_LTLIBRARIES = libguile-audio_portaudio.la
+libguile_audio_portaudio_la_SOURCES = \
+ guile/audio_portaudio.cc \
+ $(audio_portaudio_la_swig_sources)
+nobase_audio_portaudio_scm_DATA = gnuradio/audio_portaudio.scm gnuradio/audio_portaudio-primitive.scm
+
+libguile_audio_portaudio_la_LIBADD = $(_audio_portaudio_la_LIBADD)
+libguile_audio_portaudio_la_LDFLAGS = $(_audio_portaudio_la_LDFLAGS)
+libguile_audio_portaudio_la_CXXFLAGS = $(_audio_portaudio_la_CXXFLAGS)
+
+guile/audio_portaudio.cc: gnuradio/audio_portaudio.scm
+gnuradio/audio_portaudio.scm: audio_portaudio.i
+gnuradio/audio_portaudio-primitive.scm: gnuradio/audio_portaudio.scm
+
+# Include the guile dependencies for this file
+-include guile/audio_portaudio.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/audio_portaudio.d@am__quote@
diff --git a/gr-audio-portaudio/src/audio_portaudio.i b/gr-audio-portaudio/src/audio_portaudio.i
index b0ec2438d..65a1ef60e 100644
--- a/gr-audio-portaudio/src/audio_portaudio.i
+++ b/gr-audio-portaudio/src/audio_portaudio.i
@@ -70,3 +70,13 @@ class audio_portaudio_sink : public gr_sync_block {
public:
~audio_portaudio_sink ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-audio_portaudio" "scm_init_gnuradio_audio_portaudio_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-audio-windows/src/Makefile.am b/gr-audio-windows/src/Makefile.am
index d3e3f5a85..d158b6d8c 100644
--- a/gr-audio-windows/src/Makefile.am
+++ b/gr-audio-windows/src/Makefile.am
@@ -36,7 +36,7 @@ lib_LTLIBRARIES = libgnuradio-audio-windows.la
libgnuradio_audio_windows_la_SOURCES = \
audio_windows_sink.cc \
- audio_windows_source.cc
+ audio_windows_source.cc
libgnuradio_audio_windows_la_LIBADD = \
$(GNURADIO_CORE_LA) \
diff --git a/gr-audio-windows/src/Makefile.swig.gen b/gr-audio-windows/src/Makefile.swig.gen
index 61215b89b..03a94eb33 100644
--- a/gr-audio-windows/src/Makefile.swig.gen
+++ b/gr-audio-windows/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ audio_windows_pylibdir_category ?= $(audio_windows_pythondir_category)
audio_windows_pythondir = $(pythondir)/$(audio_windows_pythondir_category)
audio_windows_pylibdir = $(pyexecdir)/$(audio_windows_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+audio_windows_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/audio_windows
+# FIXME: determince whether these should be installed with gnuradio.
+audio_windows_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
audio_windows_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ audio_windows_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/audio_windows-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += audio_windows.py audio_windows.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ audio_windows_pylib_LTLIBRARIES = \
_audio_windows.la
_audio_windows_la_SOURCES = \
- audio_windows.cc \
+ python/audio_windows.cc \
$(audio_windows_la_swig_sources)
_audio_windows_la_LIBADD = \
@@ -99,161 +96,38 @@ _audio_windows_la_LDFLAGS = \
_audio_windows_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(audio_windows_la_swig_cxxflags)
audio_windows_python_PYTHON = \
audio_windows.py \
$(audio_windows_python)
-## Entry rule for running SWIG
+python/audio_windows.cc: audio_windows.py
+audio_windows.py: audio_windows.i
-audio_windows.h audio_windows.py audio_windows.cc: audio_windows.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/audio_windows-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/audio_windows-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/audio_windows-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/audio_windows-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_windows-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/audio_windows-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/audio_windows-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/audio_windows-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/audio_windows.d
+# end of PYTHON
-$(DEPDIR)/audio_windows-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(audio_windows_swig_args) \
- -MD -MF $(DEPDIR)/audio_windows.Std \
- -module audio_windows -o audio_windows.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/audio_windows.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/audio_windows.Std \
- > $(DEPDIR)/audio_windows.Sd; \
- $(RM) $(DEPDIR)/audio_windows.Std; \
- $(MV) $(DEPDIR)/audio_windows.Sd $(DEPDIR)/audio_windows.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/audio_windows.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/audio_windows.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/audio_windows.Std $(DEPDIR)/audio_windows.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/audio_windows.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_windows.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_windows.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/audio_windows.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/audio_windows-generate-stamp
+if GUILE
+audio_windows_scmlib_LTLIBRARIES = libguile-audio_windows.la
+libguile_audio_windows_la_SOURCES = \
+ guile/audio_windows.cc \
+ $(audio_windows_la_swig_sources)
+nobase_audio_windows_scm_DATA = gnuradio/audio_windows.scm gnuradio/audio_windows-primitive.scm
+
+libguile_audio_windows_la_LIBADD = $(_audio_windows_la_LIBADD)
+libguile_audio_windows_la_LDFLAGS = $(_audio_windows_la_LDFLAGS)
+libguile_audio_windows_la_CXXFLAGS = $(_audio_windows_la_CXXFLAGS)
+
+guile/audio_windows.cc: gnuradio/audio_windows.scm
+gnuradio/audio_windows.scm: audio_windows.i
+gnuradio/audio_windows-primitive.scm: gnuradio/audio_windows.scm
+
+# Include the guile dependencies for this file
+-include guile/audio_windows.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/audio_windows.d@am__quote@
diff --git a/gr-audio-windows/src/audio_windows.i b/gr-audio-windows/src/audio_windows.i
index b5b6f562e..e8a1ba2c9 100644
--- a/gr-audio-windows/src/audio_windows.i
+++ b/gr-audio-windows/src/audio_windows.i
@@ -61,3 +61,13 @@ class audio_windows_source : public gr_sync_block {
public:
~audio_windows_source ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-audio_windows" "scm_init_gnuradio_audio_windows_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-comedi/src/Makefile.swig.gen b/gr-comedi/src/Makefile.swig.gen
index dd2c235c3..6007d1216 100644
--- a/gr-comedi/src/Makefile.swig.gen
+++ b/gr-comedi/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ comedi_pylibdir_category ?= $(comedi_pythondir_category)
comedi_pythondir = $(pythondir)/$(comedi_pythondir_category)
comedi_pylibdir = $(pyexecdir)/$(comedi_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+comedi_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/comedi
+# FIXME: determince whether these should be installed with gnuradio.
+comedi_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
comedi_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ comedi_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/comedi-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += comedi.py comedi.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ comedi_pylib_LTLIBRARIES = \
_comedi.la
_comedi_la_SOURCES = \
- comedi.cc \
+ python/comedi.cc \
$(comedi_la_swig_sources)
_comedi_la_LIBADD = \
@@ -99,161 +96,38 @@ _comedi_la_LDFLAGS = \
_comedi_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(comedi_la_swig_cxxflags)
comedi_python_PYTHON = \
comedi.py \
$(comedi_python)
-## Entry rule for running SWIG
+python/comedi.cc: comedi.py
+comedi.py: comedi.i
-comedi.h comedi.py comedi.cc: comedi.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/comedi-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/comedi-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/comedi-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/comedi-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/comedi-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/comedi-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/comedi-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/comedi-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/comedi.d
+# end of PYTHON
-$(DEPDIR)/comedi-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(comedi_swig_args) \
- -MD -MF $(DEPDIR)/comedi.Std \
- -module comedi -o comedi.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/comedi.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/comedi.Std \
- > $(DEPDIR)/comedi.Sd; \
- $(RM) $(DEPDIR)/comedi.Std; \
- $(MV) $(DEPDIR)/comedi.Sd $(DEPDIR)/comedi.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/comedi.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/comedi.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/comedi.Std $(DEPDIR)/comedi.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/comedi.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/comedi.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/comedi.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/comedi.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/comedi-generate-stamp
+if GUILE
+comedi_scmlib_LTLIBRARIES = libguile-comedi.la
+libguile_comedi_la_SOURCES = \
+ guile/comedi.cc \
+ $(comedi_la_swig_sources)
+nobase_comedi_scm_DATA = gnuradio/comedi.scm gnuradio/comedi-primitive.scm
+
+libguile_comedi_la_LIBADD = $(_comedi_la_LIBADD)
+libguile_comedi_la_LDFLAGS = $(_comedi_la_LDFLAGS)
+libguile_comedi_la_CXXFLAGS = $(_comedi_la_CXXFLAGS)
+
+guile/comedi.cc: gnuradio/comedi.scm
+gnuradio/comedi.scm: comedi.i
+gnuradio/comedi-primitive.scm: gnuradio/comedi.scm
+
+# Include the guile dependencies for this file
+-include guile/comedi.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/comedi.d@am__quote@
diff --git a/gr-comedi/src/comedi.i b/gr-comedi/src/comedi.i
index cdb77aee0..499ccc598 100644
--- a/gr-comedi/src/comedi.i
+++ b/gr-comedi/src/comedi.i
@@ -69,3 +69,13 @@ class comedi_sink_s : public gr_sync_block {
public:
~comedi_sink_s ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-comedi" "scm_init_gnuradio_comedi_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-cvsd-vocoder/src/lib/Makefile.swig.gen b/gr-cvsd-vocoder/src/lib/Makefile.swig.gen
index e192abc70..11580f18a 100644
--- a/gr-cvsd-vocoder/src/lib/Makefile.swig.gen
+++ b/gr-cvsd-vocoder/src/lib/Makefile.swig.gen
@@ -38,6 +38,16 @@ cvsd_vocoder_pylibdir_category ?= $(cvsd_vocoder_pythondir_category)
cvsd_vocoder_pythondir = $(pythondir)/$(cvsd_vocoder_pythondir_category)
cvsd_vocoder_pylibdir = $(pyexecdir)/$(cvsd_vocoder_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+cvsd_vocoder_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/cvsd_vocoder
+# FIXME: determince whether these should be installed with gnuradio.
+cvsd_vocoder_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
cvsd_vocoder_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ cvsd_vocoder_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/cvsd_vocoder-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += cvsd_vocoder.py cvsd_vocoder.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ cvsd_vocoder_pylib_LTLIBRARIES = \
_cvsd_vocoder.la
_cvsd_vocoder_la_SOURCES = \
- cvsd_vocoder.cc \
+ python/cvsd_vocoder.cc \
$(cvsd_vocoder_la_swig_sources)
_cvsd_vocoder_la_LIBADD = \
@@ -99,161 +96,38 @@ _cvsd_vocoder_la_LDFLAGS = \
_cvsd_vocoder_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(cvsd_vocoder_la_swig_cxxflags)
cvsd_vocoder_python_PYTHON = \
cvsd_vocoder.py \
$(cvsd_vocoder_python)
-## Entry rule for running SWIG
+python/cvsd_vocoder.cc: cvsd_vocoder.py
+cvsd_vocoder.py: cvsd_vocoder.i
-cvsd_vocoder.h cvsd_vocoder.py cvsd_vocoder.cc: cvsd_vocoder.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/cvsd_vocoder-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/cvsd_vocoder-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/cvsd_vocoder-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/cvsd_vocoder-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/cvsd_vocoder-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/cvsd_vocoder-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/cvsd_vocoder-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/cvsd_vocoder-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/cvsd_vocoder.d
+# end of PYTHON
-$(DEPDIR)/cvsd_vocoder-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(cvsd_vocoder_swig_args) \
- -MD -MF $(DEPDIR)/cvsd_vocoder.Std \
- -module cvsd_vocoder -o cvsd_vocoder.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/cvsd_vocoder.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/cvsd_vocoder.Std \
- > $(DEPDIR)/cvsd_vocoder.Sd; \
- $(RM) $(DEPDIR)/cvsd_vocoder.Std; \
- $(MV) $(DEPDIR)/cvsd_vocoder.Sd $(DEPDIR)/cvsd_vocoder.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/cvsd_vocoder.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/cvsd_vocoder.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/cvsd_vocoder.Std $(DEPDIR)/cvsd_vocoder.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/cvsd_vocoder.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/cvsd_vocoder.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/cvsd_vocoder.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/cvsd_vocoder.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/cvsd_vocoder-generate-stamp
+if GUILE
+cvsd_vocoder_scmlib_LTLIBRARIES = libguile-cvsd_vocoder.la
+libguile_cvsd_vocoder_la_SOURCES = \
+ guile/cvsd_vocoder.cc \
+ $(cvsd_vocoder_la_swig_sources)
+nobase_cvsd_vocoder_scm_DATA = gnuradio/cvsd_vocoder.scm gnuradio/cvsd_vocoder-primitive.scm
+
+libguile_cvsd_vocoder_la_LIBADD = $(_cvsd_vocoder_la_LIBADD)
+libguile_cvsd_vocoder_la_LDFLAGS = $(_cvsd_vocoder_la_LDFLAGS)
+libguile_cvsd_vocoder_la_CXXFLAGS = $(_cvsd_vocoder_la_CXXFLAGS)
+
+guile/cvsd_vocoder.cc: gnuradio/cvsd_vocoder.scm
+gnuradio/cvsd_vocoder.scm: cvsd_vocoder.i
+gnuradio/cvsd_vocoder-primitive.scm: gnuradio/cvsd_vocoder.scm
+
+# Include the guile dependencies for this file
+-include guile/cvsd_vocoder.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/cvsd_vocoder.d@am__quote@
diff --git a/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i b/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i
index bf7a0b59f..6d85648d4 100644
--- a/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i
+++ b/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i
@@ -79,3 +79,13 @@ private:
public:
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-cvsd_vocoder" "scm_init_gnuradio_cvsd_vocoder_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-gcell/src/Makefile.swig.gen b/gr-gcell/src/Makefile.swig.gen
index 75353c347..fc4189d5e 100644
--- a/gr-gcell/src/Makefile.swig.gen
+++ b/gr-gcell/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ gcell_pylibdir_category ?= $(gcell_pythondir_category)
gcell_pythondir = $(pythondir)/$(gcell_pythondir_category)
gcell_pylibdir = $(pyexecdir)/$(gcell_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gcell_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gcell
+# FIXME: determince whether these should be installed with gnuradio.
+gcell_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
gcell_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ gcell_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gcell-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gcell.py gcell.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ gcell_pylib_LTLIBRARIES = \
_gcell.la
_gcell_la_SOURCES = \
- gcell.cc \
+ python/gcell.cc \
$(gcell_la_swig_sources)
_gcell_la_LIBADD = \
@@ -99,161 +96,38 @@ _gcell_la_LDFLAGS = \
_gcell_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(gcell_la_swig_cxxflags)
gcell_python_PYTHON = \
gcell.py \
$(gcell_python)
-## Entry rule for running SWIG
+python/gcell.cc: gcell.py
+gcell.py: gcell.i
-gcell.h gcell.py gcell.cc: gcell.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gcell-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gcell-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gcell-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gcell-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gcell-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gcell-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gcell-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gcell-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/gcell.d
+# end of PYTHON
-$(DEPDIR)/gcell-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gcell_swig_args) \
- -MD -MF $(DEPDIR)/gcell.Std \
- -module gcell -o gcell.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gcell.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gcell.Std \
- > $(DEPDIR)/gcell.Sd; \
- $(RM) $(DEPDIR)/gcell.Std; \
- $(MV) $(DEPDIR)/gcell.Sd $(DEPDIR)/gcell.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gcell.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gcell.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gcell.Std $(DEPDIR)/gcell.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gcell.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gcell.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gcell.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gcell.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gcell-generate-stamp
+if GUILE
+gcell_scmlib_LTLIBRARIES = libguile-gcell.la
+libguile_gcell_la_SOURCES = \
+ guile/gcell.cc \
+ $(gcell_la_swig_sources)
+nobase_gcell_scm_DATA = gnuradio/gcell.scm gnuradio/gcell-primitive.scm
+
+libguile_gcell_la_LIBADD = $(_gcell_la_LIBADD)
+libguile_gcell_la_LDFLAGS = $(_gcell_la_LDFLAGS)
+libguile_gcell_la_CXXFLAGS = $(_gcell_la_CXXFLAGS)
+
+guile/gcell.cc: gnuradio/gcell.scm
+gnuradio/gcell.scm: gcell.i
+gnuradio/gcell-primitive.scm: gnuradio/gcell.scm
+
+# Include the guile dependencies for this file
+-include guile/gcell.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gcell.d@am__quote@
diff --git a/gr-gcell/src/gcell.i b/gr-gcell/src/gcell.i
index 29e69fdf7..dfffcc188 100644
--- a/gr-gcell/src/gcell.i
+++ b/gr-gcell/src/gcell.i
@@ -28,3 +28,13 @@
%include "gc_job_manager.i"
%include "gcell_fft_vcc.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gcell" "scm_init_gnuradio_gcell_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen b/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen
index 5446f346a..b124d4616 100644
--- a/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen
+++ b/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen
@@ -38,6 +38,16 @@ gsm_full_rate_pylibdir_category ?= $(gsm_full_rate_pythondir_category)
gsm_full_rate_pythondir = $(pythondir)/$(gsm_full_rate_pythondir_category)
gsm_full_rate_pylibdir = $(pyexecdir)/$(gsm_full_rate_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+gsm_full_rate_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/gsm_full_rate
+# FIXME: determince whether these should be installed with gnuradio.
+gsm_full_rate_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
gsm_full_rate_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ gsm_full_rate_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/gsm_full_rate-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += gsm_full_rate.py gsm_full_rate.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ gsm_full_rate_pylib_LTLIBRARIES = \
_gsm_full_rate.la
_gsm_full_rate_la_SOURCES = \
- gsm_full_rate.cc \
+ python/gsm_full_rate.cc \
$(gsm_full_rate_la_swig_sources)
_gsm_full_rate_la_LIBADD = \
@@ -99,161 +96,38 @@ _gsm_full_rate_la_LDFLAGS = \
_gsm_full_rate_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(gsm_full_rate_la_swig_cxxflags)
gsm_full_rate_python_PYTHON = \
gsm_full_rate.py \
$(gsm_full_rate_python)
-## Entry rule for running SWIG
+python/gsm_full_rate.cc: gsm_full_rate.py
+gsm_full_rate.py: gsm_full_rate.i
-gsm_full_rate.h gsm_full_rate.py gsm_full_rate.cc: gsm_full_rate.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/gsm_full_rate-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/gsm_full_rate-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/gsm_full_rate-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/gsm_full_rate-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gsm_full_rate-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/gsm_full_rate-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/gsm_full_rate-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/gsm_full_rate-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/gsm_full_rate.d
+# end of PYTHON
-$(DEPDIR)/gsm_full_rate-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(gsm_full_rate_swig_args) \
- -MD -MF $(DEPDIR)/gsm_full_rate.Std \
- -module gsm_full_rate -o gsm_full_rate.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/gsm_full_rate.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/gsm_full_rate.Std \
- > $(DEPDIR)/gsm_full_rate.Sd; \
- $(RM) $(DEPDIR)/gsm_full_rate.Std; \
- $(MV) $(DEPDIR)/gsm_full_rate.Sd $(DEPDIR)/gsm_full_rate.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/gsm_full_rate.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/gsm_full_rate.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/gsm_full_rate.Std $(DEPDIR)/gsm_full_rate.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/gsm_full_rate.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gsm_full_rate.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gsm_full_rate.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/gsm_full_rate.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/gsm_full_rate-generate-stamp
+if GUILE
+gsm_full_rate_scmlib_LTLIBRARIES = libguile-gsm_full_rate.la
+libguile_gsm_full_rate_la_SOURCES = \
+ guile/gsm_full_rate.cc \
+ $(gsm_full_rate_la_swig_sources)
+nobase_gsm_full_rate_scm_DATA = gnuradio/gsm_full_rate.scm gnuradio/gsm_full_rate-primitive.scm
+
+libguile_gsm_full_rate_la_LIBADD = $(_gsm_full_rate_la_LIBADD)
+libguile_gsm_full_rate_la_LDFLAGS = $(_gsm_full_rate_la_LDFLAGS)
+libguile_gsm_full_rate_la_CXXFLAGS = $(_gsm_full_rate_la_CXXFLAGS)
+
+guile/gsm_full_rate.cc: gnuradio/gsm_full_rate.scm
+gnuradio/gsm_full_rate.scm: gsm_full_rate.i
+gnuradio/gsm_full_rate-primitive.scm: gnuradio/gsm_full_rate.scm
+
+# Include the guile dependencies for this file
+-include guile/gsm_full_rate.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/gsm_full_rate.d@am__quote@
diff --git a/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i b/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i
index 535faa7fc..ceea3e35b 100644
--- a/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i
+++ b/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i
@@ -46,3 +46,13 @@ class gsm_fr_decode_ps : public gr_sync_interpolator {
public:
~gsm_fr_decode_ps ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-gsm_full_rate" "scm_init_gnuradio_gsm_full_rate_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-guile/.gitignore b/gr-guile/.gitignore
new file mode 100644
index 000000000..16c984055
--- /dev/null
+++ b/gr-guile/.gitignore
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gr-guile/Makefile.am b/gr-guile/Makefile.am
new file mode 100644
index 000000000..34b4b6fba
--- /dev/null
+++ b/gr-guile/Makefile.am
@@ -0,0 +1,22 @@
+#
+# 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/>.
+#
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS = apps example-waveforms
diff --git a/gr-guile/apps/.gitignore b/gr-guile/apps/.gitignore
new file mode 100644
index 000000000..16c984055
--- /dev/null
+++ b/gr-guile/apps/.gitignore
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gr-guile/apps/Makefile.am b/gr-guile/apps/Makefile.am
new file mode 100644
index 000000000..7e4c3c2c4
--- /dev/null
+++ b/gr-guile/apps/Makefile.am
@@ -0,0 +1,23 @@
+#
+# 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/>.
+#
+
+include $(top_srcdir)/Makefile.common
+
+bin_SCRIPTS = \
+ gr-run-waveform
diff --git a/gr-guile/apps/README b/gr-guile/apps/README
new file mode 100644
index 000000000..703146bd4
--- /dev/null
+++ b/gr-guile/apps/README
@@ -0,0 +1,2 @@
+This applications will not run from the build tree. They must be
+installed first using "make install"
diff --git a/gr-guile/apps/gr-run-waveform b/gr-guile/apps/gr-run-waveform
new file mode 100755
index 000000000..a8d1d0389
--- /dev/null
+++ b/gr-guile/apps/gr-run-waveform
@@ -0,0 +1,64 @@
+#!/usr/bin/guile \
+-e main -s
+!#
+;;;
+;;; 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/>.
+;;;
+
+;;; Load and run a waveform defined with define-waveform
+;;;
+;;; usage: gr-run-waveform filename.wfd
+
+
+(use-modules (oop goops)
+ (gnuradio core)
+ (gnuradio waveform))
+
+
+(define (enable-debug-mode)
+ (display %load-path)
+ (newline)
+ (set! %load-verbosely #t)
+ (debug-enable 'backtrace 'debug))
+
+(define (usage args)
+ (let ((port (current-error-port)))
+ (display "usage: " port)
+ (display (car args) port)
+ (newline port)
+ (exit 1)))
+
+
+(define (main args)
+ (if (not (>= (length args) 2))
+ (usage args))
+ (enable-debug-mode)
+ (let ((filename (cadr args)))
+ ;; Probably ought to handle errors here
+ (load filename)
+ (let ((f (waveform-last-registered)))
+ (if (not f)
+ (begin
+ (format 1 "No define-waveform found in file '~A'\n" filename)
+ (exit 1)))
+ (gr:run (f (cdr args))))))
+
+
+;;; Local Variables:
+;;; mode: scheme
+;;; End:
diff --git a/gr-guile/example-waveforms/.gitignore b/gr-guile/example-waveforms/.gitignore
new file mode 100644
index 000000000..16c984055
--- /dev/null
+++ b/gr-guile/example-waveforms/.gitignore
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gr-guile/example-waveforms/Makefile.am b/gr-guile/example-waveforms/Makefile.am
new file mode 100644
index 000000000..cda4172de
--- /dev/null
+++ b/gr-guile/example-waveforms/Makefile.am
@@ -0,0 +1,25 @@
+#
+# 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/>.
+#
+
+include $(top_srcdir)/Makefile.common
+
+waveformdir=$(datarootdir)/gnuradio/example-waveforms
+
+waveform_DATA = \
+ dial-tone.wfd
diff --git a/gr-guile/example-waveforms/dial-tone.wfd b/gr-guile/example-waveforms/dial-tone.wfd
new file mode 100644
index 000000000..ced3df572
--- /dev/null
+++ b/gr-guile/example-waveforms/dial-tone.wfd
@@ -0,0 +1,40 @@
+;;; Emacs, format this using -*-scheme-*- mode.
+;;;
+;;; 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 example waveform outputs a signal to an audio_alsa_sink
+;;; that sounds like North American dial tone.
+
+(use-modules (gnuradio audio_alsa))
+
+
+(define-waveform (dial-tone cmd-line-args)
+ (vars
+ (sample-rate 48000)
+ (ampl 0.1))
+
+ (blocks
+ (src0 (gr:sig-source-f sample-rate (gr:GR-SIN-WAVE) 350 ampl))
+ (src1 (gr:sig-source-f sample-rate (gr:GR-SIN-WAVE) 440 ampl))
+ (sink (gr:audio-alsa-sink sample-rate "plughw:0,0"))
+ )
+
+ (connections
+ (src0 (list sink 0)) ; src0 to left input
+ (src1 (list sink 1)))) ; src1 to right input
diff --git a/gr-howto-write-a-block/Makefile.common b/gr-howto-write-a-block/Makefile.common
index 15a521698..0787b4eec 100644
--- a/gr-howto-write-a-block/Makefile.common
+++ b/gr-howto-write-a-block/Makefile.common
@@ -23,6 +23,10 @@
# The name of this "out-of-tree" module
modname = howto
+# Make rebuilds less verbose with stuff we can safely ignore
+# about GNU make only extensions.
+AUTOMAKE += -Wno-portability -Wnone
+
# these flags are used when compiling non-SWIG-wrapper files
# when going in to non-SWIG libraries
AM_CXXFLAGS = @autoconf_default_CXXFLAGS@
@@ -69,6 +73,36 @@ RM=$(RM_PROG) -f
STAMPS =
MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT
+## SWIG suffixes for automake to know about
+SUFFIXES = .i .scm .py
+
+if GUILE
+# Compile a .i to what guile needs. We use -o to set the output file name,
+# or even with -outdir guile in SWIG_GUILE_ARGS, swig keeps putting a
+# gnuradio_core_*_wrap.cxx in the source directory.
+gnuradio/%.scm : %.i
+ @echo "Compile .i to .scm"
+ @test -d "guile" || $(mkinstalldirs) "guile"
+ @test -d "gnuradio" || $(mkinstalldirs) "gnuradio"
+ $(SWIG) $(STD_SWIG_GUILE_ARGS) $($*_swig_args) \
+ -MD -MF guile/$*.Std \
+ -module $* -o guile/$*.cc $<
+ $(SED) -e 's|guile/\(.*\)\.cc:|gnuradio/\1.scm:|' guile/$*.Std > guile/$*.d
+ $(SED) -i -e 's/<--dummy-[0-9]\+-->/<top>/g' gnuradio/$*.scm
+ $(SED) -i -e 's/^(export /(export-safely /' gnuradio/$*.scm
+ $(RM) guile/$*.Std
+endif
+
+# Compile a .i file to what python needs
+.i.py:
+ @echo "Compile .i to .py"
+ @test -d "python" || $(mkinstalldirs) "python"
+ $(SWIG) $(STD_SWIG_PYTHON_ARGS) $($*_swig_args) \
+ -MD -MF python/$*.Std \
+ -module $* -o python/$*.cc -oh python/$*.h $<
+ $(SED) -e 's|python/\(.*\)\.cc:|\1.py:|' python/$*.Std > python/$*.d
+ $(RM) python/$*.Std
+
# Don't distribute the files defined in the variable 'no_dist_files'
dist-hook:
@for file in $(no_dist_files); do \
diff --git a/gr-howto-write-a-block/Makefile.swig b/gr-howto-write-a-block/Makefile.swig
index 9e14835e5..231ae4ebe 100644
--- a/gr-howto-write-a-block/Makefile.swig
+++ b/gr-howto-write-a-block/Makefile.swig
@@ -32,6 +32,9 @@
## In some older autotools, $(builddir) is not defined, so
## just use '.' instead.
+CLEANFILES = python/*.cc python/*.h python/*.lo python/*.o
+CLEANFILES += guile/*.cc gnuradio/*.scm guile/*.lo guile/*.o
+
SWIG_PYTHON_FLAGS = \
-fvirtual \
-python \
@@ -40,14 +43,34 @@ SWIG_PYTHON_FLAGS = \
-w511 \
-outdir .
-## standard swig flags used by most components
-
STD_SWIG_PYTHON_ARGS = \
$(SWIG_PYTHON_FLAGS) \
$(STD_DEFINES_AND_INCLUDES) \
$(WITH_SWIG_INCLUDES) \
$(WITH_INCLUDES)
+# NOTE: -Linkage passive and -Linkage module don't define SWIG_init()
+SWIG_GUILE_FLAGS = \
+ -guile \
+ -scm \
+ -scmstub \
+ -package gnuradio \
+ -Linkage module \
+ -proxy \
+ -goopsprefix gr: \
+ -emit-slot-accessors \
+ -emit-setters \
+ -outdir .
+
+## standard swig flags used by most components
+
+STD_SWIG_GUILE_ARGS = \
+ $(SWIG_GUILE_FLAGS) \
+ $(STD_DEFINES_AND_INCLUDES) \
+ $(WITH_SWIG_INCLUDES) \
+ $(WITH_INCLUDES) \
+ -I$(GNURADIO_CORE_INCLUDEDIR)/swig/guile
+
## standard SWIG LD flags for library creation
STD_SWIG_LA_LD_FLAGS = \
@@ -58,8 +81,7 @@ STD_SWIG_LA_LD_FLAGS = \
## standard SWIG library additions for library creation
-STD_SWIG_LA_LIB_ADD = \
- -lstdc++
+STD_SWIG_LA_LIB_ADD = -lstdc++
## standard SWIG CXXFLAGS
## This allows for code to be compiled with "-O1" instead of "-g -O2"
@@ -67,10 +89,6 @@ STD_SWIG_LA_LIB_ADD = \
STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@
-## SWIG suffix for automake to know about
-
-SUFFIXES = .i
-
## Create $(srcdir)/Makefile.swig.gen, containing all of the rules
## for running SWIG to generate or re-generate outputs. SWIG file
## names are to be defined in TOP_SWIG_IFILES, and must include the
@@ -115,3 +133,4 @@ swig_built_sources =
## on variables defined above.
include $(srcdir)/Makefile.swig.gen
+
diff --git a/gr-howto-write-a-block/Makefile.swig.gen.t b/gr-howto-write-a-block/Makefile.swig.gen.t
index 686117f83..5be0ac4aa 100644
--- a/gr-howto-write-a-block/Makefile.swig.gen.t
+++ b/gr-howto-write-a-block/Makefile.swig.gen.t
@@ -25,16 +25,28 @@
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/@NAME@
+## ${prefix}/lib/python${python_version}/site-packages/[category]/@NAME@
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/@NAME@
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/@NAME@
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-@NAME@_pythondir = $(pythondir)/@NAME@
-@NAME@_pylibdir = $(pyexecdir)/@NAME@
+@NAME@_pythondir_category ?= gnuradio/@NAME@
+@NAME@_pylibdir_category ?= $(@NAME@_pythondir_category)
+@NAME@_pythondir = $(pythondir)/$(@NAME@_pythondir_category)
+@NAME@_pylibdir = $(pyexecdir)/$(@NAME@_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+@NAME@_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/@NAME@
+# FIXME: determince whether these should be installed with gnuradio.
+@NAME@_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
@@ -55,23 +67,10 @@
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/@NAME@-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += @NAME@_swig.py @NAME@_swig.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -81,176 +80,53 @@ swig_built_sources += @NAME@_swig.py @NAME@_swig.cc
$(@NAME@_swiginclude_headers)
@NAME@_pylib_LTLIBRARIES = \
- _@NAME@_swig.la
+ _@NAME@.la
-_@NAME@_swig_la_SOURCES = \
- @NAME@_swig.cc \
+_@NAME@_la_SOURCES = \
+ python/@NAME@.cc \
$(@NAME@_la_swig_sources)
-_@NAME@_swig_la_LIBADD = \
+_@NAME@_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
$(@NAME@_la_swig_libadd)
-_@NAME@_swig_la_LDFLAGS = \
+_@NAME@_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
$(@NAME@_la_swig_ldflags)
-_@NAME@_swig_la_CXXFLAGS = \
+_@NAME@_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(@NAME@_la_swig_cxxflags)
@NAME@_python_PYTHON = \
- @NAME@_swig.py \
+ @NAME@.py \
$(@NAME@_python)
-## Entry rule for running SWIG
+python/@NAME@.cc: @NAME@.py
+@NAME@.py: @NAME@.i
-@NAME@.h @NAME@_swig.py @NAME@_swig.cc: @NAME@.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/@NAME@-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/@NAME@-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/@NAME@-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/@NAME@-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/@NAME@-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/@NAME@-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/@NAME@-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/@NAME@-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/@NAME@.d
+# end of PYTHON
-$(DEPDIR)/@NAME@-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(@NAME@_swig_args) \
- -MD -MF $(DEPDIR)/@NAME@.Std \
- -module @NAME@_swig -o @NAME@_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/@NAME@.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/@NAME@.Std \
- > $(DEPDIR)/@NAME@.Sd; \
- $(RM) $(DEPDIR)/@NAME@.Std; \
- $(MV) $(DEPDIR)/@NAME@.Sd $(DEPDIR)/@NAME@.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/@NAME@.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/@NAME@.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/@NAME@.Std $(DEPDIR)/@NAME@.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/@NAME@.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/@NAME@.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/@NAME@.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/@NAME@.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/@NAME@-generate-stamp
+if GUILE
+@NAME@_scmlib_LTLIBRARIES = libguile-@NAME@.la
+libguile_@NAME@_la_SOURCES = \
+ guile/@NAME@.cc \
+ $(@NAME@_la_swig_sources)
+nobase_@NAME@_scm_DATA = gnuradio/@NAME@.scm gnuradio/@NAME@-primitive.scm
+
+libguile_@NAME@_la_LIBADD = $(_@NAME@_la_LIBADD)
+libguile_@NAME@_la_LDFLAGS = $(_@NAME@_la_LDFLAGS)
+libguile_@NAME@_la_CXXFLAGS = $(_@NAME@_la_CXXFLAGS)
+
+guile/@NAME@.cc: gnuradio/@NAME@.scm
+gnuradio/@NAME@.scm: @NAME@.i
+gnuradio/@NAME@-primitive.scm: gnuradio/@NAME@.scm
+
+# Include the guile dependencies for this file
+-include guile/@NAME@.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/@NAME@.d@am__quote@
diff --git a/gr-howto-write-a-block/config.guess b/gr-howto-write-a-block/config.guess
index 285237846..dc84c68ef 100755
--- a/gr-howto-write-a-block/config.guess
+++ b/gr-howto-write-a-block/config.guess
@@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc.
-timestamp='2010-08-21'
+timestamp='2009-11-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -56,9 +56,8 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -92,7 +91,7 @@ if test $# != 0; then
exit 1
fi
-trap 'exit 1' HUP INT TERM
+trap 'exit 1' 1 2 15
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
@@ -106,7 +105,7 @@ trap 'exit 1' HUP INT TERM
set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
@@ -552,7 +551,7 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit ;;
- *:AIX:*:[4567])
+ *:AIX:*:[456])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
@@ -968,9 +967,6 @@ EOF
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
- tile*:Linux:*:*)
- echo ${UNAME_MACHINE}-tilera-linux-gnu
- exit ;;
vax:Linux:*:*)
echo ${UNAME_MACHINE}-dec-linux-gnu
exit ;;
diff --git a/gr-howto-write-a-block/config.sub b/gr-howto-write-a-block/config.sub
index 320e30388..2a55a5075 100755
--- a/gr-howto-write-a-block/config.sub
+++ b/gr-howto-write-a-block/config.sub
@@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc.
-timestamp='2010-09-11'
+timestamp='2009-11-20'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -75,9 +75,8 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -124,9 +123,8 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -283,7 +281,6 @@ case $basic_machine in
| moxie \
| mt \
| msp430 \
- | nds32 | nds32le | nds32be \
| nios | nios2 \
| ns16k | ns32k \
| or32 \
@@ -297,7 +294,7 @@ case $basic_machine in
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
| spu | strongarm \
- | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | tahoe | thumb | tic4x | tic80 | tron \
| ubicom32 \
| v850 | v850e \
| we32k \
@@ -305,15 +302,6 @@ case $basic_machine in
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
m6811 | m68hc11 | m6812 | m68hc12 | picochip)
# Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
@@ -345,7 +333,7 @@ case $basic_machine in
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
@@ -379,7 +367,6 @@ case $basic_machine in
| mmix-* \
| mt-* \
| msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| orion-* \
@@ -393,8 +380,7 @@ case $basic_machine in
| sparclite-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile-* | tilegx-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
| tron-* \
| ubicom32-* \
| v850-* | v850e-* | vax-* \
@@ -494,15 +480,6 @@ case $basic_machine in
basic_machine=powerpc-ibm
os=-cnk
;;
- c54x-*)
- basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
c90)
basic_machine=c90-cray
os=-unicos
@@ -862,12 +839,6 @@ case $basic_machine in
np1)
basic_machine=np1-gould
;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
@@ -1102,10 +1073,17 @@ case $basic_machine in
basic_machine=t90-cray
os=-unicos
;;
- # This must be matched before tile*.
- tilegx*)
- basic_machine=tilegx-unknown
- os=-linux-gnu
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
;;
tile*)
basic_machine=tile-unknown
@@ -1316,8 +1294,7 @@ case $os in
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-uclibc* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1458,8 +1435,6 @@ case $os in
-dicos*)
os=-dicos
;;
- -nacl*)
- ;;
-none)
;;
*)
@@ -1500,15 +1475,6 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
- tic54x-*)
- os=-coff
- ;;
- tic55x-*)
- os=-coff
- ;;
- tic6x-*)
- os=-coff
- ;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
diff --git a/gr-howto-write-a-block/config/gr_standalone.m4 b/gr-howto-write-a-block/config/gr_standalone.m4
index 3f8ddf1d6..0e2ded584 100644
--- a/gr-howto-write-a-block/config/gr_standalone.m4
+++ b/gr-howto-write-a-block/config/gr_standalone.m4
@@ -125,6 +125,23 @@ m4_define([GR_STANDALONE],
)
AM_CONDITIONAL([PYTHON], [test x$enable_python = xyes])
+ AC_ARG_ENABLE([guile],
+ [AS_HELP_STRING([--enable-guile],
+ [generate SWIG/Guile components (default is yes)])],
+ [case "${enableval}" in
+ yes) enable_guile=yes ;;
+ no) enable_guile=no ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-guile]) ;;
+ esac],
+ [enable_guile=no]
+ )
+ AM_CONDITIONAL([GUILE], [test x$enable_guile = xyes])
+
+ dnl see if GUILE is installed
+ if test x${enable_guile} == xyes; then
+ AC_PATH_PROG(GUILE,guile)
+ fi
+
dnl Define where to look for cppunit includes and libs
dnl sets CPPUNIT_CFLAGS and CPPUNIT_LIBS
dnl Try using pkg-config first, then fall back to cppunit-config.
diff --git a/gr-howto-write-a-block/swig/.gitignore b/gr-howto-write-a-block/swig/.gitignore
index 7f4c478d9..696b1ae84 100644
--- a/gr-howto-write-a-block/swig/.gitignore
+++ b/gr-howto-write-a-block/swig/.gitignore
@@ -4,3 +4,6 @@
/Makefile
/howto_swig.cc
/howto_swig.py
+/gnuradio
+/guile
+/python
diff --git a/gr-howto-write-a-block/swig/Makefile.am b/gr-howto-write-a-block/swig/Makefile.am
index 4737ad619..17c4334f6 100644
--- a/gr-howto-write-a-block/swig/Makefile.am
+++ b/gr-howto-write-a-block/swig/Makefile.am
@@ -20,8 +20,19 @@
#
include $(top_srcdir)/Makefile.common
+include $(top_srcdir)/Makefile.swig
+
+# add some of the variables generated inside the Makefile.swig.gen
+BUILT_SOURCES = $(swig_built_sources)
+
+CLEANFILES = python/*.cc python/*.h python/*.d
+if GUILE
+CLEANFILES += guile/*.cc gnuradio/*.scm guile/*.d
+endif
-AM_CPPFLAGS += -I$(top_srcdir)/lib
+AM_CPPFLAGS += -I$(top_srcdir)/lib
+
+swig_built_sources =
if PYTHON
###################################
@@ -34,21 +45,25 @@ TOP_SWIG_IFILES = \
# import howto
# This ends up at:
# ${prefix}/lib/python${python_version}/site-packages/$(modname)
-
howto_la_swig_libadd = \
$(top_builddir)/lib/libgnuradio-howto.la
-include $(top_srcdir)/Makefile.swig
-
-# add some of the variables generated inside the Makefile.swig.gen
-BUILT_SOURCES = $(swig_built_sources)
-
-# Do not distribute the output of SWIG
-no_dist_files = $(swig_built_sources)
-
# additional SWIG files to be installed
-howto_swiginclude_headers = \
+aqhowto_swiginclude_headers = \
howto_square_ff.i \
howto_square2_ff.i
+EXTRA_DIST = $(aqhowto_swiginclude_headers)
+
+PYTHON_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(subst .i,.py,$(HFILE)))
+swig_built_sources += $(PYTHON_GEN)
endif
+
+if GUILE
+GUILE_GEN = $(foreach HFILE,$(TOP_SWIG_IFILES), $(patsubst %.i,gnuradio/%.scm,$(HFILE)))
+swig_built_sources += $(GUILE_GEN)
+endif
+
+# Do not distribute the output of SWIG
+no_dist_files = $(swig_built_sources)
+
diff --git a/gr-howto-write-a-block/swig/Makefile.swig.gen b/gr-howto-write-a-block/swig/Makefile.swig.gen
index 6c6e66290..72d8a09aa 100644
--- a/gr-howto-write-a-block/swig/Makefile.swig.gen
+++ b/gr-howto-write-a-block/swig/Makefile.swig.gen
@@ -25,16 +25,28 @@
## Default install locations for these files:
##
## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/howto
+## ${prefix}/lib/python${python_version}/site-packages/[category]/howto
## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/howto
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/howto
##
## The following can be overloaded to change the install location, but
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-howto_pythondir = $(pythondir)/howto
-howto_pylibdir = $(pyexecdir)/howto
+howto_pythondir_category ?= gnuradio/howto
+howto_pylibdir_category ?= $(howto_pythondir_category)
+howto_pythondir = $(pythondir)/$(howto_pythondir_category)
+howto_pylibdir = $(pyexecdir)/$(howto_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+howto_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/howto
+# FIXME: determince whether these should be installed with gnuradio.
+howto_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
@@ -55,23 +67,10 @@ howto_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/howto-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += howto_swig.py howto_swig.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -81,177 +80,54 @@ howto_swiginclude_HEADERS = \
$(howto_swiginclude_headers)
howto_pylib_LTLIBRARIES = \
- _howto_swig.la
+ _howto.la
-_howto_swig_la_SOURCES = \
- howto_swig.cc \
+_howto_la_SOURCES = \
+ python/howto.cc \
$(howto_la_swig_sources)
-_howto_swig_la_LIBADD = \
+_howto_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
$(howto_la_swig_libadd)
-_howto_swig_la_LDFLAGS = \
+_howto_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
$(howto_la_swig_ldflags)
-_howto_swig_la_CXXFLAGS = \
+_howto_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(howto_la_swig_cxxflags)
howto_python_PYTHON = \
- howto_swig.py \
+ howto.py \
$(howto_python)
-## Entry rule for running SWIG
+python/howto.cc: howto.py
+howto.py: howto.i
-howto.h howto_swig.py howto_swig.cc: howto.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/howto-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/howto-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/howto-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/howto-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/howto-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/howto-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/howto-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/howto-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/howto.d
+# end of PYTHON
-$(DEPDIR)/howto-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(howto_swig_args) \
- -MD -MF $(DEPDIR)/howto.Std \
- -module howto_swig -o howto_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/howto.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/howto.Std \
- > $(DEPDIR)/howto.Sd; \
- $(RM) $(DEPDIR)/howto.Std; \
- $(MV) $(DEPDIR)/howto.Sd $(DEPDIR)/howto.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/howto.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/howto.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/howto.Std $(DEPDIR)/howto.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/howto.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/howto.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/howto.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/howto.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/howto-generate-stamp
+if GUILE
+howto_scmlib_LTLIBRARIES = libguile-howto.la
+libguile_howto_la_SOURCES = \
+ guile/howto.cc \
+ $(howto_la_swig_sources)
+nobase_howto_scm_DATA = gnuradio/howto.scm gnuradio/howto-primitive.scm
+
+libguile_howto_la_LIBADD = $(_howto_la_LIBADD)
+libguile_howto_la_LDFLAGS = $(_howto_la_LDFLAGS)
+libguile_howto_la_CXXFLAGS = $(_howto_la_CXXFLAGS)
+
+guile/howto.cc: gnuradio/howto.scm
+gnuradio/howto.scm: howto.i
+gnuradio/howto-primitive.scm: gnuradio/howto.scm
+
+# Include the guile dependencies for this file
+-include guile/howto.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/howto.d@am__quote@
diff --git a/gr-howto-write-a-block/swig/howto.i b/gr-howto-write-a-block/swig/howto.i
index 8dc502010..9a37ea228 100644
--- a/gr-howto-write-a-block/swig/howto.i
+++ b/gr-howto-write-a-block/swig/howto.i
@@ -9,3 +9,13 @@
%include "howto_square_ff.i"
%include "howto_square2_ff.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-howto" "scm_init_gnuradio_howto_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-msdd6000/src/Makefile.am b/gr-msdd6000/src/Makefile.am
index f6dbd2fb8..3549747b4 100644
--- a/gr-msdd6000/src/Makefile.am
+++ b/gr-msdd6000/src/Makefile.am
@@ -42,9 +42,8 @@ libgnuradio_msdd6000_la_SOURCES = \
msdd_source_simple.cc \
msdd6000.cc
-
libgnuradio_msdd6000_rs_la_SOURCES = \
- msdd_rs_source_simple.cc \
+ msdd_rs_source_simple.cc \
msdd6000_rs.cc
libgnuradio_msdd6000_la_LIBADD = \
diff --git a/gr-msdd6000/src/Makefile.swig.gen b/gr-msdd6000/src/Makefile.swig.gen
index ced3979f7..c76587567 100644
--- a/gr-msdd6000/src/Makefile.swig.gen
+++ b/gr-msdd6000/src/Makefile.swig.gen
@@ -33,21 +33,24 @@
## this has to be done in the including Makefile.am -before-
## Makefile.swig is included.
-
msdd_pythondir_category ?= gnuradio/msdd
msdd_pylibdir_category ?= $(msdd_pythondir_category)
msdd_pythondir = $(pythondir)/$(msdd_pythondir_category)
msdd_pylibdir = $(pyexecdir)/$(msdd_pylibdir_category)
-msdd_rs_pythondir_category ?= gnuradio/msdd_rs
-msdd_rs_pylibdir_category ?= $(msdd_rs_pythondir_category)
-msdd_rs_pythondir = $(pythondir)/$(msdd_rs_pythondir_category)
-msdd_rs_pylibdir = $(pyexecdir)/$(msdd_rs_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+msdd_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/msdd
+# FIXME: determince whether these should be installed with gnuradio.
+msdd_scmdir = $(guiledir)
## SWIG headers are always installed into the same directory.
msdd_swigincludedir = $(swigincludedir)
-msdd_rs_swigincludedir = $(swigincludedir)
## This is a template file for a "generated" Makefile addition (in
## this case, "Makefile.swig.gen"). By including the top-level
@@ -64,381 +67,200 @@ msdd_rs_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/msdd-generate-*
-STAMPS += $(DEPDIR)/msdd_rs-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += msdd.py msdd_rs.py msdd.cc msdd_rs.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
msdd_swiginclude_HEADERS = \
- msdd.i \
- msdd_rs.i \
+ msdd.i \
$(msdd_swiginclude_headers)
msdd_pylib_LTLIBRARIES = \
_msdd.la
-msdd_rs_pylib_LTLIBRARIES = \
- _msdd_rs.la
-
_msdd_la_SOURCES = \
- msdd.cc \
+ python/msdd.cc \
$(msdd_la_swig_sources)
-_msdd_rs_la_SOURCES = \
- msdd_rs.cc \
- $(msdd_la_swig_sources)
-
-
_msdd_la_LIBADD = \
$(STD_SWIG_LA_LIB_ADD) \
$(msdd_la_swig_libadd)
-_msdd_rs_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(msdd_rs_la_swig_libadd)
-
_msdd_la_LDFLAGS = \
$(STD_SWIG_LA_LD_FLAGS) \
$(msdd_la_swig_ldflags)
_msdd_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(msdd_la_swig_cxxflags)
-_msdd_rs_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(msdd_rs_la_swig_ldflags)
-
-_msdd_rs_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- $(msdd_rs_la_swig_cxxflags)
-
msdd_python_PYTHON = \
- msdd.py \
+ msdd.py \
$(msdd_python)
-msdd_rs_python_PYTHON = \
- msdd_rs.py \
- $(msdd_rs_python)
+python/msdd.cc: msdd.py
+msdd.py: msdd.i
-## Entry rule for running SWIG
+# Include the python dependencies for this file
+-include python/msdd.d
+# end of PYTHON
-msdd.h msdd.py msdd.cc: msdd.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/msdd-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/msdd-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/msdd-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/msdd-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/msdd-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/msdd-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/msdd-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/msdd-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/msdd-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(msdd_swig_args) \
- -MD -MF $(DEPDIR)/msdd.Std \
- -module msdd -o msdd.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/msdd.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/msdd.Std \
- > $(DEPDIR)/msdd.Sd; \
- $(RM) $(DEPDIR)/msdd.Std; \
- $(MV) $(DEPDIR)/msdd.Sd $(DEPDIR)/msdd.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/msdd.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/msdd.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/msdd.Std $(DEPDIR)/msdd.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/msdd.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/msdd.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/msdd.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/msdd.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/msdd-generate-stamp
+if GUILE
+msdd_scmlib_LTLIBRARIES = libguile-msdd.la
+libguile_msdd_la_SOURCES = \
+ guile/msdd.cc \
+ $(msdd_la_swig_sources)
+nobase_msdd_scm_DATA = gnuradio/msdd.scm gnuradio/msdd-primitive.scm
+libguile_msdd_la_LIBADD = $(_msdd_la_LIBADD)
+libguile_msdd_la_LDFLAGS = $(_msdd_la_LDFLAGS)
+libguile_msdd_la_CXXFLAGS = $(_msdd_la_CXXFLAGS)
+guile/msdd.cc: gnuradio/msdd.scm
+gnuradio/msdd.scm: msdd.i
+gnuradio/msdd-primitive.scm: gnuradio/msdd.scm
+# Include the guile dependencies for this file
+-include guile/msdd.d
+endif # end of GUILE
-msdd_rs.h msdd_rs.py msdd_rs.cc: msdd_rs.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/msdd-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/msdd_rs-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/msdd_rs-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/msdd_rs-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/msdd_rs-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/msdd_rs-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/msdd_rs-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/msdd_rs-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/msdd_rs-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(msdd_rs_swig_args) \
- -MD -MF $(DEPDIR)/msdd_rs.Std \
- -module msdd_rs -o msdd_rs.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/msdd_rs.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/msdd_rs.Std \
- > $(DEPDIR)/msdd_rs.Sd; \
- $(RM) $(DEPDIR)/msdd_rs.Std; \
- $(MV) $(DEPDIR)/msdd_rs.Sd $(DEPDIR)/msdd_rs.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/msdd_rs.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/msdd_rs.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/msdd_rs.Std $(DEPDIR)/msdd_rs.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/msdd_rs.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/msdd_rs.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/msdd_rs.d
-##
-## (5) remove the SWIG-generated file
+# -*- Makefile -*-
+#
+# Copyright 2009 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.
+#
+
+# Makefile.swig.gen for msdd_rs.i
+
+## Default install locations for these files:
##
- $(RM) $(DEPDIR)/msdd_rs.Std
+## Default location for the Python directory is:
+## ${prefix}/lib/python${python_version}/site-packages/[category]/msdd_rs
+## Default location for the Python exec directory is:
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/msdd_rs
##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
+## The following can be overloaded to change the install location, but
+## this has to be done in the including Makefile.am -before-
+## Makefile.swig is included.
+
+msdd_rs_pythondir_category ?= gnuradio/msdd_rs
+msdd_rs_pylibdir_category ?= $(msdd_rs_pythondir_category)
+msdd_rs_pythondir = $(pythondir)/$(msdd_rs_pythondir_category)
+msdd_rs_pylibdir = $(pyexecdir)/$(msdd_rs_pylibdir_category)
+
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+msdd_rs_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/msdd_rs
+# FIXME: determince whether these should be installed with gnuradio.
+msdd_rs_scmdir = $(guiledir)
+
+## SWIG headers are always installed into the same directory.
+
+msdd_rs_swigincludedir = $(swigincludedir)
+
+## This is a template file for a "generated" Makefile addition (in
+## this case, "Makefile.swig.gen"). By including the top-level
+## Makefile.swig, this file will be used to generate the SWIG
+## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
+## SWIG .i files to generated wrappings for; there can be more than 1
+## so long as the names are unique (no sorting is done on the
+## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
+## file will generate .cc, .py, and possibly .h files -- meaning that
+## all of these files will have the same base name (that provided for
+## the SWIG .i file).
##
- touch $(DEPDIR)/msdd_rs-generate-stamp
+## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
+## right thing. For more info, see <
+## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
+
+## Other cleaned files: dependency files generated by SWIG or this Makefile
+
+MOSTLYCLEANFILES += $(DEPDIR)/*.S*
+
+## Various SWIG variables. These can be overloaded in the including
+## Makefile.am by setting the variable value there, then including
+## Makefile.swig .
+
+msdd_rs_swiginclude_HEADERS = \
+ msdd_rs.i \
+ $(msdd_rs_swiginclude_headers)
+
+msdd_rs_pylib_LTLIBRARIES = \
+ _msdd_rs.la
+
+_msdd_rs_la_SOURCES = \
+ python/msdd_rs.cc \
+ $(msdd_rs_la_swig_sources)
+
+_msdd_rs_la_LIBADD = \
+ $(STD_SWIG_LA_LIB_ADD) \
+ $(msdd_rs_la_swig_libadd)
+
+_msdd_rs_la_LDFLAGS = \
+ $(STD_SWIG_LA_LD_FLAGS) \
+ $(msdd_rs_la_swig_ldflags)
+
+_msdd_rs_la_CXXFLAGS = \
+ $(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
+ $(msdd_rs_la_swig_cxxflags)
+
+msdd_rs_python_PYTHON = \
+ msdd_rs.py \
+ $(msdd_rs_python)
+
+python/msdd_rs.cc: msdd_rs.py
+msdd_rs.py: msdd_rs.i
+
+# Include the python dependencies for this file
+-include python/msdd_rs.d
+# end of PYTHON
+
+if GUILE
+msdd_rs_scmlib_LTLIBRARIES = libguile-msdd_rs.la
+libguile_msdd_rs_la_SOURCES = \
+ guile/msdd_rs.cc \
+ $(msdd_rs_la_swig_sources)
+nobase_msdd_rs_scm_DATA = gnuradio/msdd_rs.scm gnuradio/msdd_rs-primitive.scm
+
+libguile_msdd_rs_la_LIBADD = $(_msdd_rs_la_LIBADD)
+libguile_msdd_rs_la_LDFLAGS = $(_msdd_rs_la_LDFLAGS)
+libguile_msdd_rs_la_CXXFLAGS = $(_msdd_rs_la_CXXFLAGS)
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+guile/msdd_rs.cc: gnuradio/msdd_rs.scm
+gnuradio/msdd_rs.scm: msdd_rs.i
+gnuradio/msdd_rs-primitive.scm: gnuradio/msdd_rs.scm
+# Include the guile dependencies for this file
+-include guile/msdd_rs.d
-@am__include@ @am__quote@./$(DEPDIR)/msdd.d@am__quote@
-@am__include@ @am__quote@./$(DEPDIR)/msdd_rs.d@am__quote@
+endif # end of GUILE
diff --git a/gr-msdd6000/src/msdd_rs.i b/gr-msdd6000/src/msdd_rs.i
index 16a1bec1a..462863b24 100644
--- a/gr-msdd6000/src/msdd_rs.i
+++ b/gr-msdd6000/src/msdd_rs.i
@@ -91,3 +91,13 @@ class msdd_rs_source_simple : public gr_sync_block {
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-msdd_rs" "scm_init_gnuradio_msdd_rs_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-noaa/lib/Makefile.am b/gr-noaa/lib/Makefile.am
index fdc1476cd..ba660a398 100644
--- a/gr-noaa/lib/Makefile.am
+++ b/gr-noaa/lib/Makefile.am
@@ -44,4 +44,4 @@ libgnuradio_noaa_la_LDFLAGS = $(NO_UNDEFINED) $(LTVERSIONFLAGS)
grinclude_HEADERS = \
noaa_hrpt_decoder.h \
noaa_hrpt_deframer.h \
- noaa_hrpt_pll_cf.h \ No newline at end of file
+ noaa_hrpt_pll_cf.h
diff --git a/gr-noaa/swig/Makefile.swig.gen b/gr-noaa/swig/Makefile.swig.gen
index 3d7102fe3..17638a7b1 100644
--- a/gr-noaa/swig/Makefile.swig.gen
+++ b/gr-noaa/swig/Makefile.swig.gen
@@ -38,6 +38,16 @@ noaa_swig_pylibdir_category ?= $(noaa_swig_pythondir_category)
noaa_swig_pythondir = $(pythondir)/$(noaa_swig_pythondir_category)
noaa_swig_pylibdir = $(pyexecdir)/$(noaa_swig_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+noaa_swig_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/noaa_swig
+# FIXME: determince whether these should be installed with gnuradio.
+noaa_swig_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
noaa_swig_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ noaa_swig_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/noaa_swig-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += noaa_swig.py noaa_swig.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ noaa_swig_pylib_LTLIBRARIES = \
_noaa_swig.la
_noaa_swig_la_SOURCES = \
- noaa_swig.cc \
+ python/noaa_swig.cc \
$(noaa_swig_la_swig_sources)
_noaa_swig_la_LIBADD = \
@@ -99,161 +96,38 @@ _noaa_swig_la_LDFLAGS = \
_noaa_swig_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(noaa_swig_la_swig_cxxflags)
noaa_swig_python_PYTHON = \
noaa_swig.py \
$(noaa_swig_python)
-## Entry rule for running SWIG
+python/noaa_swig.cc: noaa_swig.py
+noaa_swig.py: noaa_swig.i
-noaa_swig.h noaa_swig.py noaa_swig.cc: noaa_swig.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/noaa_swig-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/noaa_swig-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/noaa_swig-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/noaa_swig-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/noaa_swig-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/noaa_swig-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/noaa_swig-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/noaa_swig-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/noaa_swig.d
+# end of PYTHON
-$(DEPDIR)/noaa_swig-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(noaa_swig_swig_args) \
- -MD -MF $(DEPDIR)/noaa_swig.Std \
- -module noaa_swig -o noaa_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/noaa_swig.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/noaa_swig.Std \
- > $(DEPDIR)/noaa_swig.Sd; \
- $(RM) $(DEPDIR)/noaa_swig.Std; \
- $(MV) $(DEPDIR)/noaa_swig.Sd $(DEPDIR)/noaa_swig.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/noaa_swig.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/noaa_swig.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/noaa_swig.Std $(DEPDIR)/noaa_swig.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/noaa_swig.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/noaa_swig.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/noaa_swig.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/noaa_swig.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/noaa_swig-generate-stamp
+if GUILE
+noaa_swig_scmlib_LTLIBRARIES = libguile-noaa_swig.la
+libguile_noaa_swig_la_SOURCES = \
+ guile/noaa_swig.cc \
+ $(noaa_swig_la_swig_sources)
+nobase_noaa_swig_scm_DATA = gnuradio/noaa_swig.scm gnuradio/noaa_swig-primitive.scm
+
+libguile_noaa_swig_la_LIBADD = $(_noaa_swig_la_LIBADD)
+libguile_noaa_swig_la_LDFLAGS = $(_noaa_swig_la_LDFLAGS)
+libguile_noaa_swig_la_CXXFLAGS = $(_noaa_swig_la_CXXFLAGS)
+
+guile/noaa_swig.cc: gnuradio/noaa_swig.scm
+gnuradio/noaa_swig.scm: noaa_swig.i
+gnuradio/noaa_swig-primitive.scm: gnuradio/noaa_swig.scm
+
+# Include the guile dependencies for this file
+-include guile/noaa_swig.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/noaa_swig.d@am__quote@
diff --git a/gr-noaa/swig/noaa_swig.i b/gr-noaa/swig/noaa_swig.i
index 8fe814a67..ea6c3d362 100644
--- a/gr-noaa/swig/noaa_swig.i
+++ b/gr-noaa/swig/noaa_swig.i
@@ -32,3 +32,12 @@
%include "noaa_hrpt_deframer.i"
%include "noaa_hrpt_pll_cf.i"
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-noaa_swig" "scm_init_gnuradio_noaa_swig_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-pager/lib/Makefile.swig.gen b/gr-pager/lib/Makefile.swig.gen
deleted file mode 100644
index 5cfbc66be..000000000
--- a/gr-pager/lib/Makefile.swig.gen
+++ /dev/null
@@ -1,259 +0,0 @@
-# -*- Makefile -*-
-#
-# Copyright 2009 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.
-#
-
-# Makefile.swig.gen for pager_swig.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/pager_swig
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/pager_swig
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-pager_swig_pythondir_category ?= gnuradio/pager_swig
-pager_swig_pylibdir_category ?= $(pager_swig_pythondir_category)
-pager_swig_pythondir = $(pythondir)/$(pager_swig_pythondir_category)
-pager_swig_pylibdir = $(pyexecdir)/$(pager_swig_pylibdir_category)
-
-## SWIG headers are always installed into the same directory.
-
-pager_swig_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/pager_swig-generate-*
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += pager_swig.py pager_swig.cc
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-pager_swig_swiginclude_HEADERS = \
- pager_swig.i \
- $(pager_swig_swiginclude_headers)
-
-pager_swig_pylib_LTLIBRARIES = \
- _pager_swig.la
-
-_pager_swig_la_SOURCES = \
- pager_swig.cc \
- $(pager_swig_la_swig_sources)
-
-_pager_swig_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(pager_swig_la_swig_libadd)
-
-_pager_swig_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(pager_swig_la_swig_ldflags)
-
-_pager_swig_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- $(pager_swig_la_swig_cxxflags)
-
-pager_swig_python_PYTHON = \
- pager_swig.py \
- $(pager_swig_python)
-
-## Entry rule for running SWIG
-
-pager_swig.h pager_swig.py pager_swig.cc: pager_swig.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/pager_swig-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/pager_swig-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/pager_swig-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/pager_swig-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/pager_swig-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/pager_swig-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/pager_swig-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/pager_swig-generate-stamp; \
- exit $$?; \
- fi;
-
-$(DEPDIR)/pager_swig-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(pager_swig_swig_args) \
- -MD -MF $(DEPDIR)/pager_swig.Std \
- -module pager_swig -o pager_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/pager_swig.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/pager_swig.Std \
- > $(DEPDIR)/pager_swig.Sd; \
- $(RM) $(DEPDIR)/pager_swig.Std; \
- $(MV) $(DEPDIR)/pager_swig.Sd $(DEPDIR)/pager_swig.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/pager_swig.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/pager_swig.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/pager_swig.Std $(DEPDIR)/pager_swig.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/pager_swig.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/pager_swig.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/pager_swig.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/pager_swig.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/pager_swig-generate-stamp
-
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
-
-@am__include@ @am__quote@./$(DEPDIR)/pager_swig.d@am__quote@
-
diff --git a/gr-pager/swig/Makefile.swig.gen b/gr-pager/swig/Makefile.swig.gen
index 5cfbc66be..d62212b17 100644
--- a/gr-pager/swig/Makefile.swig.gen
+++ b/gr-pager/swig/Makefile.swig.gen
@@ -38,6 +38,16 @@ pager_swig_pylibdir_category ?= $(pager_swig_pythondir_category)
pager_swig_pythondir = $(pythondir)/$(pager_swig_pythondir_category)
pager_swig_pylibdir = $(pyexecdir)/$(pager_swig_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+pager_swig_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/pager_swig
+# FIXME: determince whether these should be installed with gnuradio.
+pager_swig_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
pager_swig_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ pager_swig_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/pager_swig-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += pager_swig.py pager_swig.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ pager_swig_pylib_LTLIBRARIES = \
_pager_swig.la
_pager_swig_la_SOURCES = \
- pager_swig.cc \
+ python/pager_swig.cc \
$(pager_swig_la_swig_sources)
_pager_swig_la_LIBADD = \
@@ -99,161 +96,38 @@ _pager_swig_la_LDFLAGS = \
_pager_swig_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(pager_swig_la_swig_cxxflags)
pager_swig_python_PYTHON = \
pager_swig.py \
$(pager_swig_python)
-## Entry rule for running SWIG
+python/pager_swig.cc: pager_swig.py
+pager_swig.py: pager_swig.i
-pager_swig.h pager_swig.py pager_swig.cc: pager_swig.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/pager_swig-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/pager_swig-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/pager_swig-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/pager_swig-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/pager_swig-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/pager_swig-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/pager_swig-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/pager_swig-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/pager_swig.d
+# end of PYTHON
-$(DEPDIR)/pager_swig-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(pager_swig_swig_args) \
- -MD -MF $(DEPDIR)/pager_swig.Std \
- -module pager_swig -o pager_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/pager_swig.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/pager_swig.Std \
- > $(DEPDIR)/pager_swig.Sd; \
- $(RM) $(DEPDIR)/pager_swig.Std; \
- $(MV) $(DEPDIR)/pager_swig.Sd $(DEPDIR)/pager_swig.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/pager_swig.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/pager_swig.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/pager_swig.Std $(DEPDIR)/pager_swig.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/pager_swig.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/pager_swig.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/pager_swig.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/pager_swig.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/pager_swig-generate-stamp
+if GUILE
+pager_swig_scmlib_LTLIBRARIES = libguile-pager_swig.la
+libguile_pager_swig_la_SOURCES = \
+ guile/pager_swig.cc \
+ $(pager_swig_la_swig_sources)
+nobase_pager_swig_scm_DATA = gnuradio/pager_swig.scm gnuradio/pager_swig-primitive.scm
+
+libguile_pager_swig_la_LIBADD = $(_pager_swig_la_LIBADD)
+libguile_pager_swig_la_LDFLAGS = $(_pager_swig_la_LDFLAGS)
+libguile_pager_swig_la_CXXFLAGS = $(_pager_swig_la_CXXFLAGS)
+
+guile/pager_swig.cc: gnuradio/pager_swig.scm
+gnuradio/pager_swig.scm: pager_swig.i
+gnuradio/pager_swig-primitive.scm: gnuradio/pager_swig.scm
+
+# Include the guile dependencies for this file
+-include guile/pager_swig.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/pager_swig.d@am__quote@
diff --git a/gr-pager/swig/pager_swig.i b/gr-pager/swig/pager_swig.i
index 66d6de7d8..5561c26fc 100644
--- a/gr-pager/swig/pager_swig.i
+++ b/gr-pager/swig/pager_swig.i
@@ -34,3 +34,13 @@
%include "pager_flex_sync.i"
%include "pager_flex_deinterleave.i"
%include "pager_flex_parse.i"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-pager_swig" "scm_init_gnuradio_pager_swig_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-qtgui/src/lib/Makefile.swig.gen b/gr-qtgui/src/lib/Makefile.swig.gen
index f40f0d881..b783e9223 100644
--- a/gr-qtgui/src/lib/Makefile.swig.gen
+++ b/gr-qtgui/src/lib/Makefile.swig.gen
@@ -38,6 +38,16 @@ qtgui_pylibdir_category ?= $(qtgui_pythondir_category)
qtgui_pythondir = $(pythondir)/$(qtgui_pythondir_category)
qtgui_pylibdir = $(pyexecdir)/$(qtgui_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+qtgui_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/qtgui
+# FIXME: determince whether these should be installed with gnuradio.
+qtgui_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
qtgui_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ qtgui_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/qtgui-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += qtgui.py qtgui.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ qtgui_pylib_LTLIBRARIES = \
_qtgui.la
_qtgui_la_SOURCES = \
- qtgui.cc \
+ python/qtgui.cc \
$(qtgui_la_swig_sources)
_qtgui_la_LIBADD = \
@@ -99,161 +96,38 @@ _qtgui_la_LDFLAGS = \
_qtgui_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(qtgui_la_swig_cxxflags)
qtgui_python_PYTHON = \
qtgui.py \
$(qtgui_python)
-## Entry rule for running SWIG
+python/qtgui.cc: qtgui.py
+qtgui.py: qtgui.i
-qtgui.h qtgui.py qtgui.cc: qtgui.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/qtgui-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/qtgui-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/qtgui-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/qtgui-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/qtgui-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/qtgui-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/qtgui-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/qtgui-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/qtgui.d
+# end of PYTHON
-$(DEPDIR)/qtgui-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(qtgui_swig_args) \
- -MD -MF $(DEPDIR)/qtgui.Std \
- -module qtgui -o qtgui.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/qtgui.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/qtgui.Std \
- > $(DEPDIR)/qtgui.Sd; \
- $(RM) $(DEPDIR)/qtgui.Std; \
- $(MV) $(DEPDIR)/qtgui.Sd $(DEPDIR)/qtgui.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/qtgui.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/qtgui.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/qtgui.Std $(DEPDIR)/qtgui.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/qtgui.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/qtgui.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/qtgui.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/qtgui.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/qtgui-generate-stamp
+if GUILE
+qtgui_scmlib_LTLIBRARIES = libguile-qtgui.la
+libguile_qtgui_la_SOURCES = \
+ guile/qtgui.cc \
+ $(qtgui_la_swig_sources)
+nobase_qtgui_scm_DATA = gnuradio/qtgui.scm gnuradio/qtgui-primitive.scm
+
+libguile_qtgui_la_LIBADD = $(_qtgui_la_LIBADD)
+libguile_qtgui_la_LDFLAGS = $(_qtgui_la_LDFLAGS)
+libguile_qtgui_la_CXXFLAGS = $(_qtgui_la_CXXFLAGS)
+
+guile/qtgui.cc: gnuradio/qtgui.scm
+gnuradio/qtgui.scm: qtgui.i
+gnuradio/qtgui-primitive.scm: gnuradio/qtgui.scm
+
+# Include the guile dependencies for this file
+-include guile/qtgui.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/qtgui.d@am__quote@
diff --git a/gr-qtgui/src/lib/qtgui.i b/gr-qtgui/src/lib/qtgui.i
index 1f50bf43c..65ff948d0 100644
--- a/gr-qtgui/src/lib/qtgui.i
+++ b/gr-qtgui/src/lib/qtgui.i
@@ -120,3 +120,12 @@ public:
void set_constellation_pen_size(int size);
};
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-qtgui" "scm_init_gnuradio_qtgui_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-radio-astronomy/src/lib/Makefile.swig.gen b/gr-radio-astronomy/src/lib/Makefile.swig.gen
index 26f2373f5..9ca01af90 100644
--- a/gr-radio-astronomy/src/lib/Makefile.swig.gen
+++ b/gr-radio-astronomy/src/lib/Makefile.swig.gen
@@ -38,6 +38,16 @@ ra_pylibdir_category ?= $(ra_pythondir_category)
ra_pythondir = $(pythondir)/$(ra_pythondir_category)
ra_pylibdir = $(pyexecdir)/$(ra_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+ra_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/ra
+# FIXME: determince whether these should be installed with gnuradio.
+ra_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
ra_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ ra_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/ra-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += ra.py ra.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ ra_pylib_LTLIBRARIES = \
_ra.la
_ra_la_SOURCES = \
- ra.cc \
+ python/ra.cc \
$(ra_la_swig_sources)
_ra_la_LIBADD = \
@@ -99,161 +96,38 @@ _ra_la_LDFLAGS = \
_ra_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(ra_la_swig_cxxflags)
ra_python_PYTHON = \
ra.py \
$(ra_python)
-## Entry rule for running SWIG
+python/ra.cc: ra.py
+ra.py: ra.i
-ra.h ra.py ra.cc: ra.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/ra-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/ra-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/ra-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/ra-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/ra-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/ra-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/ra-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/ra-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/ra.d
+# end of PYTHON
-$(DEPDIR)/ra-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(ra_swig_args) \
- -MD -MF $(DEPDIR)/ra.Std \
- -module ra -o ra.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/ra.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/ra.Std \
- > $(DEPDIR)/ra.Sd; \
- $(RM) $(DEPDIR)/ra.Std; \
- $(MV) $(DEPDIR)/ra.Sd $(DEPDIR)/ra.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/ra.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/ra.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/ra.Std $(DEPDIR)/ra.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/ra.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/ra.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/ra.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/ra.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/ra-generate-stamp
+if GUILE
+ra_scmlib_LTLIBRARIES = libguile-ra.la
+libguile_ra_la_SOURCES = \
+ guile/ra.cc \
+ $(ra_la_swig_sources)
+nobase_ra_scm_DATA = gnuradio/ra.scm gnuradio/ra-primitive.scm
+
+libguile_ra_la_LIBADD = $(_ra_la_LIBADD)
+libguile_ra_la_LDFLAGS = $(_ra_la_LDFLAGS)
+libguile_ra_la_CXXFLAGS = $(_ra_la_CXXFLAGS)
+
+guile/ra.cc: gnuradio/ra.scm
+gnuradio/ra.scm: ra.i
+gnuradio/ra-primitive.scm: gnuradio/ra.scm
+
+# Include the guile dependencies for this file
+-include guile/ra.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/ra.d@am__quote@
diff --git a/gr-radio-astronomy/src/lib/ra.i b/gr-radio-astronomy/src/lib/ra.i
index e258b8769..3378eae61 100644
--- a/gr-radio-astronomy/src/lib/ra.i
+++ b/gr-radio-astronomy/src/lib/ra.i
@@ -55,3 +55,13 @@
// private:
// ra_square2_ff ();
// };
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-ra" "scm_init_gnuradio_ra_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-trellis/src/lib/Makefile.swig.gen b/gr-trellis/src/lib/Makefile.swig.gen
index 1a9656b8f..45163f10a 100644
--- a/gr-trellis/src/lib/Makefile.swig.gen
+++ b/gr-trellis/src/lib/Makefile.swig.gen
@@ -38,6 +38,16 @@ trellis_pylibdir_category ?= $(trellis_pythondir_category)
trellis_pythondir = $(pythondir)/$(trellis_pythondir_category)
trellis_pylibdir = $(pyexecdir)/$(trellis_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+trellis_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/trellis
+# FIXME: determince whether these should be installed with gnuradio.
+trellis_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
trellis_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ trellis_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/trellis-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += trellis.py trellis.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ trellis_pylib_LTLIBRARIES = \
_trellis.la
_trellis_la_SOURCES = \
- trellis.cc \
+ python/trellis.cc \
$(trellis_la_swig_sources)
_trellis_la_LIBADD = \
@@ -99,161 +96,38 @@ _trellis_la_LDFLAGS = \
_trellis_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(trellis_la_swig_cxxflags)
trellis_python_PYTHON = \
trellis.py \
$(trellis_python)
-## Entry rule for running SWIG
+python/trellis.cc: trellis.py
+trellis.py: trellis.i
-trellis.h trellis.py trellis.cc: trellis.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/trellis-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/trellis-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/trellis-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/trellis-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/trellis-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/trellis-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/trellis-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/trellis-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/trellis.d
+# end of PYTHON
-$(DEPDIR)/trellis-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(trellis_swig_args) \
- -MD -MF $(DEPDIR)/trellis.Std \
- -module trellis -o trellis.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/trellis.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/trellis.Std \
- > $(DEPDIR)/trellis.Sd; \
- $(RM) $(DEPDIR)/trellis.Std; \
- $(MV) $(DEPDIR)/trellis.Sd $(DEPDIR)/trellis.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/trellis.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/trellis.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/trellis.Std $(DEPDIR)/trellis.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/trellis.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/trellis.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/trellis.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/trellis.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/trellis-generate-stamp
+if GUILE
+trellis_scmlib_LTLIBRARIES = libguile-trellis.la
+libguile_trellis_la_SOURCES = \
+ guile/trellis.cc \
+ $(trellis_la_swig_sources)
+nobase_trellis_scm_DATA = gnuradio/trellis.scm gnuradio/trellis-primitive.scm
+
+libguile_trellis_la_LIBADD = $(_trellis_la_LIBADD)
+libguile_trellis_la_LDFLAGS = $(_trellis_la_LDFLAGS)
+libguile_trellis_la_CXXFLAGS = $(_trellis_la_CXXFLAGS)
+
+guile/trellis.cc: gnuradio/trellis.scm
+gnuradio/trellis.scm: trellis.i
+gnuradio/trellis-primitive.scm: gnuradio/trellis.scm
+
+# Include the guile dependencies for this file
+-include guile/trellis.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/trellis.d@am__quote@
diff --git a/gr-trellis/src/lib/trellis.i b/gr-trellis/src/lib/trellis.i
index ed1fe29ca..63b4c2659 100644
--- a/gr-trellis/src/lib/trellis.i
+++ b/gr-trellis/src/lib/trellis.i
@@ -44,3 +44,12 @@
%include "trellis_generated.i"
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-trellis" "scm_init_gnuradio_trellis_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-uhd/swig/Makefile.am b/gr-uhd/swig/Makefile.am
index 183e6b587..744dd8efe 100644
--- a/gr-uhd/swig/Makefile.am
+++ b/gr-uhd/swig/Makefile.am
@@ -56,8 +56,7 @@ uhd_swig_swiginclude_headers =
include $(top_srcdir)/Makefile.swig
-# FIXME better way to set this?
-STD_SWIG_PYTHON_ARGS += \
+uhd_swig_swig_args = \
$(UHD_CFLAGS) \
-I$(top_srcdir)/gr-uhd/lib
diff --git a/gr-uhd/swig/Makefile.swig.gen b/gr-uhd/swig/Makefile.swig.gen
index 3804461a4..cf7351fe2 100644
--- a/gr-uhd/swig/Makefile.swig.gen
+++ b/gr-uhd/swig/Makefile.swig.gen
@@ -38,6 +38,16 @@ uhd_swig_pylibdir_category ?= $(uhd_swig_pythondir_category)
uhd_swig_pythondir = $(pythondir)/$(uhd_swig_pythondir_category)
uhd_swig_pylibdir = $(pyexecdir)/$(uhd_swig_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+uhd_swig_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/uhd_swig
+# FIXME: determince whether these should be installed with gnuradio.
+uhd_swig_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
uhd_swig_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ uhd_swig_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/uhd_swig-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += uhd_swig.py uhd_swig.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ uhd_swig_pylib_LTLIBRARIES = \
_uhd_swig.la
_uhd_swig_la_SOURCES = \
- uhd_swig.cc \
+ python/uhd_swig.cc \
$(uhd_swig_la_swig_sources)
_uhd_swig_la_LIBADD = \
@@ -99,161 +96,38 @@ _uhd_swig_la_LDFLAGS = \
_uhd_swig_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(uhd_swig_la_swig_cxxflags)
uhd_swig_python_PYTHON = \
uhd_swig.py \
$(uhd_swig_python)
-## Entry rule for running SWIG
+python/uhd_swig.cc: uhd_swig.py
+uhd_swig.py: uhd_swig.i
-uhd_swig.h uhd_swig.py uhd_swig.cc: uhd_swig.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/uhd_swig-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/uhd_swig-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/uhd_swig-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/uhd_swig-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/uhd_swig-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/uhd_swig-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/uhd_swig-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/uhd_swig-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/uhd_swig.d
+# end of PYTHON
-$(DEPDIR)/uhd_swig-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(uhd_swig_swig_args) \
- -MD -MF $(DEPDIR)/uhd_swig.Std \
- -module uhd_swig -o uhd_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/uhd_swig.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/uhd_swig.Std \
- > $(DEPDIR)/uhd_swig.Sd; \
- $(RM) $(DEPDIR)/uhd_swig.Std; \
- $(MV) $(DEPDIR)/uhd_swig.Sd $(DEPDIR)/uhd_swig.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/uhd_swig.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/uhd_swig.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/uhd_swig.Std $(DEPDIR)/uhd_swig.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/uhd_swig.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/uhd_swig.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/uhd_swig.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/uhd_swig.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/uhd_swig-generate-stamp
+if GUILE
+uhd_swig_scmlib_LTLIBRARIES = libguile-uhd_swig.la
+libguile_uhd_swig_la_SOURCES = \
+ guile/uhd_swig.cc \
+ $(uhd_swig_la_swig_sources)
+nobase_uhd_swig_scm_DATA = gnuradio/uhd_swig.scm gnuradio/uhd_swig-primitive.scm
+
+libguile_uhd_swig_la_LIBADD = $(_uhd_swig_la_LIBADD)
+libguile_uhd_swig_la_LDFLAGS = $(_uhd_swig_la_LDFLAGS)
+libguile_uhd_swig_la_CXXFLAGS = $(_uhd_swig_la_CXXFLAGS)
+
+guile/uhd_swig.cc: gnuradio/uhd_swig.scm
+gnuradio/uhd_swig.scm: uhd_swig.i
+gnuradio/uhd_swig-primitive.scm: gnuradio/uhd_swig.scm
+
+# Include the guile dependencies for this file
+-include guile/uhd_swig.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/uhd_swig.d@am__quote@
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
index 3c6773374..7344f7a72 100644
--- a/gr-uhd/swig/uhd_swig.i
+++ b/gr-uhd/swig/uhd_swig.i
@@ -42,8 +42,6 @@
// standard includes
////////////////////////////////////////////////////////////////////////
%include "gnuradio.i"
-%include "std_string.i"
-%include "std_vector.i"
namespace std {
%template(StringVector) vector<string>;
@@ -121,3 +119,13 @@ GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_sink)
static const size_t ALL_MBOARDS = uhd::usrp::multi_usrp::ALL_MBOARDS;
%}
static const size_t ALL_MBOARDS;
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-uhd_swig" "scm_init_gnuradio_uhd_swig_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-usrp/src/.gitignore b/gr-usrp/src/.gitignore
index 68abaf8aa..b1ea28d48 100644
--- a/gr-usrp/src/.gitignore
+++ b/gr-usrp/src/.gitignore
@@ -6,6 +6,9 @@
/*.lo
/usrp_swig.cc
/usrp_swig.py
+/usrp_swig.scm
+/usrp_swig_python.cc
+/usrp_swig_guile.cc
/run_tests
/usrp_dbids.py
/*.pyc
diff --git a/gr-usrp/src/Makefile.swig.gen b/gr-usrp/src/Makefile.swig.gen
index 9884b3d4f..1bb9e3bf4 100644
--- a/gr-usrp/src/Makefile.swig.gen
+++ b/gr-usrp/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ usrp_swig_pylibdir_category ?= $(usrp_swig_pythondir_category)
usrp_swig_pythondir = $(pythondir)/$(usrp_swig_pythondir_category)
usrp_swig_pylibdir = $(pyexecdir)/$(usrp_swig_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+usrp_swig_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/usrp_swig
+# FIXME: determince whether these should be installed with gnuradio.
+usrp_swig_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
usrp_swig_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ usrp_swig_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/usrp_swig-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += usrp_swig.py usrp_swig.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ usrp_swig_pylib_LTLIBRARIES = \
_usrp_swig.la
_usrp_swig_la_SOURCES = \
- usrp_swig.cc \
+ python/usrp_swig.cc \
$(usrp_swig_la_swig_sources)
_usrp_swig_la_LIBADD = \
@@ -99,161 +96,38 @@ _usrp_swig_la_LDFLAGS = \
_usrp_swig_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(usrp_swig_la_swig_cxxflags)
usrp_swig_python_PYTHON = \
usrp_swig.py \
$(usrp_swig_python)
-## Entry rule for running SWIG
+python/usrp_swig.cc: usrp_swig.py
+usrp_swig.py: usrp_swig.i
-usrp_swig.h usrp_swig.py usrp_swig.cc: usrp_swig.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/usrp_swig-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/usrp_swig-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/usrp_swig-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/usrp_swig-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/usrp_swig-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/usrp_swig-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/usrp_swig-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/usrp_swig-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/usrp_swig.d
+# end of PYTHON
-$(DEPDIR)/usrp_swig-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(usrp_swig_swig_args) \
- -MD -MF $(DEPDIR)/usrp_swig.Std \
- -module usrp_swig -o usrp_swig.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/usrp_swig.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/usrp_swig.Std \
- > $(DEPDIR)/usrp_swig.Sd; \
- $(RM) $(DEPDIR)/usrp_swig.Std; \
- $(MV) $(DEPDIR)/usrp_swig.Sd $(DEPDIR)/usrp_swig.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/usrp_swig.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/usrp_swig.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/usrp_swig.Std $(DEPDIR)/usrp_swig.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/usrp_swig.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/usrp_swig.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/usrp_swig.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/usrp_swig.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/usrp_swig-generate-stamp
+if GUILE
+usrp_swig_scmlib_LTLIBRARIES = libguile-usrp_swig.la
+libguile_usrp_swig_la_SOURCES = \
+ guile/usrp_swig.cc \
+ $(usrp_swig_la_swig_sources)
+nobase_usrp_swig_scm_DATA = gnuradio/usrp_swig.scm gnuradio/usrp_swig-primitive.scm
+
+libguile_usrp_swig_la_LIBADD = $(_usrp_swig_la_LIBADD)
+libguile_usrp_swig_la_LDFLAGS = $(_usrp_swig_la_LDFLAGS)
+libguile_usrp_swig_la_CXXFLAGS = $(_usrp_swig_la_CXXFLAGS)
+
+guile/usrp_swig.cc: gnuradio/usrp_swig.scm
+gnuradio/usrp_swig.scm: usrp_swig.i
+gnuradio/usrp_swig-primitive.scm: gnuradio/usrp_swig.scm
+
+# Include the guile dependencies for this file
+-include guile/usrp_swig.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/usrp_swig.d@am__quote@
diff --git a/gr-usrp/src/usrp_base.i b/gr-usrp/src/usrp_base.i
index d0ece1fb2..0fd62911f 100644
--- a/gr-usrp/src/usrp_base.i
+++ b/gr-usrp/src/usrp_base.i
@@ -24,6 +24,7 @@
#include "usrp_base.h"
%}
+%ignore usrp_base;
class usrp_base : public gr_sync_block
{
protected:
diff --git a/gr-usrp/src/usrp_swig.i b/gr-usrp/src/usrp_swig.i
index 2a47877c3..32f2cb41e 100644
--- a/gr-usrp/src/usrp_swig.i
+++ b/gr-usrp/src/usrp_swig.i
@@ -39,6 +39,7 @@
%include "usrp_sink_c.i"
%include "usrp_sink_s.i"
+#ifdef SWIGPYTHON
//---Allow a more Pythonic interface
%pythoncode %{
@@ -141,3 +142,15 @@ usrp_source_c_sptr.pick_rx_subdevice = __pick_rx_subdevice
usrp_source_s_sptr.pick_rx_subdevice = __pick_rx_subdevice
%}
+#endif
+
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-usrp_swig" "scm_init_gnuradio_usrp_swig_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-usrp2/src/.gitignore b/gr-usrp2/src/.gitignore
index 6f241fe83..321a8ae84 100644
--- a/gr-usrp2/src/.gitignore
+++ b/gr-usrp2/src/.gitignore
@@ -4,6 +4,7 @@
/.deps
/usrp2.py
/usrp2.cc
+/usrp2_python.cc
/run_tests
/test_gr_usrp2
/*.pyc
diff --git a/gr-usrp2/src/Makefile.swig.gen b/gr-usrp2/src/Makefile.swig.gen
index 24d9f17c0..469d43c04 100644
--- a/gr-usrp2/src/Makefile.swig.gen
+++ b/gr-usrp2/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ usrp2_pylibdir_category ?= $(usrp2_pythondir_category)
usrp2_pythondir = $(pythondir)/$(usrp2_pythondir_category)
usrp2_pylibdir = $(pyexecdir)/$(usrp2_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+usrp2_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/usrp2
+# FIXME: determince whether these should be installed with gnuradio.
+usrp2_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
usrp2_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ usrp2_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/usrp2-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += usrp2.py usrp2.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ usrp2_pylib_LTLIBRARIES = \
_usrp2.la
_usrp2_la_SOURCES = \
- usrp2.cc \
+ python/usrp2.cc \
$(usrp2_la_swig_sources)
_usrp2_la_LIBADD = \
@@ -99,161 +96,38 @@ _usrp2_la_LDFLAGS = \
_usrp2_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(usrp2_la_swig_cxxflags)
usrp2_python_PYTHON = \
usrp2.py \
$(usrp2_python)
-## Entry rule for running SWIG
+python/usrp2.cc: usrp2.py
+usrp2.py: usrp2.i
-usrp2.h usrp2.py usrp2.cc: usrp2.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/usrp2-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/usrp2-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/usrp2-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/usrp2-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/usrp2-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/usrp2-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/usrp2-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/usrp2-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/usrp2.d
+# end of PYTHON
-$(DEPDIR)/usrp2-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(usrp2_swig_args) \
- -MD -MF $(DEPDIR)/usrp2.Std \
- -module usrp2 -o usrp2.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/usrp2.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/usrp2.Std \
- > $(DEPDIR)/usrp2.Sd; \
- $(RM) $(DEPDIR)/usrp2.Std; \
- $(MV) $(DEPDIR)/usrp2.Sd $(DEPDIR)/usrp2.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/usrp2.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/usrp2.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/usrp2.Std $(DEPDIR)/usrp2.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/usrp2.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/usrp2.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/usrp2.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/usrp2.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/usrp2-generate-stamp
+if GUILE
+usrp2_scmlib_LTLIBRARIES = libguile-usrp2.la
+libguile_usrp2_la_SOURCES = \
+ guile/usrp2.cc \
+ $(usrp2_la_swig_sources)
+nobase_usrp2_scm_DATA = gnuradio/usrp2.scm gnuradio/usrp2-primitive.scm
+
+libguile_usrp2_la_LIBADD = $(_usrp2_la_LIBADD)
+libguile_usrp2_la_LDFLAGS = $(_usrp2_la_LDFLAGS)
+libguile_usrp2_la_CXXFLAGS = $(_usrp2_la_CXXFLAGS)
+
+guile/usrp2.cc: gnuradio/usrp2.scm
+gnuradio/usrp2.scm: usrp2.i
+gnuradio/usrp2-primitive.scm: gnuradio/usrp2.scm
+
+# Include the guile dependencies for this file
+-include guile/usrp2.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/usrp2.d@am__quote@
diff --git a/gr-usrp2/src/usrp2.i b/gr-usrp2/src/usrp2.i
index 2a79fad44..0555f086c 100644
--- a/gr-usrp2/src/usrp2.i
+++ b/gr-usrp2/src/usrp2.i
@@ -228,6 +228,7 @@ uint16_t *make_uint16_ptr();
int deref_uint16_ptr(uint16_t *l);
void free_uint16_ptr(uint16_t *l);
+#ifdef SWIGPYTHON
// create a more pythonic interface
%pythoncode %{
@@ -347,3 +348,15 @@ usrp2_sink_32fc_sptr.read_gpio = __read_gpio
usrp2_sink_16sc_sptr.read_gpio = __read_gpio
%}
+#warning "usrp2.i needs to be implemented fr guile!"
+#endif
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-usrp2" "scm_init_gnuradio_usrp2_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-video-sdl/src/Makefile.swig.gen b/gr-video-sdl/src/Makefile.swig.gen
index a2728a4f3..f618aff14 100644
--- a/gr-video-sdl/src/Makefile.swig.gen
+++ b/gr-video-sdl/src/Makefile.swig.gen
@@ -38,6 +38,16 @@ video_sdl_pylibdir_category ?= $(video_sdl_pythondir_category)
video_sdl_pythondir = $(pythondir)/$(video_sdl_pythondir_category)
video_sdl_pylibdir = $(pyexecdir)/$(video_sdl_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+video_sdl_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/video_sdl
+# FIXME: determince whether these should be installed with gnuradio.
+video_sdl_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
video_sdl_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ video_sdl_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/video_sdl-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += video_sdl.py video_sdl.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ video_sdl_pylib_LTLIBRARIES = \
_video_sdl.la
_video_sdl_la_SOURCES = \
- video_sdl.cc \
+ python/video_sdl.cc \
$(video_sdl_la_swig_sources)
_video_sdl_la_LIBADD = \
@@ -99,161 +96,38 @@ _video_sdl_la_LDFLAGS = \
_video_sdl_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(video_sdl_la_swig_cxxflags)
video_sdl_python_PYTHON = \
video_sdl.py \
$(video_sdl_python)
-## Entry rule for running SWIG
+python/video_sdl.cc: video_sdl.py
+video_sdl.py: video_sdl.i
-video_sdl.h video_sdl.py video_sdl.cc: video_sdl.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/video_sdl-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/video_sdl-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/video_sdl-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/video_sdl-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/video_sdl-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/video_sdl-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/video_sdl-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/video_sdl-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/video_sdl.d
+# end of PYTHON
-$(DEPDIR)/video_sdl-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(video_sdl_swig_args) \
- -MD -MF $(DEPDIR)/video_sdl.Std \
- -module video_sdl -o video_sdl.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/video_sdl.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/video_sdl.Std \
- > $(DEPDIR)/video_sdl.Sd; \
- $(RM) $(DEPDIR)/video_sdl.Std; \
- $(MV) $(DEPDIR)/video_sdl.Sd $(DEPDIR)/video_sdl.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/video_sdl.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/video_sdl.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/video_sdl.Std $(DEPDIR)/video_sdl.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/video_sdl.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/video_sdl.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/video_sdl.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/video_sdl.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/video_sdl-generate-stamp
+if GUILE
+video_sdl_scmlib_LTLIBRARIES = libguile-video_sdl.la
+libguile_video_sdl_la_SOURCES = \
+ guile/video_sdl.cc \
+ $(video_sdl_la_swig_sources)
+nobase_video_sdl_scm_DATA = gnuradio/video_sdl.scm gnuradio/video_sdl-primitive.scm
+
+libguile_video_sdl_la_LIBADD = $(_video_sdl_la_LIBADD)
+libguile_video_sdl_la_LDFLAGS = $(_video_sdl_la_LDFLAGS)
+libguile_video_sdl_la_CXXFLAGS = $(_video_sdl_la_CXXFLAGS)
+
+guile/video_sdl.cc: gnuradio/video_sdl.scm
+gnuradio/video_sdl.scm: video_sdl.i
+gnuradio/video_sdl-primitive.scm: gnuradio/video_sdl.scm
+
+# Include the guile dependencies for this file
+-include guile/video_sdl.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/video_sdl.d@am__quote@
diff --git a/gr-video-sdl/src/video_sdl.i b/gr-video-sdl/src/video_sdl.i
index 7084c209b..d609c71af 100644
--- a/gr-video-sdl/src/video_sdl.i
+++ b/gr-video-sdl/src/video_sdl.i
@@ -60,3 +60,13 @@ class video_sdl_sink_s : public gr_sync_block {
public:
~video_sdl_sink_s ();
};
+
+#if SWIGGUILE
+%scheme %{
+(load-extension "libguile-video_sdl" "scm_init_gnuradio_video_sdl_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/setup_guile_test_env.in b/setup_guile_test_env.in
new file mode 100644
index 000000000..ee7e9ea46
--- /dev/null
+++ b/setup_guile_test_env.in
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+# This is sourced by run_guile_tests to establish the environment
+# variables required to run the tests in the build tree.
+
+abs_top_srcdir=@abs_top_srcdir@
+abs_top_builddir=@abs_top_builddir@
+
+
+# FIXME add in OS/X DYLD_LIBRARY_PATH
+# FIXME add in cywin*/win*/mingw* PATH
+# FIXME add in withdirs
+
+
+# 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
+ [ -n "$1" ] && prepend GUILE_LOAD_PATH "$1"
+ [ -n "$2" ] && prepend LTDL_LIBRARY_PATH "$2/.libs"
+ [ -n "$3" -a "$2" != "$3" ] && prepend LTDL_LIBRARY_PATH "$3/.libs"
+ [ -n "$3" ] && prepend GUILE_LOAD_PATH "$3"
+}
+
+# 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"
+ #echo "path = $path"
+ #echo "dir = $dir"
+ #echo "contents = $contents"
+ if [ "$dir" != "" ]
+ then
+ if [ "$contents" = "" ]
+ then
+ eval "$path=\"$dir\""
+ else
+ eval "$path=\"$dir:$contents\""
+ fi
+ fi
+
+ #echo end-of-prepend: $path=${!path}
+}
+
+# ------------------------------------------------------------------------
+# Everybody gets gruel and gnuradio-core for free.
+# FIXME Eventually this should be gruel and gnuradio-runtime.
+# ------------------------------------------------------------------------
+
+# Where to search for not yet installed C++ shared libraries
+prepend mylibdir $abs_top_builddir/gruel/src/lib/.libs
+prepend mylibdir $abs_top_builddir/gnuradio-core/src/lib/.libs
+
+# Where to search for not yet installed swig generated guile libs
+prepend mylibdir $abs_top_builddir/gnuradio-core/src/lib/swig/.libs
+
+# Where to seach for guile code.
+prepend guile_load_path $abs_top_srcdir/gnuradio-core/src/guile
+prepend guile_load_path $abs_top_builddir/gnuradio-core/src/lib/swig
+
+#echo "mylibdir = $mylibdir"
+#echo "guile_load_path = $guile_load_path"
+
+prepend LTDL_LIBRARY_PATH "$mylibdir"
+prepend GUILE_LOAD_PATH "$guile_load_path"
+
+export LTDL_LIBRARY_PATH
+export GUILE_LOAD_PATH
+export GUILE_WARN_DEPRECATED=no
diff --git a/usrp/host/include/usrp/db_base.i b/usrp/host/include/usrp/db_base.i
index 78c72b8c3..fdabd4f99 100644
--- a/usrp/host/include/usrp/db_base.i
+++ b/usrp/host/include/usrp/db_base.i
@@ -91,6 +91,7 @@ typedef boost::shared_ptr<db_base> db_base_sptr;
%template(db_base_sptr_vector) std::vector<db_base_sptr>;
%template(db_base_sptr_vector_vector) std::vector<std::vector<db_base_sptr> >;
+#ifdef SWIGPYTHON
// Set better class name in Python
// Enable freq_range and gain_range from public methods of class not implemented in C++
// And create a dummy wrapper for backwards compatability with some of the example code
@@ -98,5 +99,5 @@ typedef boost::shared_ptr<db_base> db_base_sptr;
db_base_sptr.__repr__ = lambda self: "<db_base::%s>" % (self.name(),)
db_base_sptr.freq_range = lambda self: (self.freq_min(), self.freq_max(), 1)
db_base_sptr.gain_range = lambda self: (self.gain_min(), self.gain_max(), self.gain_db_per_step())
-
%}
+#endif
diff --git a/usrp/host/swig/.gitignore b/usrp/host/swig/.gitignore
index 3a0816517..64c2226bc 100644
--- a/usrp/host/swig/.gitignore
+++ b/usrp/host/swig/.gitignore
@@ -6,9 +6,10 @@
/.libs
/*.la
/*.lo
-/gnuradio_swig_python.cc
-/gnuradio_swig_python.py
/usrp_prims.cc
/usrp_prims.py
+/usrp_prims.scm
+/usrp_prims_python.cc
+/usrp_prims_guile.cc
/prims.cc
/prims.py
diff --git a/usrp/host/swig/Makefile.swig.gen b/usrp/host/swig/Makefile.swig.gen
index 00de3e423..90bd2e53d 100644
--- a/usrp/host/swig/Makefile.swig.gen
+++ b/usrp/host/swig/Makefile.swig.gen
@@ -38,6 +38,16 @@ usrp_prims_pylibdir_category ?= $(usrp_prims_pythondir_category)
usrp_prims_pythondir = $(pythondir)/$(usrp_prims_pythondir_category)
usrp_prims_pylibdir = $(pyexecdir)/$(usrp_prims_pylibdir_category)
+# The .so libraries for the guile modules get installed whereever guile
+# is installed, usually /usr/lib/guile/gnuradio/
+# FIXME: determince whether these should be installed with gnuradio.
+usrp_prims_scmlibdir = $(libdir)
+
+# The scm files for the guile modules get installed where ever guile
+# is installed, usually /usr/share/guile/site/usrp_prims
+# FIXME: determince whether these should be installed with gnuradio.
+usrp_prims_scmdir = $(guiledir)
+
## SWIG headers are always installed into the same directory.
usrp_prims_swigincludedir = $(swigincludedir)
@@ -57,23 +67,10 @@ usrp_prims_swigincludedir = $(swigincludedir)
## right thing. For more info, see <
## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-## Stamps used to ensure parallel make does the right thing. These
-## are removed by "make clean", but otherwise unused except during the
-## parallel built. These will not be included in a tarball, because
-## the SWIG-generated files will be removed from the distribution.
-
-STAMPS += $(DEPDIR)/usrp_prims-generate-*
-
## Other cleaned files: dependency files generated by SWIG or this Makefile
MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-## Add the .py and .cc files to the list of SWIG built sources. The
-## .h file is sometimes built, but not always ... so that one has to
-## be added manually by the including Makefile.am .
-
-swig_built_sources += usrp_prims.py usrp_prims.cc
-
## Various SWIG variables. These can be overloaded in the including
## Makefile.am by setting the variable value there, then including
## Makefile.swig .
@@ -86,7 +83,7 @@ usrp_prims_pylib_LTLIBRARIES = \
_usrp_prims.la
_usrp_prims_la_SOURCES = \
- usrp_prims.cc \
+ python/usrp_prims.cc \
$(usrp_prims_la_swig_sources)
_usrp_prims_la_LIBADD = \
@@ -99,161 +96,38 @@ _usrp_prims_la_LDFLAGS = \
_usrp_prims_la_CXXFLAGS = \
$(STD_SWIG_CXX_FLAGS) \
+ -I$(top_builddir) \
$(usrp_prims_la_swig_cxxflags)
usrp_prims_python_PYTHON = \
usrp_prims.py \
$(usrp_prims_python)
-## Entry rule for running SWIG
+python/usrp_prims.cc: usrp_prims.py
+usrp_prims.py: usrp_prims.i
-usrp_prims.h usrp_prims.py usrp_prims.cc: usrp_prims.i
-## This rule will get called only when MAKE decides that one of the
-## targets needs to be created or re-created, because:
-##
-## * The .i file is newer than any or all of the generated files;
-##
-## * Any or all of the .cc, .h, or .py files does not exist and is
-## needed (in the case this file is not needed, the rule for it is
-## ignored); or
-##
-## * Some SWIG-based dependecy of the .cc file isn't met and hence the
-## .cc file needs be be regenerated. Explanation: Because MAKE
-## knows how to handle dependencies for .cc files (regardless of
-## their name or extension), then the .cc file is used as a target
-## instead of the .i file -- but with the dependencies of the .i
-## file. It is this last reason why the line:
-##
-## if test -f $@; then :; else
-##
-## cannot be used in this case: If a .i file dependecy is not met,
-## then the .cc file needs to be rebuilt. But if the stamp is newer
-## than the .cc file, and the .cc file exists, then in the original
-## version (with the 'test' above) the internal MAKE call will not
-## be issued and hence the .cc file will not be rebuilt.
-##
-## Once execution gets to here, it should always proceed no matter the
-## state of a stamp (as discussed in link above). The
-## $(DEPDIR)/usrp_prims-generate stuff is used to allow for parallel
-## builds to "do the right thing". The stamp has no relationship with
-## either the target files or dependency file; it is used solely for
-## the protection of multiple builds during a given call to MAKE.
-##
-## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
-## (15). At a caught signal, the quoted command will be issued before
-## exiting. In this case, remove any stamp, whether temporary of not.
-## The trap is valid until the process exits; the process includes all
-## commands appended via "\"s.
-##
- trap 'rm -rf $(DEPDIR)/usrp_prims-generate-*' 1 2 13 15; \
-##
-## Create a temporary directory, which acts as a lock. The first
-## process to create the directory will succeed and issue the MAKE
-## command to do the actual work, while all subsequent processes will
-## fail -- leading them to wait for the first process to finish.
-##
- if mkdir $(DEPDIR)/usrp_prims-generate-lock 2>/dev/null; then \
-##
-## This code is being executed by the first process to succeed in
-## creating the directory lock.
-##
-## Remove the stamp associated with this filename.
-##
- rm -f $(DEPDIR)/usrp_prims-generate-stamp; \
-##
-## Tell MAKE to run the rule for creating this stamp.
-##
- $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/usrp_prims-generate-stamp WHAT=$<; \
-##
-## Now that the .cc, .h, and .py files have been (re)created from the
-## .i file, future checking of this rule during the same MAKE
-## execution will come back that the rule doesn't need to be executed
-## because none of the conditions mentioned at the start of this rule
-## will be positive. Remove the the directory lock, which frees up
-## any waiting process(es) to continue.
-##
- rmdir $(DEPDIR)/usrp_prims-generate-lock; \
- else \
-##
-## This code is being executed by any follower processes while the
-## directory lock is in place.
-##
-## Wait until the first process is done, testing once per second.
-##
- while test -d $(DEPDIR)/usrp_prims-generate-lock; do \
- sleep 1; \
- done; \
-##
-## Succeed if and only if the first process succeeded; exit this
-## process returning the status of the generated stamp.
-##
- test -f $(DEPDIR)/usrp_prims-generate-stamp; \
- exit $$?; \
- fi;
+# Include the python dependencies for this file
+-include python/usrp_prims.d
+# end of PYTHON
-$(DEPDIR)/usrp_prims-generate-stamp:
-## This rule will be called only by the first process issuing the
-## above rule to succeed in creating the lock directory, after
-## removing the actual stamp file in order to guarantee that MAKE will
-## execute this rule.
-##
-## Call SWIG to generate the various output files; special
-## post-processing on 'mingw32' host OS for the dependency file.
-##
- if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(usrp_prims_swig_args) \
- -MD -MF $(DEPDIR)/usrp_prims.Std \
- -module usrp_prims -o usrp_prims.cc $(WHAT); then \
- if test $(host_os) = mingw32; then \
- $(RM) $(DEPDIR)/usrp_prims.Sd; \
- $(SED) 's,\\\\,/,g' < $(DEPDIR)/usrp_prims.Std \
- > $(DEPDIR)/usrp_prims.Sd; \
- $(RM) $(DEPDIR)/usrp_prims.Std; \
- $(MV) $(DEPDIR)/usrp_prims.Sd $(DEPDIR)/usrp_prims.Std; \
- fi; \
- else \
- $(RM) $(DEPDIR)/usrp_prims.S*; exit 1; \
- fi;
-##
-## Mess with the SWIG output .Std dependency file, to create a
-## dependecy file valid for the input .i file: Basically, simulate the
-## dependency file created for libraries by GNU's libtool for C++,
-## where all of the dependencies for the target are first listed, then
-## each individual dependency is listed as a target with no further
-## dependencies.
-##
-## (1) remove the current dependency file
-##
- $(RM) $(DEPDIR)/usrp_prims.d
-##
-## (2) Copy the whole SWIG file:
-##
- cp $(DEPDIR)/usrp_prims.Std $(DEPDIR)/usrp_prims.d
-##
-## (3) all a carriage return to the end of the dependency file.
-##
- echo "" >> $(DEPDIR)/usrp_prims.d
-##
-## (4) from the SWIG file, remove the first line (the target); remove
-## trailing " \" and " " from each line. Append ":" to each line,
-## followed by 2 carriage returns, then append this to the end of
-## the dependency file.
-##
- $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/usrp_prims.Std | \
- awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/usrp_prims.d
-##
-## (5) remove the SWIG-generated file
-##
- $(RM) $(DEPDIR)/usrp_prims.Std
-##
-## Create the stamp for this filename generation, to signal success in
-## executing this rule; allows other threads waiting on this process
-## to continue.
-##
- touch $(DEPDIR)/usrp_prims-generate-stamp
+if GUILE
+usrp_prims_scmlib_LTLIBRARIES = libguile-usrp_prims.la
+libguile_usrp_prims_la_SOURCES = \
+ guile/usrp_prims.cc \
+ $(usrp_prims_la_swig_sources)
+nobase_usrp_prims_scm_DATA = gnuradio/usrp_prims.scm gnuradio/usrp_prims-primitive.scm
+
+libguile_usrp_prims_la_LIBADD = $(_usrp_prims_la_LIBADD)
+libguile_usrp_prims_la_LDFLAGS = $(_usrp_prims_la_LDFLAGS)
+libguile_usrp_prims_la_CXXFLAGS = $(_usrp_prims_la_CXXFLAGS)
+
+guile/usrp_prims.cc: gnuradio/usrp_prims.scm
+gnuradio/usrp_prims.scm: usrp_prims.i
+gnuradio/usrp_prims-primitive.scm: gnuradio/usrp_prims.scm
+
+# Include the guile dependencies for this file
+-include guile/usrp_prims.d
-# KLUDGE: Force runtime include of a SWIG dependency file. This is
-# not guaranteed to be portable, but will probably work. If it works,
-# we have accurate dependencies for our swig stuff, which is good.
+endif # end of GUILE
-@am__include@ @am__quote@./$(DEPDIR)/usrp_prims.d@am__quote@